Fork of Smoothie to port to mbed non-LPC targets.
Fork of Smoothie by
Diff: libs/Vector3.cpp
- Revision:
- 2:1df0b61d3b5a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libs/Vector3.cpp Fri Feb 28 18:52:52 2014 -0800 @@ -0,0 +1,101 @@ +#include "Vector3.h" + +#include <fastmath.h> +#include <cstddef> + +float Vector3::nan = NAN; + +Vector3::Vector3() +{ + elem[0] = elem[1] = elem[2] = 0.0F; +} + +Vector3::Vector3(float a, float b, float c) +{ + elem[0] = a; + elem[1] = b; + elem[2] = c; +} + +float& Vector3::operator[](int i) +{ + if (i >= 0 && i <= 2) + return elem[i]; + return nan; +} + +Vector3 Vector3::cross(const Vector3 vec) +{ + Vector3 out; + + out.elem[0] = elem[1] * vec.elem[2] - elem[2] * vec.elem[1]; + out.elem[1] = elem[2] * vec.elem[0] - elem[0] * vec.elem[2]; + out.elem[2] = elem[0] * vec.elem[1] - elem[1] * vec.elem[0]; + + return out; +} + +float Vector3::dot(const Vector3 vec) +{ + return elem[0] * vec.elem[0] + + elem[1] * vec.elem[1] + + elem[2] * vec.elem[2]; +} + +float Vector3::magsq() +{ + return powf(elem[0], 2) + + powf(elem[1], 2) + + powf(elem[2], 2); +} + +float Vector3::mag() +{ + return sqrtf(magsq()); +} + +Vector3 Vector3::add(const Vector3 vec) +{ + Vector3 out; + + out.elem[0] = elem[0] + vec.elem[0]; + out.elem[1] = elem[1] + vec.elem[1]; + out.elem[2] = elem[2] + vec.elem[2]; + + return out; +} + +Vector3 Vector3::sub(const Vector3 vec) +{ + Vector3 out; + + out.elem[0] = elem[0] - vec.elem[0]; + out.elem[1] = elem[1] - vec.elem[1]; + out.elem[2] = elem[2] - vec.elem[2]; + + return out; +} + +Vector3 Vector3::mul(float scalar) +{ + Vector3 out; + + out.elem[0] = elem[0] * scalar; + out.elem[1] = elem[1] * scalar; + out.elem[2] = elem[2] * scalar; + + return out; +} + +Vector3 Vector3::unit() +{ + Vector3 out; + + float denom = mag(); + + out.elem[0] = elem[0] / denom; + out.elem[1] = elem[1] / denom; + out.elem[2] = elem[2] / denom; + + return out; +}