Add mat3_from_rotation function

This commit is contained in:
Brendan Zabarauskas 2012-11-14 18:23:15 +10:00
parent a9273389ea
commit aada68c23e
2 changed files with 11 additions and 8 deletions

View file

@ -2,9 +2,9 @@ use num::Num;
use ncast::*; use ncast::*;
use funs::exp::Exp; use funs::exp::Exp;
use funs::trig::*; use funs::trig::*;
use matrix::Mat4; use matrix::{Mat3, Mat4};
pub pure fn mat4_from_rotation<T:Copy Num NumCast AngleConv Trig>(theta: T, axis: Vec3<T>) -> Mat4<T> { pub pure fn mat3_from_rotation<T:Copy Num NumCast AngleConv Trig>(theta: T, axis: Vec3<T>) -> Mat3<T> {
let rad = radians(&theta); let rad = radians(&theta);
let c: T = cos(&rad); let c: T = cos(&rad);
let s: T = sin(&rad); let s: T = sin(&rad);
@ -12,8 +12,11 @@ pub pure fn mat4_from_rotation<T:Copy Num NumCast AngleConv Trig>(theta: T, axis
let _1: T = cast(1); let _1: T = cast(1);
let t: T = _1 - c; let t: T = _1 - c;
Mat4::new(t * axis.x * axis.x + c, t * axis.x * axis.y + s * axis.z, t * axis.x * axis.z - s * axis.y, _0, Mat3::new(t * axis.x * axis.x + c, t * axis.x * axis.y + s * axis.z, t * axis.x * axis.z - s * axis.y,
t * axis.x * axis.y - s * axis.z, t * axis.y * axis.y + c, t * axis.y * axis.z + s * axis.x, _0, t * axis.x * axis.y - s * axis.z, t * axis.y * axis.y + c, t * axis.y * axis.z + s * axis.x,
t * axis.x * axis.z - s - axis.y, t * axis.y * axis.z - s * axis.x, t * axis.z * axis.z + c, _0, t * axis.x * axis.z - s - axis.y, t * axis.y * axis.z - s * axis.x, t * axis.z * axis.z + c)
_0, _0, _0, _1) }
pub pure fn mat4_from_rotation<T:Copy Num NumCast AngleConv Trig>(theta: T, axis: Vec3<T>) -> Mat4<T> {
mat3_from_rotation(theta, axis).to_Mat4()
} }

View file

@ -260,7 +260,7 @@ pub impl<T:Copy Num NumCast FuzzyEq> Mat2<T>: NumericMatrix_NxN<T, Vec2<T>> {
} }
} }
pub impl<T:Copy Num NumCast FuzzyEq> Mat2<T>: Matrix2<T> { pub impl<T:Copy NumCast> Mat2<T>: Matrix2<T> {
#[inline(always)] #[inline(always)]
pure fn to_Mat3() -> Mat3<T> { pure fn to_Mat3() -> Mat3<T> {
Mat3::from_Mat2(&self) Mat3::from_Mat2(&self)
@ -511,7 +511,7 @@ pub impl<T:Copy Num NumCast FuzzyEq> Mat3<T>: NumericMatrix_NxN<T, Vec3<T>> {
} }
} }
pub impl<T:Copy Num NumCast FuzzyEq> Mat3<T>: Matrix3<T> { pub impl<T:Copy NumCast> Mat3<T>: Matrix3<T> {
#[inline(always)] #[inline(always)]
pure fn to_Mat4() -> Mat4<T> { pure fn to_Mat4() -> Mat4<T> {
Mat4::from_Mat3(&self) Mat4::from_Mat3(&self)