Changeset 2822 for trunk/packages/vizservers/nanovis/Vector3.h
- Timestamp:
- Mar 7, 2012 12:21:30 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/packages/vizservers/nanovis/Vector3.h
r2798 r2822 17 17 #define _VECTOR3_H_ 18 18 19 /*20 * FIXME: The files that explicitly use the "rot*", "length", "distance", or21 * "normalize" methods, should include the following headers. Don't do it22 * here.23 */24 19 #include <math.h> 25 20 #include "Mat4x4.h" 26 21 27 class Vector3{ 28 private: 29 float radians(float degree) const { 30 return (M_PI * degree) / 180.0; 31 } 22 class Vector3 23 { 32 24 public: 33 25 float x, y, z; 34 Vector3(void) { 35 /*empty*/ 26 27 Vector3() 28 {} 29 30 Vector3(float x_val, float y_val, float z_val) 31 { 32 set(x_val, y_val, z_val); 36 33 } 37 Vector3(float x_val, float y_val, float z_val) { 38 set(x_val, y_val, z_val); 34 35 void set(float x_val, float y_val, float z_val) 36 { 37 x = x_val, y = y_val, z = z_val; 39 38 } 40 Vector3 operator +(float scalar) { 41 return Vector3(x + scalar, y + scalar, z + scalar); 39 40 void print() const 41 { 42 TRACE("(x:%f, y:%f, z:%f)\n", x, y, z); 42 43 } 43 Vector3 operator -(float scalar) { 44 return Vector3(x - scalar, y - scalar, z - scalar); 44 45 Vector3 operator +(float scalar) const 46 { 47 return Vector3(x + scalar, y + scalar, z + scalar); 45 48 } 46 Vector3 operator *(float scalar) { 47 return Vector3(x * scalar, y * scalar, z * scalar); 49 50 Vector3 operator -(float scalar) const 51 { 52 return Vector3(x - scalar, y - scalar, z - scalar); 48 53 } 49 Vector3 operator /(float scalar) { 50 return Vector3(x / scalar, y / scalar, z / scalar); 54 55 Vector3 operator *(float scalar) const 56 { 57 return Vector3(x * scalar, y * scalar, z * scalar); 51 58 } 52 Vector3 operator +(Vector3 &op2) { 53 return Vector3(x + op2.x, y + op2.y, z + op2.z); 59 60 Vector3 operator /(float scalar) const 61 { 62 return Vector3(x / scalar, y / scalar, z / scalar); 54 63 } 55 Vector3 operator -(Vector3 &op2) { 56 return Vector3(x - op2.x, y - op2.y, z - op2.z); 64 65 Vector3 operator +(const Vector3& op2) const 66 { 67 return Vector3(x + op2.x, y + op2.y, z + op2.z); 57 68 } 58 float operator *(const Vector3 &op2){ 59 return x*op2.x + y*op2.y + z*op2.z; 69 70 Vector3 operator -(const Vector3& op2) const 71 { 72 return Vector3(x - op2.x, y - op2.y, z - op2.z); 60 73 } 61 float dot(const Vector3& vec) const { 62 return x*vec.x + y*vec.y + z*vec.z; 74 75 float dot(const Vector3& op2) const 76 { 77 return x*op2.x + y*op2.y + z*op2.z; 63 78 } 64 bool equal(Vector3 &op2) { 65 return (x==op2.x) && (y==op2.y) && (z==op2.z); 79 80 float operator *(const Vector3& op2) const 81 { 82 return dot(op2); 66 83 } 67 Vector3 cross(Vector3 op2) { 68 return Vector3(y*op2.z - z*op2.y, z*op2.x - x*op2.z, x*op2.y - y*op2.x); 84 85 Vector3 cross(const Vector3& op2) const 86 { 87 return Vector3(y*op2.z - z*op2.y, z*op2.x - x*op2.z, x*op2.y - y*op2.x); 69 88 } 70 void operator<(Vector3 &op2) { 71 set(op2.x, op2.y, op2.z); 89 90 Vector3 operator ^(const Vector3& op2) const 91 { 92 return cross(op2); 72 93 } 73 Vector3 operator ^(Vector3 &op2) { 74 return cross(op2); 94 95 Vector3 normalize() const 96 { 97 float len = length(); 98 return Vector3(x / len, y / len, z / len); 75 99 } 76 Vector3 normalize(void) { 77 float len = length(); 78 return Vector3(x / len, y / len, z / len); 100 101 Vector3 rot_x(float degree) const 102 { 103 float rad = radians(degree); 104 return Vector3(x, 105 y*cos(rad) - z*sin(rad), 106 y*sin(rad) + z*cos(rad)); 79 107 } 80 Vector3 rot_x(float degree) { 81 float rad = radians(degree); 82 return Vector3(x, 83 y*cos(rad) - z*sin(rad), 84 y*sin(rad) + z*cos(rad)); 108 109 Vector3 rot_y(float degree) const 110 { 111 float rad = radians(degree); 112 return Vector3(x*cos(rad) + z*sin(rad), 113 y, 114 -x*sin(rad) + z*cos(rad)); 85 115 } 86 Vector3 rot_y(float degree) { 87 float rad = radians(degree); 88 return Vector3(x*cos(rad) + z*sin(rad), 89 y, 90 -x*sin(rad) + z*cos(rad)); 116 117 Vector3 rot_z(float degree) const 118 { 119 float rad = radians(degree); 120 return Vector3(x*cos(rad) - y*sin(rad), 121 x*sin(rad) + y*cos(rad), 122 z); 91 123 } 92 Vector3 rot_z(float degree) { 93 float rad = radians(degree); 94 return Vector3(x*cos(rad) - y*sin(rad), 95 x*sin(rad) + y*cos(rad), 96 z); 124 125 float distance(const Vector3& v) const 126 { 127 return sqrtf(distanceSquare(v)); 97 128 } 98 void set(float x_val, float y_val, float z_val) { 99 x = x_val, y = y_val, z = z_val; 129 130 float distanceSquare(const Vector3& v) const 131 { 132 return (x-v.x)*(x-v.x) + (y-v.y)*(y-v.y) + (z-v.z)*(z-v.z); 100 133 } 101 void print(void){ 102 TRACE("(x:%f, y:%f, z:%f)\n", x, y, z); 134 135 float distanceSquare(float vx, float vy, float vz) const 136 { 137 return (x-vx)*(x-vx) + (y-vy)*(y-vy) + (z-vz)*(z-vz); 103 138 } 104 float distance(Vector3 &v) const { 105 return sqrtf(distanceSquare(v)); 106 } 107 float distanceSquare(Vector3 &v) const { 108 return (x-v.x)*(x-v.x) + (y-v.y)*(y-v.y) + (z-v.z)*(z-v.z); 109 } 110 float distanceSquare(float vx, float vy, float vz) const { 111 return (x-vx)*(x-vx) + (y-vy)*(y-vy) + (z-vz)*(z-vz); 112 } 113 void transform(const Vector3& v, const Mat4x4& mat) { 139 140 void transform(const Vector3& v, const Mat4x4& mat) 141 { 114 142 const float* m = mat.m; 115 143 x = m[0] * v.x + m[4] * v.y + m[8] * v.z + m[12]; … … 117 145 z = m[2] * v.x + m[6] * v.y + m[10] * v.z + m[14]; 118 146 } 119 float length(void) const { 120 return sqrt(x*x + y*y + z*z); 147 148 float length() const 149 { 150 return sqrt(x*x + y*y + z*z); 121 151 } 122 152 123 Vector3 scale(const Vector3& scale) 153 Vector3 scale(const Vector3& scale) const 124 154 { 125 155 Vector3 v; … … 130 160 } 131 161 132 friend Vector3 operator+(const Vector3& value1, const Vector3& value2); 133 134 162 private: 163 float radians(float degree) const 164 { 165 return (M_PI * degree) / 180.0; 166 } 135 167 }; 136 168 137 inline Vector3 operator+(const Vector3& value1, const Vector3& value2)138 {139 return Vector3(value1.x + value2.x, value1.y + value2.y, value1.z + value2.z);140 }141 142 169 #endif
Note: See TracChangeset
for help on using the changeset viewer.