diff options
author | Stijn Buys <ingar@osirion.org> | 2008-07-24 17:12:32 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2008-07-24 17:12:32 +0000 |
commit | e24766e5d3f9da4a7a566fe7035727787f9d822b (patch) | |
tree | 6e9e230436f32c2cc041a6633fa78c08626a65de /src/math/axis.cc | |
parent | 5e3619aa3725833877f66c85977042130fc88c43 (diff) |
improved Track view
Diffstat (limited to 'src/math/axis.cc')
-rw-r--r-- | src/math/axis.cc | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/math/axis.cc b/src/math/axis.cc index 4d752bf..aa35d92 100644 --- a/src/math/axis.cc +++ b/src/math/axis.cc @@ -74,6 +74,23 @@ void Axis::change_roll(const float angle) { axis_vector[1].assign(up); } +// perform a rotation about an arbitrary axis +/* notes: + http://mathworld.wolfram.com/RotationFormula.html +*/ +void Axis::rotate(Vector3f const &normal, float angle) +{ + float cosa = cosf(angle); + float sina = sinf(angle); + + for (size_t i =0; i < 3; i++) { + axis_vector[i] = + axis_vector[i]*cosa + + normal * dotproduct(normal, axis_vector[i]) * (1 - cosa) + + crossproduct(axis_vector[i], normal)*sina; + } +} + /* Axis const Axis::transpose() { |