Nxna2
All Classes Namespaces Functions Enumerations Enumerator Pages
Vector2.h
1 #ifndef MATH_VECTOR2_H
2 #define MATH_VECTOR2_H
3 
4 //#include <intrin.h>
5 
6 #include "MathBase.h"
7 
8 namespace Nxna
9 {
10  struct Matrix;
11 
12  struct Vector2
13  {
14  Vector2()
15  {
16  X = 0; Y = 0;
17  }
18 
19  Vector2(float v)
20  {
21  X = v;
22  Y = v;
23  }
24 
25  Vector2(float x, float y)
26  {
27  this->X = x;
28  this->Y = y;
29  }
30 
31  Vector2 operator-() const
32  {
33  return Vector2(-X, -Y);
34  }
35 
36  Vector2 operator *(float s) const
37  {
38  return Vector2(X * s, Y * s);
39  }
40 
41  Vector2 operator /(float s) const
42  {
43  return Vector2(X / s, Y / s);
44  }
45 
46  Vector2 operator /(const Vector2& v) const
47  {
48  return Vector2(X / v.X, Y / v.Y);
49  }
50 
51  Vector2 operator*(const Vector2& v) const
52  {
53  return Vector2(X * v.X, Y * v.Y);
54  }
55 
56  Vector2 operator +(const Vector2& v) const
57  {
58  return Vector2(X + v.X, Y + v.Y);
59  }
60 
61  Vector2 operator -(const Vector2& v) const
62  {
63  return Vector2(X - v.X, Y - v.Y);
64  }
65 
66  Vector2 operator +=(const Vector2& v)
67  {
68  X += v.X;
69  Y += v.Y;
70 
71  return *this;
72  }
73 
74  Vector2 operator -=(const Vector2& v)
75  {
76  X -= v.X;
77  Y -= v.Y;
78 
79  return *this;
80  }
81 
82  Vector2 operator /=(float n)
83  {
84  X /= n;
85  Y /= n;
86 
87  return *this;
88  }
89 
90  Vector2 operator *=(float n)
91  {
92  X *= n;
93  Y *= n;
94 
95  return *this;
96  }
97 
98  Vector2 Rotate(float angle) const
99  {
100  float sine = sinf(angle);
101  float cosine = cosf(angle);
102 
103  Vector2 result;
104  result.X = X * cosine - Y * sine;
105  result.Y = X * sine + Y * cosine;
106 
107  return result;
108  }
109 
110  float Length() const
111  {
112  return sqrtf(X * X + Y * Y);
113  }
114 
115  float LengthSquared() const
116  {
117  return X * X + Y * Y;
118  }
119 
120  void Normalize();
121 
122  float X, Y;
123 
124  static void Dot(const Vector2& v1, const Vector2& v2, float& result)
125  {
126  result = v1.X * v2.X + v1.Y * v2.Y;
127  }
128 
129  static float Dot(const Vector2& v1, const Vector2& v2)
130  {
131  return v1.X * v2.X + v1.Y * v2.Y;
132  }
133 
134  static Vector2 Normalize(const Vector2& v);
135  static void Transform(const Vector2& v, const Matrix& m, Vector2& result);
136  static float Distance(const Vector2& v1, const Vector2& v2);
137  static float DistanceSquared(const Vector2& v1, const Vector2& v2);
138  static void DistanceSquared(const Vector2& v1, const Vector2& v2, float& result);
139  static Vector2 Lerp(const Vector2& v1, const Vector2& v2, float amount);
140  static void Lerp(const Vector2& v1, const Vector2& v2, float amount, Vector2& result);
141 
142  static const Vector2& Zero;
143  static const Vector2& One;
144  static const Vector2& UnitX;
145  static const Vector2& UnitY;
146 
147  private:
148  static Vector2 m_zero;
149  static Vector2 m_one;
150  static Vector2 m_unitX;
151  static Vector2 m_unitY;
152  };
153 }
154 
155 #endif // MATH_VECTOR2_H
Definition: Vector2.h:12
Definition: Matrix.h:8