forked from M-Labs/nalgebra
Functions to build objects dont shadow constructors any more.
This commit is contained in:
parent
01d37a1b56
commit
ceed733e25
@ -6,9 +6,9 @@ use traits::workarounds::trigonometric::Trigonometric;
|
|||||||
use traits::dim::Dim;
|
use traits::dim::Dim;
|
||||||
use traits::inv::Inv;
|
use traits::inv::Inv;
|
||||||
use traits::transpose::Transpose;
|
use traits::transpose::Transpose;
|
||||||
use dim2::mat2::Mat2;
|
use dim2::mat2::{Mat2, mat2};
|
||||||
use dim3::mat3::Mat3;
|
use dim3::mat3::{Mat3, mat3};
|
||||||
use dim3::vec3::Vec3;
|
use dim3::vec3::{Vec3};
|
||||||
|
|
||||||
// FIXME: use a newtype here?
|
// FIXME: use a newtype here?
|
||||||
#[deriving(Eq)]
|
#[deriving(Eq)]
|
||||||
@ -17,16 +17,16 @@ pub struct Rotmat<M>
|
|||||||
priv submat: M
|
priv submat: M
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn Rotmat2<T: Copy + Trigonometric + Neg<T>>(angle: T) -> Rotmat<Mat2<T>>
|
pub fn rotmat2<T: Copy + Trigonometric + Neg<T>>(angle: T) -> Rotmat<Mat2<T>>
|
||||||
{
|
{
|
||||||
let coa = Trigonometric::cos(angle);
|
let coa = Trigonometric::cos(angle);
|
||||||
let sia = Trigonometric::sin(angle);
|
let sia = Trigonometric::sin(angle);
|
||||||
|
|
||||||
Rotmat
|
Rotmat
|
||||||
{ submat: Mat2(coa, -sia, sia, coa) }
|
{ submat: mat2(coa, -sia, sia, coa) }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn Rotmat3<T: Copy + Trigonometric + Neg<T> + One + Sub<T, T> + Add<T, T> +
|
pub fn rotmat3<T: Copy + Trigonometric + Neg<T> + One + Sub<T, T> + Add<T, T> +
|
||||||
Mul<T, T>>
|
Mul<T, T>>
|
||||||
(axis: &Vec3<T>, angle: T) -> Rotmat<Mat3<T>>
|
(axis: &Vec3<T>, angle: T) -> Rotmat<Mat3<T>>
|
||||||
{
|
{
|
||||||
@ -42,7 +42,7 @@ pub fn Rotmat3<T: Copy + Trigonometric + Neg<T> + One + Sub<T, T> + Add<T, T> +
|
|||||||
let sin = Trigonometric::sin(angle);
|
let sin = Trigonometric::sin(angle);
|
||||||
|
|
||||||
Rotmat {
|
Rotmat {
|
||||||
submat: Mat3(
|
submat: mat3(
|
||||||
(sqx + (_1 - sqx) * cos),
|
(sqx + (_1 - sqx) * cos),
|
||||||
(ux * uy * one_m_cos - uz * sin),
|
(ux * uy * one_m_cos - uz * sin),
|
||||||
(ux * uz * one_m_cos + uy * sin),
|
(ux * uz * one_m_cos + uy * sin),
|
||||||
@ -60,7 +60,7 @@ pub fn Rotmat3<T: Copy + Trigonometric + Neg<T> + One + Sub<T, T> + Add<T, T> +
|
|||||||
impl<T:Copy + Rand + Trigonometric + Neg<T>> Rand for Rotmat<Mat2<T>>
|
impl<T:Copy + Rand + Trigonometric + Neg<T>> Rand for Rotmat<Mat2<T>>
|
||||||
{
|
{
|
||||||
fn rand<R: Rng>(rng: &R) -> Rotmat<Mat2<T>>
|
fn rand<R: Rng>(rng: &R) -> Rotmat<Mat2<T>>
|
||||||
{ Rotmat2(rng.gen()) }
|
{ rotmat2(rng.gen()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:Copy + Rand + Trigonometric + Neg<T> + One + Sub<T, T> + Add<T, T> +
|
impl<T:Copy + Rand + Trigonometric + Neg<T> + One + Sub<T, T> + Add<T, T> +
|
||||||
@ -68,7 +68,7 @@ impl<T:Copy + Rand + Trigonometric + Neg<T> + One + Sub<T, T> + Add<T, T> +
|
|||||||
Rand for Rotmat<Mat3<T>>
|
Rand for Rotmat<Mat3<T>>
|
||||||
{
|
{
|
||||||
fn rand<R: Rng>(rng: &R) -> Rotmat<Mat3<T>>
|
fn rand<R: Rng>(rng: &R) -> Rotmat<Mat3<T>>
|
||||||
{ Rotmat3(&rng.gen(), rng.gen()) }
|
{ rotmat3(&rng.gen(), rng.gen()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<M: Dim> Dim for Rotmat<M>
|
impl<M: Dim> Dim for Rotmat<M>
|
||||||
|
@ -12,7 +12,7 @@ pub struct Transform<M, V>
|
|||||||
subtrans : V
|
subtrans : V
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn Transform<M: Copy, V: Copy>(mat: &M, trans: &V) -> Transform<M, V>
|
pub fn transform<M: Copy, V: Copy>(mat: &M, trans: &V) -> Transform<M, V>
|
||||||
{ Transform { submat: *mat, subtrans: *trans } }
|
{ Transform { submat: *mat, subtrans: *trans } }
|
||||||
|
|
||||||
impl<M:Dim, V> Dim for Transform<M, V>
|
impl<M:Dim, V> Dim for Transform<M, V>
|
||||||
@ -95,7 +95,7 @@ impl<T, M:FuzzyEq<T>, V:FuzzyEq<T>> FuzzyEq<T> for Transform<M, V>
|
|||||||
impl<M: Rand + Copy, V: Rand + Copy> Rand for Transform<M, V>
|
impl<M: Rand + Copy, V: Rand + Copy> Rand for Transform<M, V>
|
||||||
{
|
{
|
||||||
fn rand<R: Rng>(rng: &R) -> Transform<M, V>
|
fn rand<R: Rng>(rng: &R) -> Transform<M, V>
|
||||||
{ Transform(&rng.gen(), &rng.gen()) }
|
{ transform(&rng.gen(), &rng.gen()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<M:ToStr, V:ToStr> ToStr for Transform<M, V>
|
impl<M:ToStr, V:ToStr> ToStr for Transform<M, V>
|
||||||
|
@ -5,13 +5,13 @@ use traits::dim::Dim;
|
|||||||
use traits::inv::Inv;
|
use traits::inv::Inv;
|
||||||
use traits::transpose::Transpose;
|
use traits::transpose::Transpose;
|
||||||
use traits::workarounds::rlmul::{RMul, LMul};
|
use traits::workarounds::rlmul::{RMul, LMul};
|
||||||
use dim1::vec1::Vec1;
|
use dim1::vec1::{Vec1, vec1};
|
||||||
|
|
||||||
#[deriving(Eq)]
|
#[deriving(Eq)]
|
||||||
pub struct Mat1<T>
|
pub struct Mat1<T>
|
||||||
{ m11: T }
|
{ m11: T }
|
||||||
|
|
||||||
pub fn Mat1<T:Copy>(m11: T) -> Mat1<T>
|
pub fn mat1<T:Copy>(m11: T) -> Mat1<T>
|
||||||
{
|
{
|
||||||
Mat1
|
Mat1
|
||||||
{ m11: m11 }
|
{ m11: m11 }
|
||||||
@ -26,13 +26,13 @@ impl<T> Dim for Mat1<T>
|
|||||||
impl<T:Copy + One> One for Mat1<T>
|
impl<T:Copy + One> One for Mat1<T>
|
||||||
{
|
{
|
||||||
fn one() -> Mat1<T>
|
fn one() -> Mat1<T>
|
||||||
{ return Mat1(One::one()) }
|
{ return mat1(One::one()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:Copy + Zero> Zero for Mat1<T>
|
impl<T:Copy + Zero> Zero for Mat1<T>
|
||||||
{
|
{
|
||||||
fn zero() -> Mat1<T>
|
fn zero() -> Mat1<T>
|
||||||
{ Mat1(Zero::zero()) }
|
{ mat1(Zero::zero()) }
|
||||||
|
|
||||||
fn is_zero(&self) -> bool
|
fn is_zero(&self) -> bool
|
||||||
{ self.m11.is_zero() }
|
{ self.m11.is_zero() }
|
||||||
@ -41,19 +41,19 @@ impl<T:Copy + Zero> Zero for Mat1<T>
|
|||||||
impl<T:Copy + Mul<T, T> + Add<T, T>> Mul<Mat1<T>, Mat1<T>> for Mat1<T>
|
impl<T:Copy + Mul<T, T> + Add<T, T>> Mul<Mat1<T>, Mat1<T>> for Mat1<T>
|
||||||
{
|
{
|
||||||
fn mul(&self, other: &Mat1<T>) -> Mat1<T>
|
fn mul(&self, other: &Mat1<T>) -> Mat1<T>
|
||||||
{ Mat1 (self.m11 * other.m11) }
|
{ mat1(self.m11 * other.m11) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:Copy + Add<T, T> + Mul<T, T>> RMul<Vec1<T>> for Mat1<T>
|
impl<T:Copy + Add<T, T> + Mul<T, T>> RMul<Vec1<T>> for Mat1<T>
|
||||||
{
|
{
|
||||||
fn rmul(&self, other: &Vec1<T>) -> Vec1<T>
|
fn rmul(&self, other: &Vec1<T>) -> Vec1<T>
|
||||||
{ Vec1(self.m11 * other.x) }
|
{ vec1(self.m11 * other.x) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:Copy + Add<T, T> + Mul<T, T>> LMul<Vec1<T>> for Mat1<T>
|
impl<T:Copy + Add<T, T> + Mul<T, T>> LMul<Vec1<T>> for Mat1<T>
|
||||||
{
|
{
|
||||||
fn lmul(&self, other: &Vec1<T>) -> Vec1<T>
|
fn lmul(&self, other: &Vec1<T>) -> Vec1<T>
|
||||||
{ Vec1(self.m11 * other.x) }
|
{ vec1(self.m11 * other.x) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:Copy + Mul<T, T> + Quot<T, T> + Sub<T, T> + Neg<T> + Zero + One>
|
impl<T:Copy + Mul<T, T> + Quot<T, T> + Sub<T, T> + Neg<T> + Zero + One>
|
||||||
@ -97,7 +97,7 @@ impl<T:FuzzyEq<T>> FuzzyEq<T> for Mat1<T>
|
|||||||
impl<T:Rand + Copy> Rand for Mat1<T>
|
impl<T:Rand + Copy> Rand for Mat1<T>
|
||||||
{
|
{
|
||||||
fn rand<R: Rng>(rng: &R) -> Mat1<T>
|
fn rand<R: Rng>(rng: &R) -> Mat1<T>
|
||||||
{ Mat1(rng.gen()) }
|
{ mat1(rng.gen()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:ToStr> ToStr for Mat1<T>
|
impl<T:ToStr> ToStr for Mat1<T>
|
||||||
|
@ -11,7 +11,7 @@ use traits::workarounds::scalar_op::{ScalarMul, ScalarDiv, ScalarAdd, ScalarSub}
|
|||||||
pub struct Vec1<T>
|
pub struct Vec1<T>
|
||||||
{ x : T }
|
{ x : T }
|
||||||
|
|
||||||
pub fn Vec1<T:Copy>(x: T) -> Vec1<T>
|
pub fn vec1<T:Copy>(x: T) -> Vec1<T>
|
||||||
{ Vec1 {x: x} }
|
{ Vec1 {x: x} }
|
||||||
|
|
||||||
impl<T> Dim for Vec1<T>
|
impl<T> Dim for Vec1<T>
|
||||||
@ -23,13 +23,13 @@ impl<T> Dim for Vec1<T>
|
|||||||
impl<T:Copy + Add<T,T>> Add<Vec1<T>, Vec1<T>> for Vec1<T>
|
impl<T:Copy + Add<T,T>> Add<Vec1<T>, Vec1<T>> for Vec1<T>
|
||||||
{
|
{
|
||||||
fn add(&self, other: &Vec1<T>) -> Vec1<T>
|
fn add(&self, other: &Vec1<T>) -> Vec1<T>
|
||||||
{ Vec1(self.x + other.x) }
|
{ vec1(self.x + other.x) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:Copy + Sub<T,T>> Sub<Vec1<T>, Vec1<T>> for Vec1<T>
|
impl<T:Copy + Sub<T,T>> Sub<Vec1<T>, Vec1<T>> for Vec1<T>
|
||||||
{
|
{
|
||||||
fn sub(&self, other: &Vec1<T>) -> Vec1<T>
|
fn sub(&self, other: &Vec1<T>) -> Vec1<T>
|
||||||
{ Vec1(self.x - other.x) }
|
{ vec1(self.x - other.x) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Copy + Mul<T, T>>
|
impl<T: Copy + Mul<T, T>>
|
||||||
@ -89,7 +89,7 @@ Norm<T> for Vec1<T>
|
|||||||
{ self.sqnorm().sqrt() }
|
{ self.sqnorm().sqrt() }
|
||||||
|
|
||||||
fn normalized(&self) -> Vec1<T>
|
fn normalized(&self) -> Vec1<T>
|
||||||
{ Vec1(self.x / self.norm()) }
|
{ vec1(self.x / self.norm()) }
|
||||||
|
|
||||||
fn normalize(&mut self) -> T
|
fn normalize(&mut self) -> T
|
||||||
{
|
{
|
||||||
@ -104,7 +104,7 @@ Norm<T> for Vec1<T>
|
|||||||
impl<T:Copy + Neg<T>> Neg<Vec1<T>> for Vec1<T>
|
impl<T:Copy + Neg<T>> Neg<Vec1<T>> for Vec1<T>
|
||||||
{
|
{
|
||||||
fn neg(&self) -> Vec1<T>
|
fn neg(&self) -> Vec1<T>
|
||||||
{ Vec1(-self.x) }
|
{ vec1(-self.x) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:Copy + Zero> Zero for Vec1<T>
|
impl<T:Copy + Zero> Zero for Vec1<T>
|
||||||
@ -112,7 +112,7 @@ impl<T:Copy + Zero> Zero for Vec1<T>
|
|||||||
fn zero() -> Vec1<T>
|
fn zero() -> Vec1<T>
|
||||||
{
|
{
|
||||||
let _0 = Zero::zero();
|
let _0 = Zero::zero();
|
||||||
Vec1(_0)
|
vec1(_0)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_zero(&self) -> bool
|
fn is_zero(&self) -> bool
|
||||||
@ -122,7 +122,7 @@ impl<T:Copy + Zero> Zero for Vec1<T>
|
|||||||
impl<T: Copy + One> Basis for Vec1<T>
|
impl<T: Copy + One> Basis for Vec1<T>
|
||||||
{
|
{
|
||||||
fn canonical_basis() -> ~[Vec1<T>]
|
fn canonical_basis() -> ~[Vec1<T>]
|
||||||
{ ~[ Vec1(One::one()) ] } // FIXME: this should be static
|
{ ~[ vec1(One::one()) ] } // FIXME: this should be static
|
||||||
|
|
||||||
fn orthogonal_subspace_basis(&self) -> ~[Vec1<T>]
|
fn orthogonal_subspace_basis(&self) -> ~[Vec1<T>]
|
||||||
{ ~[] }
|
{ ~[] }
|
||||||
@ -140,7 +140,7 @@ impl<T:FuzzyEq<T>> FuzzyEq<T> for Vec1<T>
|
|||||||
impl<T:Rand + Copy> Rand for Vec1<T>
|
impl<T:Rand + Copy> Rand for Vec1<T>
|
||||||
{
|
{
|
||||||
fn rand<R: Rng>(rng: &R) -> Vec1<T>
|
fn rand<R: Rng>(rng: &R) -> Vec1<T>
|
||||||
{ Vec1(rng.gen()) }
|
{ vec1(rng.gen()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:ToStr> ToStr for Vec1<T>
|
impl<T:ToStr> ToStr for Vec1<T>
|
||||||
|
@ -5,7 +5,7 @@ use traits::dim::Dim;
|
|||||||
use traits::inv::Inv;
|
use traits::inv::Inv;
|
||||||
use traits::transpose::Transpose;
|
use traits::transpose::Transpose;
|
||||||
use traits::workarounds::rlmul::{RMul, LMul};
|
use traits::workarounds::rlmul::{RMul, LMul};
|
||||||
use dim2::vec2::Vec2;
|
use dim2::vec2::{Vec2, vec2};
|
||||||
|
|
||||||
#[deriving(Eq)]
|
#[deriving(Eq)]
|
||||||
pub struct Mat2<T>
|
pub struct Mat2<T>
|
||||||
@ -14,7 +14,7 @@ pub struct Mat2<T>
|
|||||||
m21: T, m22: T
|
m21: T, m22: T
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn Mat2<T:Copy>(m11: T, m12: T, m21: T, m22: T) -> Mat2<T>
|
pub fn mat2<T:Copy>(m11: T, m12: T, m21: T, m22: T) -> Mat2<T>
|
||||||
{
|
{
|
||||||
Mat2
|
Mat2
|
||||||
{
|
{
|
||||||
@ -34,7 +34,7 @@ impl<T:Copy + One + Zero> One for Mat2<T>
|
|||||||
fn one() -> Mat2<T>
|
fn one() -> Mat2<T>
|
||||||
{
|
{
|
||||||
let (_0, _1) = (Zero::zero(), One::one());
|
let (_0, _1) = (Zero::zero(), One::one());
|
||||||
return Mat2(_1, _0,
|
return mat2(_1, _0,
|
||||||
_0, _1)
|
_0, _1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -44,7 +44,7 @@ impl<T:Copy + Zero> Zero for Mat2<T>
|
|||||||
fn zero() -> Mat2<T>
|
fn zero() -> Mat2<T>
|
||||||
{
|
{
|
||||||
let _0 = Zero::zero();
|
let _0 = Zero::zero();
|
||||||
return Mat2(_0, _0,
|
return mat2(_0, _0,
|
||||||
_0, _0)
|
_0, _0)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ impl<T:Copy + Mul<T, T> + Add<T, T>> Mul<Mat2<T>, Mat2<T>> for Mat2<T>
|
|||||||
{
|
{
|
||||||
fn mul(&self, other: &Mat2<T>) -> Mat2<T>
|
fn mul(&self, other: &Mat2<T>) -> Mat2<T>
|
||||||
{
|
{
|
||||||
Mat2
|
mat2
|
||||||
(self.m11 * other.m11 + self.m12 * other.m21,
|
(self.m11 * other.m11 + self.m12 * other.m21,
|
||||||
self.m11 * other.m12 + self.m12 * other.m22,
|
self.m11 * other.m12 + self.m12 * other.m22,
|
||||||
self.m21 * other.m11 + self.m22 * other.m21,
|
self.m21 * other.m11 + self.m22 * other.m21,
|
||||||
@ -71,7 +71,7 @@ impl<T:Copy + Add<T, T> + Mul<T, T>> RMul<Vec2<T>> for Mat2<T>
|
|||||||
{
|
{
|
||||||
fn rmul(&self, other: &Vec2<T>) -> Vec2<T>
|
fn rmul(&self, other: &Vec2<T>) -> Vec2<T>
|
||||||
{
|
{
|
||||||
Vec2(
|
vec2(
|
||||||
self.m11 * other.x + self.m12 * other.y,
|
self.m11 * other.x + self.m12 * other.y,
|
||||||
self.m21 * other.x + self.m22 * other.y
|
self.m21 * other.x + self.m22 * other.y
|
||||||
)
|
)
|
||||||
@ -82,7 +82,7 @@ impl<T:Copy + Add<T, T> + Mul<T, T>> LMul<Vec2<T>> for Mat2<T>
|
|||||||
{
|
{
|
||||||
fn lmul(&self, other: &Vec2<T>) -> Vec2<T>
|
fn lmul(&self, other: &Vec2<T>) -> Vec2<T>
|
||||||
{
|
{
|
||||||
Vec2(
|
vec2(
|
||||||
self.m11 * other.x + self.m21 * other.y,
|
self.m11 * other.x + self.m21 * other.y,
|
||||||
self.m12 * other.x + self.m22 * other.y
|
self.m12 * other.x + self.m22 * other.y
|
||||||
)
|
)
|
||||||
@ -107,7 +107,7 @@ Inv for Mat2<T>
|
|||||||
|
|
||||||
assert!(!det.is_zero());
|
assert!(!det.is_zero());
|
||||||
|
|
||||||
*self = Mat2(self.m22 / det , -self.m12 / det,
|
*self = mat2(self.m22 / det , -self.m12 / det,
|
||||||
-self.m21 / det, self.m11 / det)
|
-self.m21 / det, self.m11 / det)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -116,7 +116,7 @@ impl<T:Copy> Transpose for Mat2<T>
|
|||||||
{
|
{
|
||||||
fn transposed(&self) -> Mat2<T>
|
fn transposed(&self) -> Mat2<T>
|
||||||
{
|
{
|
||||||
Mat2(self.m11, self.m21,
|
mat2(self.m11, self.m21,
|
||||||
self.m12, self.m22)
|
self.m12, self.m22)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,7 +148,7 @@ impl<T:FuzzyEq<T>> FuzzyEq<T> for Mat2<T>
|
|||||||
impl<T:Rand + Copy> Rand for Mat2<T>
|
impl<T:Rand + Copy> Rand for Mat2<T>
|
||||||
{
|
{
|
||||||
fn rand<R: Rng>(rng: &R) -> Mat2<T>
|
fn rand<R: Rng>(rng: &R) -> Mat2<T>
|
||||||
{ Mat2(rng.gen(), rng.gen(), rng.gen(), rng.gen()) }
|
{ mat2(rng.gen(), rng.gen(), rng.gen(), rng.gen()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:ToStr> ToStr for Mat2<T>
|
impl<T:ToStr> ToStr for Mat2<T>
|
||||||
|
@ -6,7 +6,7 @@ use traits::dim::Dim;
|
|||||||
use traits::cross::Cross;
|
use traits::cross::Cross;
|
||||||
use traits::basis::Basis;
|
use traits::basis::Basis;
|
||||||
use traits::norm::Norm;
|
use traits::norm::Norm;
|
||||||
use dim1::vec1::Vec1;
|
use dim1::vec1::{Vec1, vec1};
|
||||||
use traits::workarounds::scalar_op::{ScalarMul, ScalarDiv, ScalarAdd, ScalarSub};
|
use traits::workarounds::scalar_op::{ScalarMul, ScalarDiv, ScalarAdd, ScalarSub};
|
||||||
|
|
||||||
#[deriving(Eq)]
|
#[deriving(Eq)]
|
||||||
@ -16,7 +16,7 @@ pub struct Vec2<T>
|
|||||||
y : T
|
y : T
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn Vec2<T:Copy>(x: T, y: T) -> Vec2<T>
|
pub fn vec2<T:Copy>(x: T, y: T) -> Vec2<T>
|
||||||
{ Vec2 {x: x, y: y} }
|
{ Vec2 {x: x, y: y} }
|
||||||
|
|
||||||
impl<T> Dim for Vec2<T>
|
impl<T> Dim for Vec2<T>
|
||||||
@ -28,13 +28,13 @@ impl<T> Dim for Vec2<T>
|
|||||||
impl<T:Copy + Add<T,T>> Add<Vec2<T>, Vec2<T>> for Vec2<T>
|
impl<T:Copy + Add<T,T>> Add<Vec2<T>, Vec2<T>> for Vec2<T>
|
||||||
{
|
{
|
||||||
fn add(&self, other: &Vec2<T>) -> Vec2<T>
|
fn add(&self, other: &Vec2<T>) -> Vec2<T>
|
||||||
{ Vec2(self.x + other.x, self.y + other.y) }
|
{ vec2(self.x + other.x, self.y + other.y) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:Copy + Sub<T,T>> Sub<Vec2<T>, Vec2<T>> for Vec2<T>
|
impl<T:Copy + Sub<T,T>> Sub<Vec2<T>, Vec2<T>> for Vec2<T>
|
||||||
{
|
{
|
||||||
fn sub(&self, other: &Vec2<T>) -> Vec2<T>
|
fn sub(&self, other: &Vec2<T>) -> Vec2<T>
|
||||||
{ Vec2(self.x - other.x, self.y - other.y) }
|
{ vec2(self.x - other.x, self.y - other.y) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Copy + Mul<T, T>>
|
impl<T: Copy + Mul<T, T>>
|
||||||
@ -109,7 +109,7 @@ Norm<T> for Vec2<T>
|
|||||||
{
|
{
|
||||||
let l = self.norm();
|
let l = self.norm();
|
||||||
|
|
||||||
Vec2(self.x / l, self.y / l)
|
vec2(self.x / l, self.y / l)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn normalize(&mut self) -> T
|
fn normalize(&mut self) -> T
|
||||||
@ -126,13 +126,13 @@ Norm<T> for Vec2<T>
|
|||||||
impl<T:Copy + Mul<T, T> + Sub<T, T>> Cross<Vec1<T>> for Vec2<T>
|
impl<T:Copy + Mul<T, T> + Sub<T, T>> Cross<Vec1<T>> for Vec2<T>
|
||||||
{
|
{
|
||||||
fn cross(&self, other : &Vec2<T>) -> Vec1<T>
|
fn cross(&self, other : &Vec2<T>) -> Vec1<T>
|
||||||
{ Vec1(self.x * other.y - self.y * other.x) }
|
{ vec1(self.x * other.y - self.y * other.x) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:Copy + Neg<T>> Neg<Vec2<T>> for Vec2<T>
|
impl<T:Copy + Neg<T>> Neg<Vec2<T>> for Vec2<T>
|
||||||
{
|
{
|
||||||
fn neg(&self) -> Vec2<T>
|
fn neg(&self) -> Vec2<T>
|
||||||
{ Vec2(-self.x, -self.y) }
|
{ vec2(-self.x, -self.y) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:Copy + Zero> Zero for Vec2<T>
|
impl<T:Copy + Zero> Zero for Vec2<T>
|
||||||
@ -140,7 +140,7 @@ impl<T:Copy + Zero> Zero for Vec2<T>
|
|||||||
fn zero() -> Vec2<T>
|
fn zero() -> Vec2<T>
|
||||||
{
|
{
|
||||||
let _0 = Zero::zero();
|
let _0 = Zero::zero();
|
||||||
Vec2(_0, _0)
|
vec2(_0, _0)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_zero(&self) -> bool
|
fn is_zero(&self) -> bool
|
||||||
@ -152,12 +152,12 @@ impl<T: Copy + One + Zero + Neg<T>> Basis for Vec2<T>
|
|||||||
fn canonical_basis() -> ~[Vec2<T>]
|
fn canonical_basis() -> ~[Vec2<T>]
|
||||||
{
|
{
|
||||||
// FIXME: this should be static
|
// FIXME: this should be static
|
||||||
~[ Vec2(One::one(), Zero::zero()),
|
~[ vec2(One::one(), Zero::zero()),
|
||||||
Vec2(Zero::zero(), One::one()) ]
|
vec2(Zero::zero(), One::one()) ]
|
||||||
}
|
}
|
||||||
|
|
||||||
fn orthogonal_subspace_basis(&self) -> ~[Vec2<T>]
|
fn orthogonal_subspace_basis(&self) -> ~[Vec2<T>]
|
||||||
{ ~[ Vec2(-self.y, self.x) ] }
|
{ ~[ vec2(-self.y, self.x) ] }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:FuzzyEq<T>> FuzzyEq<T> for Vec2<T>
|
impl<T:FuzzyEq<T>> FuzzyEq<T> for Vec2<T>
|
||||||
@ -175,7 +175,7 @@ impl<T:FuzzyEq<T>> FuzzyEq<T> for Vec2<T>
|
|||||||
impl<T:Rand + Copy> Rand for Vec2<T>
|
impl<T:Rand + Copy> Rand for Vec2<T>
|
||||||
{
|
{
|
||||||
fn rand<R: Rng>(rng: &R) -> Vec2<T>
|
fn rand<R: Rng>(rng: &R) -> Vec2<T>
|
||||||
{ Vec2(rng.gen(), rng.gen()) }
|
{ vec2(rng.gen(), rng.gen()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:ToStr> ToStr for Vec2<T>
|
impl<T:ToStr> ToStr for Vec2<T>
|
||||||
|
@ -5,7 +5,7 @@ use traits::dim::Dim;
|
|||||||
use traits::inv::Inv;
|
use traits::inv::Inv;
|
||||||
use traits::transpose::Transpose;
|
use traits::transpose::Transpose;
|
||||||
use traits::workarounds::rlmul::{RMul, LMul};
|
use traits::workarounds::rlmul::{RMul, LMul};
|
||||||
use dim3::vec3::Vec3;
|
use dim3::vec3::{Vec3, vec3};
|
||||||
|
|
||||||
#[deriving(Eq)]
|
#[deriving(Eq)]
|
||||||
pub struct Mat3<T>
|
pub struct Mat3<T>
|
||||||
@ -15,7 +15,7 @@ pub struct Mat3<T>
|
|||||||
m31: T, m32: T, m33: T
|
m31: T, m32: T, m33: T
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn Mat3<T:Copy>(m11: T, m12: T, m13: T,
|
pub fn mat3<T:Copy>(m11: T, m12: T, m13: T,
|
||||||
m21: T, m22: T, m23: T,
|
m21: T, m22: T, m23: T,
|
||||||
m31: T, m32: T, m33: T) -> Mat3<T>
|
m31: T, m32: T, m33: T) -> Mat3<T>
|
||||||
{
|
{
|
||||||
@ -38,7 +38,7 @@ impl<T:Copy + One + Zero> One for Mat3<T>
|
|||||||
fn one() -> Mat3<T>
|
fn one() -> Mat3<T>
|
||||||
{
|
{
|
||||||
let (_0, _1) = (Zero::zero(), One::one());
|
let (_0, _1) = (Zero::zero(), One::one());
|
||||||
return Mat3(_1, _0, _0,
|
return mat3(_1, _0, _0,
|
||||||
_0, _1, _0,
|
_0, _1, _0,
|
||||||
_0, _0, _1)
|
_0, _0, _1)
|
||||||
}
|
}
|
||||||
@ -49,7 +49,7 @@ impl<T:Copy + Zero> Zero for Mat3<T>
|
|||||||
fn zero() -> Mat3<T>
|
fn zero() -> Mat3<T>
|
||||||
{
|
{
|
||||||
let _0 = Zero::zero();
|
let _0 = Zero::zero();
|
||||||
return Mat3(_0, _0, _0,
|
return mat3(_0, _0, _0,
|
||||||
_0, _0, _0,
|
_0, _0, _0,
|
||||||
_0, _0, _0)
|
_0, _0, _0)
|
||||||
}
|
}
|
||||||
@ -66,7 +66,7 @@ impl<T:Copy + Mul<T, T> + Add<T, T>> Mul<Mat3<T>, Mat3<T>> for Mat3<T>
|
|||||||
{
|
{
|
||||||
fn mul(&self, other: &Mat3<T>) -> Mat3<T>
|
fn mul(&self, other: &Mat3<T>) -> Mat3<T>
|
||||||
{
|
{
|
||||||
Mat3(
|
mat3(
|
||||||
self.m11 * other.m11 + self.m12 * other.m21 + self.m13 * other.m31,
|
self.m11 * other.m11 + self.m12 * other.m21 + self.m13 * other.m31,
|
||||||
self.m11 * other.m12 + self.m12 * other.m22 + self.m13 * other.m32,
|
self.m11 * other.m12 + self.m12 * other.m22 + self.m13 * other.m32,
|
||||||
self.m11 * other.m13 + self.m12 * other.m23 + self.m13 * other.m33,
|
self.m11 * other.m13 + self.m12 * other.m23 + self.m13 * other.m33,
|
||||||
@ -86,7 +86,7 @@ impl<T:Copy + Add<T, T> + Mul<T, T>> RMul<Vec3<T>> for Mat3<T>
|
|||||||
{
|
{
|
||||||
fn rmul(&self, other: &Vec3<T>) -> Vec3<T>
|
fn rmul(&self, other: &Vec3<T>) -> Vec3<T>
|
||||||
{
|
{
|
||||||
Vec3(
|
vec3(
|
||||||
self.m11 * other.x + self.m12 * other.y + self.m13 * other.z,
|
self.m11 * other.x + self.m12 * other.y + self.m13 * other.z,
|
||||||
self.m21 * other.x + self.m22 * other.y + self.m33 * other.z,
|
self.m21 * other.x + self.m22 * other.y + self.m33 * other.z,
|
||||||
self.m31 * other.x + self.m32 * other.y + self.m33 * other.z
|
self.m31 * other.x + self.m32 * other.y + self.m33 * other.z
|
||||||
@ -98,7 +98,7 @@ impl<T:Copy + Add<T, T> + Mul<T, T>> LMul<Vec3<T>> for Mat3<T>
|
|||||||
{
|
{
|
||||||
fn lmul(&self, other: &Vec3<T>) -> Vec3<T>
|
fn lmul(&self, other: &Vec3<T>) -> Vec3<T>
|
||||||
{
|
{
|
||||||
Vec3(
|
vec3(
|
||||||
self.m11 * other.x + self.m21 * other.y + self.m31 * other.z,
|
self.m11 * other.x + self.m21 * other.y + self.m31 * other.z,
|
||||||
self.m12 * other.x + self.m22 * other.y + self.m32 * other.z,
|
self.m12 * other.x + self.m22 * other.y + self.m32 * other.z,
|
||||||
self.m13 * other.x + self.m23 * other.y + self.m33 * other.z
|
self.m13 * other.x + self.m23 * other.y + self.m33 * other.z
|
||||||
@ -130,7 +130,7 @@ Inv for Mat3<T>
|
|||||||
|
|
||||||
assert!(!det.is_zero());
|
assert!(!det.is_zero());
|
||||||
|
|
||||||
*self = Mat3(
|
*self = mat3(
|
||||||
(minor_m22_m33 / det),
|
(minor_m22_m33 / det),
|
||||||
((self.m13 * self.m32 - self.m33 * self.m12) / det),
|
((self.m13 * self.m32 - self.m33 * self.m12) / det),
|
||||||
((self.m12 * self.m23 - self.m22 * self.m13) / det),
|
((self.m12 * self.m23 - self.m22 * self.m13) / det),
|
||||||
@ -150,7 +150,7 @@ impl<T:Copy> Transpose for Mat3<T>
|
|||||||
{
|
{
|
||||||
fn transposed(&self) -> Mat3<T>
|
fn transposed(&self) -> Mat3<T>
|
||||||
{
|
{
|
||||||
Mat3(self.m11, self.m21, self.m31,
|
mat3(self.m11, self.m21, self.m31,
|
||||||
self.m12, self.m22, self.m32,
|
self.m12, self.m22, self.m32,
|
||||||
self.m13, self.m23, self.m33)
|
self.m13, self.m23, self.m33)
|
||||||
}
|
}
|
||||||
@ -200,7 +200,7 @@ impl<T:Rand + Copy> Rand for Mat3<T>
|
|||||||
{
|
{
|
||||||
fn rand<R: Rng>(rng: &R) -> Mat3<T>
|
fn rand<R: Rng>(rng: &R) -> Mat3<T>
|
||||||
{
|
{
|
||||||
Mat3(rng.gen(), rng.gen(), rng.gen(),
|
mat3(rng.gen(), rng.gen(), rng.gen(),
|
||||||
rng.gen(), rng.gen(), rng.gen(),
|
rng.gen(), rng.gen(), rng.gen(),
|
||||||
rng.gen(), rng.gen(), rng.gen())
|
rng.gen(), rng.gen(), rng.gen())
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ pub struct Vec3<T>
|
|||||||
z : T
|
z : T
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn Vec3<T:Copy>(x: T, y: T, z: T) -> Vec3<T>
|
pub fn vec3<T:Copy>(x: T, y: T, z: T) -> Vec3<T>
|
||||||
{ Vec3 {x: x, y: y, z: z} }
|
{ Vec3 {x: x, y: y, z: z} }
|
||||||
|
|
||||||
impl<T> Dim for Vec3<T>
|
impl<T> Dim for Vec3<T>
|
||||||
@ -28,13 +28,13 @@ impl<T> Dim for Vec3<T>
|
|||||||
impl<T:Copy + Add<T,T>> Add<Vec3<T>, Vec3<T>> for Vec3<T>
|
impl<T:Copy + Add<T,T>> Add<Vec3<T>, Vec3<T>> for Vec3<T>
|
||||||
{
|
{
|
||||||
fn add(&self, other: &Vec3<T>) -> Vec3<T>
|
fn add(&self, other: &Vec3<T>) -> Vec3<T>
|
||||||
{ Vec3(self.x + other.x, self.y + other.y, self.z + other.z) }
|
{ vec3(self.x + other.x, self.y + other.y, self.z + other.z) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:Copy + Sub<T,T>> Sub<Vec3<T>, Vec3<T>> for Vec3<T>
|
impl<T:Copy + Sub<T,T>> Sub<Vec3<T>, Vec3<T>> for Vec3<T>
|
||||||
{
|
{
|
||||||
fn sub(&self, other: &Vec3<T>) -> Vec3<T>
|
fn sub(&self, other: &Vec3<T>) -> Vec3<T>
|
||||||
{ Vec3(self.x - other.x, self.y - other.y, self.z - other.z) }
|
{ vec3(self.x - other.x, self.y - other.y, self.z - other.z) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Copy + Mul<T, T>>
|
impl<T: Copy + Mul<T, T>>
|
||||||
@ -98,7 +98,7 @@ ScalarSub<T> for Vec3<T>
|
|||||||
impl<T:Copy + Neg<T>> Neg<Vec3<T>> for Vec3<T>
|
impl<T:Copy + Neg<T>> Neg<Vec3<T>> for Vec3<T>
|
||||||
{
|
{
|
||||||
fn neg(&self) -> Vec3<T>
|
fn neg(&self) -> Vec3<T>
|
||||||
{ Vec3(-self.x, -self.y, -self.z) }
|
{ vec3(-self.x, -self.y, -self.z) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:Copy + Mul<T, T> + Add<T, T> + Algebraic> Dot<T> for Vec3<T>
|
impl<T:Copy + Mul<T, T> + Add<T, T> + Algebraic> Dot<T> for Vec3<T>
|
||||||
@ -120,7 +120,7 @@ Norm<T> for Vec3<T>
|
|||||||
{
|
{
|
||||||
let l = self.norm();
|
let l = self.norm();
|
||||||
|
|
||||||
Vec3(self.x / l, self.y / l, self.z / l)
|
vec3(self.x / l, self.y / l, self.z / l)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn normalize(&mut self) -> T
|
fn normalize(&mut self) -> T
|
||||||
@ -139,7 +139,7 @@ impl<T:Copy + Mul<T, T> + Sub<T, T>> Cross<Vec3<T>> for Vec3<T>
|
|||||||
{
|
{
|
||||||
fn cross(&self, other : &Vec3<T>) -> Vec3<T>
|
fn cross(&self, other : &Vec3<T>) -> Vec3<T>
|
||||||
{
|
{
|
||||||
Vec3(
|
vec3(
|
||||||
self.y * other.z - self.z * other.y,
|
self.y * other.z - self.z * other.y,
|
||||||
self.z * other.x - self.x * other.z,
|
self.z * other.x - self.x * other.z,
|
||||||
self.x * other.y - self.y * other.x
|
self.x * other.y - self.y * other.x
|
||||||
@ -152,7 +152,7 @@ impl<T:Copy + Zero> Zero for Vec3<T>
|
|||||||
fn zero() -> Vec3<T>
|
fn zero() -> Vec3<T>
|
||||||
{
|
{
|
||||||
let _0 = Zero::zero();
|
let _0 = Zero::zero();
|
||||||
Vec3(_0, _0, _0)
|
vec3(_0, _0, _0)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_zero(&self) -> bool
|
fn is_zero(&self) -> bool
|
||||||
@ -166,18 +166,18 @@ Basis for Vec3<T>
|
|||||||
fn canonical_basis() -> ~[Vec3<T>]
|
fn canonical_basis() -> ~[Vec3<T>]
|
||||||
{
|
{
|
||||||
// FIXME: this should be static
|
// FIXME: this should be static
|
||||||
~[ Vec3(One::one(), Zero::zero(), Zero::zero()),
|
~[ vec3(One::one(), Zero::zero(), Zero::zero()),
|
||||||
Vec3(Zero::zero(), One::one(), Zero::zero()),
|
vec3(Zero::zero(), One::one(), Zero::zero()),
|
||||||
Vec3(Zero::zero(), Zero::zero(), One::one()) ]
|
vec3(Zero::zero(), Zero::zero(), One::one()) ]
|
||||||
}
|
}
|
||||||
|
|
||||||
fn orthogonal_subspace_basis(&self) -> ~[Vec3<T>]
|
fn orthogonal_subspace_basis(&self) -> ~[Vec3<T>]
|
||||||
{
|
{
|
||||||
let a =
|
let a =
|
||||||
if (abs(self.x) > abs(self.y))
|
if (abs(self.x) > abs(self.y))
|
||||||
{ Vec3(self.z, Zero::zero(), -self.x).normalized() }
|
{ vec3(self.z, Zero::zero(), -self.x).normalized() }
|
||||||
else
|
else
|
||||||
{ Vec3(Zero::zero(), -self.z, self.y).normalized() };
|
{ vec3(Zero::zero(), -self.z, self.y).normalized() };
|
||||||
|
|
||||||
~[ a, a.cross(self) ]
|
~[ a, a.cross(self) ]
|
||||||
}
|
}
|
||||||
@ -203,7 +203,7 @@ impl<T:FuzzyEq<T>> FuzzyEq<T> for Vec3<T>
|
|||||||
impl<T:Copy + Rand> Rand for Vec3<T>
|
impl<T:Copy + Rand> Rand for Vec3<T>
|
||||||
{
|
{
|
||||||
fn rand<R: Rng>(rng: &R) -> Vec3<T>
|
fn rand<R: Rng>(rng: &R) -> Vec3<T>
|
||||||
{ Vec3(rng.gen(), rng.gen(), rng.gen()) }
|
{ vec3(rng.gen(), rng.gen(), rng.gen()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T:ToStr> ToStr for Vec3<T>
|
impl<T:ToStr> ToStr for Vec3<T>
|
||||||
|
Loading…
Reference in New Issue
Block a user