raSystem  1.0 bata
raVector3.h
Go to the documentation of this file.
1 #pragma once
2 
3  class RAPI raMatrix;
4 
5  class RAPI raVector3
6  {
7  public:
8  union
9  {
10  struct
11  {
15  };
16  raFloat c[3];
17  };
18 
19  raVector3(void) : x(0), y(0), z(0) {}
20  raVector3(raFloat _x, raFloat _y, raFloat _z) : x(_x), y(_y), z(_z) {}
21  raVector3(const raFloat f) : x(f), y(f), z(f) {}
22  raVector3(const raVector3& vec) : x(vec.x), y(vec.y), z(vec.z) {}
23  raVector3(const raFloat *lpf) : x(lpf[0]), y(lpf[1]), z(lpf[2]) {}
24  raVector3(D3DXVECTOR3 vec) : x(vec.x), y(vec.y), z(vec.z) {}
25 
26  operator float* () { return (float*)(c); }
27  operator void* () { return (void*)(c); }
28  operator const float* () const { return (float*)c; }
29  operator D3DXVECTOR3 () { return D3DXVECTOR3((float)x, (float)y, (float)z); }
30  operator D3DXVECTOR3*() { return &D3DXVECTOR3((float)x, (float)y, (float)z); }
31 
32  raVector3& operator = (const raVector3& v) { x = v.x; y = v.y; z = v.z; return *this; }
33  raVector3& operator += (const raVector3& v) { x += v.x; y += v.y; z += v.z; return *this; }
34  raVector3& operator -= (const raVector3& v) { x -= v.x; y -= v.y; z -= v.z; return *this; }
35  raVector3& operator *= (const raVector3& v) { x *= v.x; y *= v.y; z *= v.z; return *this; }
36  raVector3& operator /= (const raVector3& v) { x /= v.x; y /= v.y; z /= v.z; return *this; }
37 
38  raVector3& operator /= (const float& f) { x /= f; y /= f; z /= f; return *this; }
39  raVector3& operator *= (const float& f) { x *= f; y *= f; z *= f; return *this; }
40  };
41  inline raVector3 operator + (const raVector3& a, const raVector3& b) { return raVector3 (a.x + b.x, a.y + b.y, a.z + b.z); }
42  inline raVector3 operator - (const raVector3& a, const raVector3& b) { return raVector3 (a.x - b.x, a.y - b.y, a.z - b.z); }
43  inline raVector3 operator - (const raVector3& a) { return raVector3 (-a.x, -a.y, -a.z); }
44  inline raVector3 operator * (const raVector3& a,const raVector3& b) { return raVector3 (a.x * b.x, a.y * b.y, a.z * b.z); }
45  inline raVector3 operator * (const raVector3& a, const raFloat& b) { return raVector3 (a.x * b, a.y * b, a.z * b); }
46  inline raVector3 operator * (const raFloat& a,const raVector3& b) { return raVector3 (a * b.x, a * b.y, a * b.z); }
47  inline raVector3 operator / (const raVector3& a,const raVector3& b) { return raVector3 (a.x / b.x, a.y / b.y, a.z / b.z); }
48  inline raVector3 operator / (const raFloat& a,const raVector3& b) { return raVector3 (a / b.x, a / b.y, a / b.z); }
49  inline raVector3 operator / (const raVector3& a,const raFloat& b) { return raVector3 (a.x / b, a.y / b, a.z / b); }
50 
51  inline bool operator == (const raVector3& a, const raVector3& b) { return ((a.x == b.x) && (a.y == b.y) && (a.z == b.z)); }
52  inline bool operator != (const raVector3& a, const raVector3& b) { return ((a.x != b.x) && (a.y != b.y) && (a.z != b.z)); }
53  inline bool operator <= (const raVector3& a, const raVector3& b) { return ((a.x <= b.x) && (a.y <= b.y) && (a.z <= b.z)); }
54  inline bool operator >= (const raVector3& a, const raVector3& b) { return ((a.x >= b.x) && (a.y >= b.y) && (a.z >= b.z)); }
55  inline bool operator < (const raVector3& a, const raVector3& b) { return ((a.x < b.x) && (a.y < b.y) && (a.z < b.z)); }
56  inline bool operator > (const raVector3& a, const raVector3& b) { return ((a.x > b.x) && (a.y > b.y) && (a.z > b.z)); }
57 
58  inline raFloat raVector3LenghtSq(const raVector3& v) { return (v.x * v.x + v.y * v.y + v.z * v.z); }
59  inline raFloat raVector3Lenght(const raVector3& v) { return sqrtf(v.x * v.x + v.y * v.y + v.z * v.z); }
60  inline raVector3 raVector3Normalize(const raVector3& v) { return v / sqrtf(raFloat(v.x * v.x + v.y * v.y + v.z * v.z)); }
61  inline raVector3 raVector3NormalizeEx(const raVector3& v) { return v / (sqrtf(raFloat(v.x * v.x + v.y * v.y + v.z * v.z)) + 0.0001f); }
62  inline raVector3 raVector3Cross(const raVector3& v1, raVector3& v2) { return raVector3(v1.y * v2.z - v1.z * v2.y, v1.z * v2.x - v1.x * v2.z,
63  v1.x * v2.y - v1.y * v2.x); }
64  inline raFloat raVector3Dot(const raVector3& v1, const raVector3& v2) { return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;}
65  inline raFloat raVector3Angle(const raVector3& v1, const raVector3& v2) { return acosf(float((v1.x * v2.x + v1.y * v2.y + v1.z * v2.z)) /
66  sqrtf(float((v1.x * v1.x + v1.y * v1.y + v1.z * v1.z)) * float((v2.x * v2.x + v2.y * v2.y + v2.z * v2.z)))); }
68  const raFloat p) { return v1 + p * (v2 - v1); }
70  const raFloat p) { return raVector3Normalize(v1 + p * (v2 - v1)); }
71  inline bool raVector3NearEqual(const raVector3& v1, raVector3& v2,
72  const raVector2& epsilon) { return ( abs(float(v1.x - v2.x )) <= epsilon && ( abs(float(v1.y - v2.y)) <= epsilon) && (abs(float(v1.z - v2.z)) <= epsilon)); }
raVector3(const raFloat *lpf)
Definition: raVector3.h:23
raVector3(void)
Definition: raVector3.h:19
raVector3 operator*(const raVector3 &a, const raVector3 &b)
Definition: raVector3.h:44
raFloat y
Definition: raVector3.h:13
raFloat x
Definition: raVector3.h:12
raVector3 raVector3Cross(const raVector3 &v1, raVector3 &v2)
Definition: raVector3.h:62
bool operator>=(const raVector3 &a, const raVector3 &b)
Definition: raVector3.h:54
#define RAPI
Definition: raMain.h:11
bool operator>(const raVector3 &a, const raVector3 &b)
Definition: raVector3.h:56
raVector3 raVector3Normalize(const raVector3 &v)
Definition: raVector3.h:60
bool operator<=(const raVector3 &a, const raVector3 &b)
Definition: raVector3.h:53
raFloat z
Definition: raVector3.h:14
raVector3(const raVector3 &vec)
Definition: raVector3.h:22
float raFloat
Definition: raMain.h:106
raVector3 operator/(const raVector3 &a, const raVector3 &b)
Definition: raVector3.h:47
bool operator!=(const raVector3 &a, const raVector3 &b)
Definition: raVector3.h:52
bool operator<(const raVector3 &a, const raVector3 &b)
Definition: raVector3.h:55
raFloat raVector3Lenght(const raVector3 &v)
Definition: raVector3.h:59
raFloat raVector3LenghtSq(const raVector3 &v)
Definition: raVector3.h:58
raVector3(raFloat _x, raFloat _y, raFloat _z)
Definition: raVector3.h:20
raFloat raVector3Angle(const raVector3 &v1, const raVector3 &v2)
Definition: raVector3.h:65
raVector3(const raFloat f)
Definition: raVector3.h:21
raVector3(D3DXVECTOR3 vec)
Definition: raVector3.h:24
raVector3 raVector3NormalizeEx(const raVector3 &v)
Definition: raVector3.h:61
bool operator==(const raVector3 &a, const raVector3 &b)
Definition: raVector3.h:51
raVector3 raVector3InterpolateCoords(const raVector3 &v1, const raVector3 &v2, const raFloat p)
Definition: raVector3.h:67
bool raVector3NearEqual(const raVector3 &v1, raVector3 &v2, const raVector2 &epsilon)
Definition: raVector3.h:71
raFloat raVector3Dot(const raVector3 &v1, const raVector3 &v2)
Definition: raVector3.h:64
raVector3 operator+(const raVector3 &a, const raVector3 &b)
Definition: raVector3.h:41
raVector3 raVector3InterpolateNormal(const raVector3 &v1, const raVector3 &v2, const raFloat p)
Definition: raVector3.h:69
raVector3 operator-(const raVector3 &a, const raVector3 &b)
Definition: raVector3.h:42