Add Rand implementation for everything.

This commit is contained in:
Sébastien Crozet 2013-05-18 00:11:59 +00:00
parent 53131731b3
commit bc93c44206
8 changed files with 68 additions and 0 deletions

View File

@ -1,4 +1,5 @@
use core::num::{One, Zero}; // , Trigonometric}; use core::num::{One, Zero}; // , Trigonometric};
use core::rand::{Rand, Rng, RngUtil};
use std::cmp::FuzzyEq; use std::cmp::FuzzyEq;
use traits::workarounds::rlmul::{RMul, LMul}; use traits::workarounds::rlmul::{RMul, LMul};
use traits::workarounds::trigonometric::Trigonometric; use traits::workarounds::trigonometric::Trigonometric;
@ -56,6 +57,20 @@ 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>>
{
fn rand<R: Rng>(rng: &R) -> Rotmat<Mat2<T>>
{ Rotmat2(rng.gen()) }
}
impl<T:Copy + Rand + Trigonometric + Neg<T> + One + Sub<T, T> + Add<T, T> +
Mul<T, T>>
Rand for Rotmat<Mat3<T>>
{
fn rand<R: Rng>(rng: &R) -> Rotmat<Mat3<T>>
{ Rotmat3(&rng.gen(), rng.gen()) }
}
impl<M: Dim> Dim for Rotmat<M> impl<M: Dim> Dim for Rotmat<M>
{ {
fn dim() -> uint fn dim() -> uint

View File

@ -1,4 +1,5 @@
use core::num::{One, Zero}; use core::num::{One, Zero};
use core::rand::{Rand, Rng, RngUtil};
use std::cmp::FuzzyEq; use std::cmp::FuzzyEq;
use traits::dim::Dim; use traits::dim::Dim;
use traits::inv::Inv; use traits::inv::Inv;
@ -91,6 +92,12 @@ 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>
{
fn rand<R: Rng>(rng: &R) -> Transform<M, V>
{ 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>
{ {
fn to_str(&self) -> ~str fn to_str(&self) -> ~str

View File

@ -1,4 +1,5 @@
use core::num::{One, Zero}; use core::num::{One, Zero};
use core::rand::{Rand, Rng, RngUtil};
use std::cmp::FuzzyEq; use std::cmp::FuzzyEq;
use traits::dim::Dim; use traits::dim::Dim;
use traits::inv::Inv; use traits::inv::Inv;
@ -93,6 +94,12 @@ impl<T:FuzzyEq<T>> FuzzyEq<T> for Mat1<T>
{ self.m11.fuzzy_eq_eps(&other.m11, epsilon) } { self.m11.fuzzy_eq_eps(&other.m11, epsilon) }
} }
impl<T:Rand + Copy> Rand for Mat1<T>
{
fn rand<R: Rng>(rng: &R) -> Mat1<T>
{ Mat1(rng.gen()) }
}
impl<T:ToStr> ToStr for Mat1<T> impl<T:ToStr> ToStr for Mat1<T>
{ {
fn to_str(&self) -> ~str fn to_str(&self) -> ~str

View File

@ -1,4 +1,5 @@
use core::num::{Zero, Algebraic}; use core::num::{Zero, Algebraic};
use core::rand::{Rand, Rng, RngUtil};
use std::cmp::FuzzyEq; use std::cmp::FuzzyEq;
use traits::dot::Dot; use traits::dot::Dot;
use traits::dim::Dim; use traits::dim::Dim;
@ -67,6 +68,12 @@ impl<T:FuzzyEq<T>> FuzzyEq<T> for Vec1<T>
{ self.x.fuzzy_eq_eps(&other.x, epsilon) } { self.x.fuzzy_eq_eps(&other.x, epsilon) }
} }
impl<T:Rand + Copy> Rand for Vec1<T>
{
fn rand<R: Rng>(rng: &R) -> Vec1<T>
{ Vec1(rng.gen()) }
}
impl<T:ToStr> ToStr for Vec1<T> impl<T:ToStr> ToStr for Vec1<T>
{ {
fn to_str(&self) -> ~str fn to_str(&self) -> ~str

View File

@ -1,4 +1,5 @@
use core::num::{One, Zero}; use core::num::{One, Zero};
use core::rand::{Rand, Rng, RngUtil};
use std::cmp::FuzzyEq; use std::cmp::FuzzyEq;
use traits::dim::Dim; use traits::dim::Dim;
use traits::inv::Inv; use traits::inv::Inv;
@ -144,6 +145,12 @@ impl<T:FuzzyEq<T>> FuzzyEq<T> for Mat2<T>
} }
} }
impl<T:Rand + Copy> Rand for Mat2<T>
{
fn rand<R: Rng>(rng: &R) -> Mat2<T>
{ Mat2(rng.gen(), rng.gen(), rng.gen(), rng.gen()) }
}
impl<T:ToStr> ToStr for Mat2<T> impl<T:ToStr> ToStr for Mat2<T>
{ {
fn to_str(&self) -> ~str fn to_str(&self) -> ~str

View File

@ -1,4 +1,5 @@
use core::num::{Zero, Algebraic}; use core::num::{Zero, Algebraic};
use core::rand::{Rand, Rng, RngUtil};
use std::cmp::FuzzyEq; use std::cmp::FuzzyEq;
use traits::dot::Dot; use traits::dot::Dot;
use traits::dim::Dim; use traits::dim::Dim;
@ -81,6 +82,12 @@ impl<T:FuzzyEq<T>> FuzzyEq<T> for Vec2<T>
} }
} }
impl<T:Rand + Copy> Rand for Vec2<T>
{
fn rand<R: Rng>(rng: &R) -> Vec2<T>
{ Vec2(rng.gen(), rng.gen()) }
}
impl<T:ToStr> ToStr for Vec2<T> impl<T:ToStr> ToStr for Vec2<T>
{ {
fn to_str(&self) -> ~str fn to_str(&self) -> ~str

View File

@ -1,4 +1,5 @@
use core::num::{One, Zero}; use core::num::{One, Zero};
use core::rand::{Rand, Rng, RngUtil};
use std::cmp::FuzzyEq; use std::cmp::FuzzyEq;
use traits::dim::Dim; use traits::dim::Dim;
use traits::inv::Inv; use traits::inv::Inv;
@ -195,6 +196,16 @@ impl<T:FuzzyEq<T>> FuzzyEq<T> for Mat3<T>
} }
} }
impl<T:Rand + Copy> Rand for Mat3<T>
{
fn rand<R: Rng>(rng: &R) -> Mat3<T>
{
Mat3(rng.gen(), rng.gen(), rng.gen(),
rng.gen(), rng.gen(), rng.gen(),
rng.gen(), rng.gen(), rng.gen())
}
}
impl<T:ToStr> ToStr for Mat3<T> impl<T:ToStr> ToStr for Mat3<T>
{ {
fn to_str(&self) -> ~str fn to_str(&self) -> ~str

View File

@ -1,4 +1,5 @@
use core::num::{Zero, Algebraic}; use core::num::{Zero, Algebraic};
use core::rand::{Rand, Rng, RngUtil};
use std::cmp::FuzzyEq; use std::cmp::FuzzyEq;
use traits::dim::Dim; use traits::dim::Dim;
use traits::dot::Dot; use traits::dot::Dot;
@ -92,6 +93,12 @@ impl<T:FuzzyEq<T>> FuzzyEq<T> for Vec3<T>
} }
} }
impl<T:Copy + Rand> Rand for Vec3<T>
{
fn rand<R: Rng>(rng: &R) -> Vec3<T>
{ Vec3(rng.gen(), rng.gen(), rng.gen()) }
}
impl<T:ToStr> ToStr for Vec3<T> impl<T:ToStr> ToStr for Vec3<T>
{ {
fn to_str(&self) -> ~str fn to_str(&self) -> ~str