Fork of Smoothie to port to mbed non-LPC targets.
Fork of Smoothie by
Vector3.cpp
00001 #include "Vector3.h" 00002 00003 #include <fastmath.h> 00004 #include <cstddef> 00005 00006 float Vector3::nan = NAN; 00007 00008 Vector3::Vector3() 00009 { 00010 elem[0] = elem[1] = elem[2] = 0.0F; 00011 } 00012 00013 Vector3::Vector3(float a, float b, float c) 00014 { 00015 elem[0] = a; 00016 elem[1] = b; 00017 elem[2] = c; 00018 } 00019 00020 float& Vector3::operator[](int i) 00021 { 00022 if (i >= 0 && i <= 2) 00023 return elem[i]; 00024 return nan; 00025 } 00026 00027 Vector3 Vector3::cross(const Vector3 vec) 00028 { 00029 Vector3 out; 00030 00031 out.elem[0] = elem[1] * vec.elem[2] - elem[2] * vec.elem[1]; 00032 out.elem[1] = elem[2] * vec.elem[0] - elem[0] * vec.elem[2]; 00033 out.elem[2] = elem[0] * vec.elem[1] - elem[1] * vec.elem[0]; 00034 00035 return out; 00036 } 00037 00038 float Vector3::dot(const Vector3 vec) 00039 { 00040 return elem[0] * vec.elem[0] + 00041 elem[1] * vec.elem[1] + 00042 elem[2] * vec.elem[2]; 00043 } 00044 00045 float Vector3::magsq() 00046 { 00047 return powf(elem[0], 2) + 00048 powf(elem[1], 2) + 00049 powf(elem[2], 2); 00050 } 00051 00052 float Vector3::mag() 00053 { 00054 return sqrtf(magsq()); 00055 } 00056 00057 Vector3 Vector3::add(const Vector3 vec) 00058 { 00059 Vector3 out; 00060 00061 out.elem[0] = elem[0] + vec.elem[0]; 00062 out.elem[1] = elem[1] + vec.elem[1]; 00063 out.elem[2] = elem[2] + vec.elem[2]; 00064 00065 return out; 00066 } 00067 00068 Vector3 Vector3::sub(const Vector3 vec) 00069 { 00070 Vector3 out; 00071 00072 out.elem[0] = elem[0] - vec.elem[0]; 00073 out.elem[1] = elem[1] - vec.elem[1]; 00074 out.elem[2] = elem[2] - vec.elem[2]; 00075 00076 return out; 00077 } 00078 00079 Vector3 Vector3::mul(float scalar) 00080 { 00081 Vector3 out; 00082 00083 out.elem[0] = elem[0] * scalar; 00084 out.elem[1] = elem[1] * scalar; 00085 out.elem[2] = elem[2] * scalar; 00086 00087 return out; 00088 } 00089 00090 Vector3 Vector3::unit() 00091 { 00092 Vector3 out; 00093 00094 float denom = mag(); 00095 00096 out.elem[0] = elem[0] / denom; 00097 out.elem[1] = elem[1] / denom; 00098 out.elem[2] = elem[2] / denom; 00099 00100 return out; 00101 }
Generated on Tue Jul 12 2022 20:09:03 by 1.7.2