mElite  1.0
An Elite clone based on TextElite by Jan-Philipp Kappmeier and Melanie Schmidt.
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
VectorMath.cpp
Go to the documentation of this file.
1 
6 #include "GlobalGL.h"
7 #include "VectorMath.h"
8 
16  Vector3 a, b, v;
17 
18  a.x = p2.x - p1.x;
19  a.y = p2.y - p1.y;
20  a.z = p2.z - p1.z;
21 
22  b.x = p3.x - p1.x;
23  b.y = p3.y - p1.y;
24  b.z = p3.z - p1.z;
25 
26  v.x = a.y*b.z - b.y*a.z;
27  v.y = a.z*b.x - b.z*a.x;
28  v.z = a.x*b.y - b.x*a.y;
29 
30  v.normalize();
31  return v; // normalize(v);
32 }
33 
40 Vector3 VectorMath::rotateVector( float angle, Vector3 axis, Vector3 oVec ) {
41  Vector3 nVec;
42 
43  float x=axis.x;
44  float y=axis.y;
45  float z=axis.z;
46 
47  // sine and cosine of the angle
48  float cosTheta = (float)cos( angle * M_PI/180.0 );
49  float sinTheta = (float)sin( angle * M_PI/180.0 );
50 
51  // new x
52  nVec.x= (cosTheta + (1 - cosTheta) * x * x) * oVec.x;
53  nVec.x += ((1 - cosTheta) * x * y - z * sinTheta) * oVec.y;
54  nVec.x += ((1 - cosTheta) * x * z + y * sinTheta) * oVec.z;
55 
56  // new y
57  nVec.y= ((1 - cosTheta) * x * y + z * sinTheta) * oVec.x;
58  nVec.y += (cosTheta + (1 - cosTheta) * y * y) * oVec.y;
59  nVec.y += ((1 - cosTheta) * y * z - x * sinTheta) * oVec.z;
60 
61  // new z
62  nVec.z= ((1 - cosTheta) * x * z - y * sinTheta) * oVec.x;
63  nVec.z += ((1 - cosTheta) * y * z + x * sinTheta) * oVec.y;
64  nVec.z += (cosTheta + (1 - cosTheta) * z * z) * oVec.z;
65 
66  return nVec;
67 }