8 float sqr(
float a) {
return a*a;}
12 float magnitude(Vector v) {
18 printf(
"Cant normalize ZERO vector\n");
28 Vector
operator+(Vector
v1,Vector
v2) {
return Vector(v1.x+v2.x,v1.y+v2.y,v1.z+v2.z);}
29 Vector
operator-(Vector
v1,Vector
v2) {
return Vector(v1.x-v2.x,v1.y-v2.y,v1.z-v2.z);}
30 Vector
operator-(Vector v) {
return Vector(-v.x,-v.y,-v.z);}
31 Vector
operator*(Vector
v1,
float s) {
return Vector(v1.x*s,v1.y*s,v1.z*s);}
32 Vector
operator*(
float s, Vector
v1) {
return Vector(v1.x*s,v1.y*s,v1.z*s);}
33 Vector
operator/(Vector
v1,
float s) {
return v1*(1.0f/s);}
34 float operator^(Vector
v1,Vector
v2) {
return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;}
37 v1.y * v2.z - v1.z*v2.y,
38 v1.z * v2.x - v1.x*v2.z,
39 v1.x * v2.y - v1.y*v2.x);
41 Vector planelineintersection(Vector n,
float d,Vector p1,Vector p2){
45 float t = -(d+(n^p1) )/dn;
48 int concurrent(Vector a,Vector
b) {
49 return(a.x==b.x && a.y==b.y && a.z==b.z);
54 matrix transpose(matrix m) {
55 return matrix( Vector(m.x.x,m.y.x,m.z.x),
56 Vector(m.x.y,m.y.y,m.z.y),
57 Vector(m.x.z,m.y.z,m.z.z));
61 return Vector(m.x^v,m.y^v,m.z^v);
65 return matrix(m1*m2.x,m1*m2.y,m1*m2.z);
69 Quaternion
operator*(Quaternion a,Quaternion b) {
71 c.r = a.r*b.r - a.x*b.x - a.y*b.y - a.z*b.z;
72 c.x = a.r*b.x + a.x*b.r + a.y*b.z - a.z*b.y;
73 c.y = a.r*b.y - a.x*b.z + a.y*b.r + a.z*b.x;
74 c.z = a.r*b.z + a.x*b.y - a.y*b.x + a.z*b.r;
78 return Quaternion(q.r*-1,q.x,q.y,q.z);
80 Quaternion
operator*(Quaternion a,
float b) {
81 return Quaternion(a.r*b, a.x*b, a.y*b, a.z*b);
84 return q.getmatrix() * v;
88 return Vector(0.0
f,0.0
f,0.0
f);
91 Quaternion
operator+(Quaternion a,Quaternion b) {
92 return Quaternion(a.r+b.r, a.x+b.x, a.y+b.y, a.z+b.z);
94 float operator^(Quaternion a,Quaternion b) {
95 return (a.r*b.r + a.x*b.x + a.y*b.y + a.z*b.z);
97 Quaternion slerp(Quaternion a,Quaternion b,
float interp){
104 float theta = float(
acos(a^b));
105 if(theta==0.0
f) {
return(a);}
106 return a*float(
sin(theta-interp*theta)/
sin(theta)) + b*float(
sin(interp*theta)/
sin(theta));