diff --git a/src/matrix.rs b/src/matrix.rs index bcbcc67..c16d780 100644 --- a/src/matrix.rs +++ b/src/matrix.rs @@ -2,7 +2,7 @@ use std::cmp::FuzzyEq; use cmp::Eq; use math::Sqrt; use quaternion::Quat; -use vector::*; +use vector::{Vec2, Vec3, Vec4}; // // NxN Matrix @@ -59,10 +59,10 @@ pub trait Matrix4 { // pub struct Mat2 { data:[Vec2 * 2] } -pub const mat2_zero :Mat2 = Mat2 { data: [ vec2_zero, - vec2_zero ] }; -pub const mat2_identity :Mat2 = Mat2 { data: [ vec2_unit_x, - vec2_unit_y ] }; +pub const mat2_zero :Mat2 = Mat2 { data: [ Vec2::zero, + Vec2::zero ] }; +pub const mat2_identity :Mat2 = Mat2 { data: [ Vec2::unit_x, + Vec2::unit_y ] }; // // Mat2 Constructor @@ -82,6 +82,13 @@ pub pure fn Mat2_v(col0: &Vec2, col1: &Vec2) -> Mat2 { Mat2 { data: [ *col0, *col1 ] } } +pub mod Mat2 { + pub const zero :Mat2 = Mat2 { data: [ Vec2::zero, + Vec2::zero ] }; + pub const identity :Mat2 = Mat2 { data: [ Vec2::unit_x, + Vec2::unit_y ] }; +} + // // Matrix2x2 Implementation // @@ -157,7 +164,7 @@ pub impl Mat2: Matrix { #[inline] pure fn is_identity() -> bool { - self.fuzzy_eq(&mat2_identity) + self.fuzzy_eq(&Mat2::identity) } #[inline] @@ -174,7 +181,7 @@ pub impl Mat2: Matrix { #[inline] pure fn is_rotated() -> bool { - !self.fuzzy_eq(&mat2_identity) + !self.fuzzy_eq(&Mat2::identity) } } @@ -222,13 +229,6 @@ pub impl Mat2: FuzzyEq { // pub struct Mat3 { data:[Vec3 * 3] } -pub const mat3_zero :Mat3 = Mat3 { data: [ vec3_zero, - vec3_zero, - vec3_zero ] }; -pub const mat3_identity :Mat3 = Mat3 { data: [ vec3_unit_x, - vec3_unit_y, - vec3_unit_z ] }; - // // Mat3 Constructor // @@ -249,6 +249,15 @@ pub pure fn Mat3_v(col0: &Vec3, col1: &Vec3, col2: &Vec3) -> Mat3 { Mat3 { data: [ *col0, *col1, *col2 ] } } +pub mod Mat3 { + pub const zero :Mat3 = Mat3 { data: [ Vec3::zero, + Vec3::zero, + Vec3::zero ] }; + pub const identity :Mat3 = Mat3 { data: [ Vec3::unit_x, + Vec3::unit_y, + Vec3::unit_z ] }; +} + // // Matrix3x3 Implementation // @@ -337,7 +346,7 @@ pub impl Mat3: Matrix { #[inline] pure fn is_identity() -> bool { - self.fuzzy_eq(&mat3_identity) + self.fuzzy_eq(&Mat3::identity) } #[inline] @@ -366,7 +375,7 @@ pub impl Mat3: Matrix { #[inline] pure fn is_rotated() -> bool { - !self.fuzzy_eq(&mat3_identity) + !self.fuzzy_eq(&Mat3::identity) } } @@ -472,15 +481,6 @@ pub impl Mat3: FuzzyEq { // pub struct Mat4 { data:[Vec4 * 4] } -pub const mat4_zero :Mat4 = Mat4 { data: [ vec4_zero, - vec4_zero, - vec4_zero, - vec4_zero ] }; -pub const mat4_identity :Mat4 = Mat4 { data: [ vec4_unit_x, - vec4_unit_y, - vec4_unit_z, - vec4_unit_w ] }; - // // Mat4 Constructor // @@ -503,6 +503,17 @@ pub pure fn Mat4_v(col0: &Vec4, col1: &Vec4, col2: &Vec4, col3: &Vec4) -> Mat4 { Mat4 { data: [ *col0, *col1, *col2, *col3 ] } } +pub mod Mat4 { + pub const zero :Mat4 = Mat4 { data: [ Vec4::zero, + Vec4::zero, + Vec4::zero, + Vec4::zero ] }; + pub const identity :Mat4 = Mat4 { data: [ Vec4::unit_x, + Vec4::unit_y, + Vec4::unit_z, + Vec4::unit_w ] }; +} + // // Matrix4x4 Implementation // @@ -606,7 +617,7 @@ pub impl Mat4: Matrix { #[inline] pure fn is_identity() -> bool { - self.fuzzy_eq(&mat4_identity) + self.fuzzy_eq(&Mat4::identity) } #[inline] @@ -649,7 +660,7 @@ pub impl Mat4: Matrix { #[inline] pure fn is_rotated() -> bool { - !self.fuzzy_eq(&mat4_identity) + !self.fuzzy_eq(&Mat4::identity) } } diff --git a/src/quaternion.rs b/src/quaternion.rs index f530c62..09bfa66 100644 --- a/src/quaternion.rs +++ b/src/quaternion.rs @@ -43,9 +43,6 @@ pub trait Quaternion { // pub struct Quat { w: float, x: float, y: float, z: float } -pub const quat_zero :Quat = Quat { w: 0f, x: 0f, y: 0f, z: 0f }; -pub const quat_identity :Quat = Quat { w: 1f, x: 0f, y: 0f, z: 0f }; - // // Quat Constructor // @@ -54,6 +51,11 @@ pub pure fn Quat(w: float, x: float, y: float, z: float) -> Quat { Quat { w: w, x: x, y: y, z: z } } +pub mod Quat { + pub const zero :Quat = Quat { w: 0f, x: 0f, y: 0f, z: 0f }; + pub const identity :Quat = Quat { w: 1f, x: 0f, y: 0f, z: 0f }; +} + // // Quaternion Implementation // diff --git a/src/test/test_matrix.rs b/src/test/test_matrix.rs index ba0048e..ce6f957 100644 --- a/src/test/test_matrix.rs +++ b/src/test/test_matrix.rs @@ -49,10 +49,10 @@ fn test_Mat2() { // fuzzy_eq // eq - assert mat2_identity.is_identity(); - assert mat2_identity.is_symmetric(); - assert mat2_identity.is_diagonal(); - assert !mat2_identity.is_rotated(); + assert Mat2::identity.is_identity(); + assert Mat2::identity.is_symmetric(); + assert Mat2::identity.is_diagonal(); + assert !Mat2::identity.is_rotated(); assert !a.is_identity(); assert !a.is_symmetric(); @@ -126,10 +126,10 @@ fn test_Mat3() { // fuzzy_eq // eq - assert mat3_identity.is_identity(); - assert mat3_identity.is_symmetric(); - assert mat3_identity.is_diagonal(); - assert !mat3_identity.is_rotated(); + assert Mat3::identity.is_identity(); + assert Mat3::identity.is_symmetric(); + assert Mat3::identity.is_diagonal(); + assert !Mat3::identity.is_rotated(); assert !a.is_identity(); assert !a.is_symmetric(); @@ -224,10 +224,10 @@ fn test_Mat4() { // fuzzy_eq // eq - assert mat4_identity.is_identity(); - assert mat4_identity.is_symmetric(); - assert mat4_identity.is_diagonal(); - assert !mat4_identity.is_rotated(); + assert Mat4::identity.is_identity(); + assert Mat4::identity.is_symmetric(); + assert Mat4::identity.is_diagonal(); + assert !Mat4::identity.is_rotated(); assert !a.is_identity(); assert !a.is_symmetric(); diff --git a/src/test/test_quaternion.rs b/src/test/test_quaternion.rs index a29659d..a27afc2 100644 --- a/src/test/test_quaternion.rs +++ b/src/test/test_quaternion.rs @@ -13,8 +13,8 @@ fn test_Quat() { assert a == Quat(1f, 2f, 3f, 4f); - assert quat_zero == Quat(0f, 0f, 0f, 0f); - assert quat_identity == Quat(1f, 0f, 0f, 0f); + assert Quat::zero == Quat(0f, 0f, 0f, 0f); + assert Quat::identity == Quat(1f, 0f, 0f, 0f); assert a.w == 1f; assert a.x == 2f; diff --git a/src/test/test_vector.rs b/src/test/test_vector.rs index 305cf2c..6e402ff 100644 --- a/src/test/test_vector.rs +++ b/src/test/test_vector.rs @@ -14,10 +14,10 @@ fn test_Vec2() { assert a == Vec2(1f, 2f); - assert vec2_zero == Vec2(0f, 0f); - assert vec2_unit_x == Vec2(1f, 0f); - assert vec2_unit_y == Vec2(0f, 1f); - assert vec2_identity == Vec2(1f, 1f); + assert Vec2::zero == Vec2(0f, 0f); + assert Vec2::unit_x == Vec2(1f, 0f); + assert Vec2::unit_y == Vec2(0f, 1f); + assert Vec2::identity == Vec2(1f, 1f); assert a.x == 1f; assert a.y == 2f; @@ -63,11 +63,11 @@ fn test_Vec3() { assert a == Vec3(1f, 2f, 3f); - assert vec3_zero == Vec3(0f, 0f, 0f); - assert vec3_unit_x == Vec3(1f, 0f, 0f); - assert vec3_unit_y == Vec3(0f, 1f, 0f); - assert vec3_unit_z == Vec3(0f, 0f, 1f); - assert vec3_identity == Vec3(1f, 1f, 1f); + assert Vec3::zero == Vec3(0f, 0f, 0f); + assert Vec3::unit_x == Vec3(1f, 0f, 0f); + assert Vec3::unit_y == Vec3(0f, 1f, 0f); + assert Vec3::unit_z == Vec3(0f, 0f, 1f); + assert Vec3::identity == Vec3(1f, 1f, 1f); assert a.x == 1f; assert a.y == 2f; @@ -117,12 +117,12 @@ fn test_Vec4() { assert a == Vec4(1f, 2f, 3f, 4f); - assert vec4_zero == Vec4(0f, 0f, 0f, 0f); - assert vec4_unit_x == Vec4(1f, 0f, 0f, 0f); - assert vec4_unit_y == Vec4(0f, 1f, 0f, 0f); - assert vec4_unit_z == Vec4(0f, 0f, 1f, 0f); - assert vec4_unit_w == Vec4(0f, 0f, 0f, 1f); - assert vec4_identity == Vec4(1f, 1f, 1f, 1f); + assert Vec4::zero == Vec4(0f, 0f, 0f, 0f); + assert Vec4::unit_x == Vec4(1f, 0f, 0f, 0f); + assert Vec4::unit_y == Vec4(0f, 1f, 0f, 0f); + assert Vec4::unit_z == Vec4(0f, 0f, 1f, 0f); + assert Vec4::unit_w == Vec4(0f, 0f, 0f, 1f); + assert Vec4::identity == Vec4(1f, 1f, 1f, 1f); assert a.x == 1f; assert a.y == 2f; diff --git a/src/vector.rs b/src/vector.rs index 2f56951..83b6846 100644 --- a/src/vector.rs +++ b/src/vector.rs @@ -49,10 +49,6 @@ pub trait Vector3 { // pub struct Vec2 { x: float, y: float } -pub const vec2_zero :Vec2 = Vec2 { x: 0f, y: 0f }; -pub const vec2_unit_x :Vec2 = Vec2 { x: 1f, y: 0f }; -pub const vec2_unit_y :Vec2 = Vec2 { x: 0f, y: 1f }; -pub const vec2_identity :Vec2 = Vec2 { x: 1f, y: 1f }; // // Constructor @@ -62,6 +58,13 @@ pub pure fn Vec2(x: float, y: float) -> Vec2 { Vec2 { x: x, y: y } } +pub mod Vec2 { + pub const zero :Vec2 = Vec2 { x: 0f, y: 0f }; + pub const unit_x :Vec2 = Vec2 { x: 1f, y: 0f }; + pub const unit_y :Vec2 = Vec2 { x: 0f, y: 1f }; + pub const identity :Vec2 = Vec2 { x: 1f, y: 1f }; +} + pub impl Vec2: Vector { #[inline] static pure fn dim() -> uint { 2 } @@ -166,8 +169,8 @@ pub impl Vec2: Index { pub impl Vec2: Abs { #[inline] pure fn abs() -> Vec2 { - Vec2(abs(self[0]), - abs(self[1])) + Vec2(abs(&self[0]), + abs(&self[1])) } } @@ -214,12 +217,6 @@ pub impl Vec2: ToStr { // pub struct Vec3 { x: float, y: float, z: float } -pub const vec3_zero :Vec3 = Vec3 { x: 0f, y: 0f, z: 0f }; -pub const vec3_unit_x :Vec3 = Vec3 { x: 1f, y: 0f, z: 0f }; -pub const vec3_unit_y :Vec3 = Vec3 { x: 0f, y: 1f, z: 0f }; -pub const vec3_unit_z :Vec3 = Vec3 { x: 0f, y: 0f, z: 1f }; -pub const vec3_identity :Vec3 = Vec3 { x: 1f, y: 1f, z: 1f }; - // // Constructor // @@ -228,6 +225,14 @@ pub pure fn Vec3(x: float, y: float, z: float) -> Vec3 { Vec3 { x: x, y: y, z: z } } +pub mod Vec3 { + pub const zero :Vec3 = Vec3 { x: 0f, y: 0f, z: 0f }; + pub const unit_x :Vec3 = Vec3 { x: 1f, y: 0f, z: 0f }; + pub const unit_y :Vec3 = Vec3 { x: 0f, y: 1f, z: 0f }; + pub const unit_z :Vec3 = Vec3 { x: 0f, y: 0f, z: 1f }; + pub const identity :Vec3 = Vec3 { x: 1f, y: 1f, z: 1f }; +} + pub impl Vec3: Vector3 { #[inline] fn cross(other: &Vec3) -> Vec3 { @@ -351,9 +356,9 @@ pub impl Vec3: Index { pub impl Vec3: Abs { #[inline] pure fn abs() -> Vec3 { - Vec3(abs(self[0]), - abs(self[1]), - abs(self[2])) + Vec3(abs(&self[0]), + abs(&self[1]), + abs(&self[2])) } } @@ -401,12 +406,14 @@ pub impl Vec3: ToStr { // pub struct Vec4 { x: float, y: float, z: float, w: float } -pub const vec4_zero :Vec4 = Vec4 { x: 0f, y: 0f, z: 0f, w: 0f }; -pub const vec4_unit_x :Vec4 = Vec4 { x: 1f, y: 0f, z: 0f, w: 0f }; -pub const vec4_unit_y :Vec4 = Vec4 { x: 0f, y: 1f, z: 0f, w: 0f }; -pub const vec4_unit_z :Vec4 = Vec4 { x: 0f, y: 0f, z: 1f, w: 0f }; -pub const vec4_unit_w :Vec4 = Vec4 { x: 0f, y: 0f, z: 0f, w: 1f }; -pub const vec4_identity :Vec4 = Vec4 { x: 1f, y: 1f, z: 1f, w: 1f }; +pub mod Vec4 { + pub const zero :Vec4 = Vec4 { x: 0f, y: 0f, z: 0f, w: 0f }; + pub const unit_x :Vec4 = Vec4 { x: 1f, y: 0f, z: 0f, w: 0f }; + pub const unit_y :Vec4 = Vec4 { x: 0f, y: 1f, z: 0f, w: 0f }; + pub const unit_z :Vec4 = Vec4 { x: 0f, y: 0f, z: 1f, w: 0f }; + pub const unit_w :Vec4 = Vec4 { x: 0f, y: 0f, z: 0f, w: 1f }; + pub const identity :Vec4 = Vec4 { x: 1f, y: 1f, z: 1f, w: 1f }; +} // // Constructor @@ -542,10 +549,10 @@ pub impl Vec4: Index { pub impl Vec4: Abs { #[inline] pure fn abs() -> Vec4 { - Vec4(abs(self[0]), - abs(self[1]), - abs(self[2]), - abs(self[3])) + Vec4(abs(&self[0]), + abs(&self[1]), + abs(&self[2]), + abs(&self[3])) } }