xref: /aosp_15_r20/cts/tests/openglperf2/jni/graphics/Vector2D.cpp (revision b7c941bb3fa97aba169d73cee0bed2de8ac964bf)
1*b7c941bbSAndroid Build Coastguard Worker /*
2*b7c941bbSAndroid Build Coastguard Worker  * Copyright (C) 2013 The Android Open Source Project
3*b7c941bbSAndroid Build Coastguard Worker  *
4*b7c941bbSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5*b7c941bbSAndroid Build Coastguard Worker  * in compliance with the License. You may obtain a copy of the License at
6*b7c941bbSAndroid Build Coastguard Worker  *
7*b7c941bbSAndroid Build Coastguard Worker  * http://www.apache.org/licenses/LICENSE-2.0
8*b7c941bbSAndroid Build Coastguard Worker  *
9*b7c941bbSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software distributed under the License
10*b7c941bbSAndroid Build Coastguard Worker  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11*b7c941bbSAndroid Build Coastguard Worker  * or implied. See the License for the specific language governing permissions and limitations under
12*b7c941bbSAndroid Build Coastguard Worker  * the License.
13*b7c941bbSAndroid Build Coastguard Worker  */
14*b7c941bbSAndroid Build Coastguard Worker #include "Vector2D.h"
15*b7c941bbSAndroid Build Coastguard Worker 
16*b7c941bbSAndroid Build Coastguard Worker #include <math.h>
17*b7c941bbSAndroid Build Coastguard Worker 
Vector2D()18*b7c941bbSAndroid Build Coastguard Worker Vector2D::Vector2D() :
19*b7c941bbSAndroid Build Coastguard Worker         mX(0), mY(0) {
20*b7c941bbSAndroid Build Coastguard Worker }
21*b7c941bbSAndroid Build Coastguard Worker 
Vector2D(float x,float y)22*b7c941bbSAndroid Build Coastguard Worker Vector2D::Vector2D(float x, float y) :
23*b7c941bbSAndroid Build Coastguard Worker         mX(x), mY(y) {
24*b7c941bbSAndroid Build Coastguard Worker }
25*b7c941bbSAndroid Build Coastguard Worker 
copy()26*b7c941bbSAndroid Build Coastguard Worker Vector2D Vector2D::copy() {
27*b7c941bbSAndroid Build Coastguard Worker     Vector2D v(mX, mY);
28*b7c941bbSAndroid Build Coastguard Worker     return v;
29*b7c941bbSAndroid Build Coastguard Worker }
30*b7c941bbSAndroid Build Coastguard Worker 
add(const Vector2D & v)31*b7c941bbSAndroid Build Coastguard Worker void Vector2D::add(const Vector2D& v) {
32*b7c941bbSAndroid Build Coastguard Worker     mX += v.mX;
33*b7c941bbSAndroid Build Coastguard Worker     mY += v.mY;
34*b7c941bbSAndroid Build Coastguard Worker }
35*b7c941bbSAndroid Build Coastguard Worker 
sub(const Vector2D & v)36*b7c941bbSAndroid Build Coastguard Worker void Vector2D::sub(const Vector2D& v) {
37*b7c941bbSAndroid Build Coastguard Worker     mX -= v.mX;
38*b7c941bbSAndroid Build Coastguard Worker     mY -= v.mY;
39*b7c941bbSAndroid Build Coastguard Worker }
40*b7c941bbSAndroid Build Coastguard Worker 
scale(float s)41*b7c941bbSAndroid Build Coastguard Worker void Vector2D::scale(float s) {
42*b7c941bbSAndroid Build Coastguard Worker     mX *= s;
43*b7c941bbSAndroid Build Coastguard Worker     mY *= s;
44*b7c941bbSAndroid Build Coastguard Worker }
45*b7c941bbSAndroid Build Coastguard Worker 
distance(const Vector2D & v)46*b7c941bbSAndroid Build Coastguard Worker float Vector2D::distance(const Vector2D& v) {
47*b7c941bbSAndroid Build Coastguard Worker     float dx = mX - v.mX;
48*b7c941bbSAndroid Build Coastguard Worker     float dy = mY - v.mY;
49*b7c941bbSAndroid Build Coastguard Worker     return (float) sqrt(dx * dx + dy * dy);
50*b7c941bbSAndroid Build Coastguard Worker }
51*b7c941bbSAndroid Build Coastguard Worker 
normalize()52*b7c941bbSAndroid Build Coastguard Worker void Vector2D::normalize() {
53*b7c941bbSAndroid Build Coastguard Worker     float m = magnitude();
54*b7c941bbSAndroid Build Coastguard Worker     if (m > 0) {
55*b7c941bbSAndroid Build Coastguard Worker         scale(1 / m);
56*b7c941bbSAndroid Build Coastguard Worker     }
57*b7c941bbSAndroid Build Coastguard Worker }
58*b7c941bbSAndroid Build Coastguard Worker 
limit(float max)59*b7c941bbSAndroid Build Coastguard Worker void Vector2D::limit(float max) {
60*b7c941bbSAndroid Build Coastguard Worker     if (magnitude() > max) {
61*b7c941bbSAndroid Build Coastguard Worker         normalize();
62*b7c941bbSAndroid Build Coastguard Worker         scale(max);
63*b7c941bbSAndroid Build Coastguard Worker     }
64*b7c941bbSAndroid Build Coastguard Worker }
65*b7c941bbSAndroid Build Coastguard Worker 
magnitude()66*b7c941bbSAndroid Build Coastguard Worker float Vector2D::magnitude() {
67*b7c941bbSAndroid Build Coastguard Worker     return (float) sqrt(mX * mX + mY * mY);
68*b7c941bbSAndroid Build Coastguard Worker }
69