Add cross_self
method
This commit is contained in:
parent
9012589f5f
commit
ea17c63200
2 changed files with 31 additions and 10 deletions
|
@ -130,7 +130,7 @@ fn test_Vec3() {
|
||||||
mut_a.swap(1, 2);
|
mut_a.swap(1, 2);
|
||||||
assert mut_a[1] == a[2];
|
assert mut_a[1] == a[2];
|
||||||
assert mut_a[2] == a[1];
|
assert mut_a[2] == a[1];
|
||||||
let mut mut_a = a;
|
mut_a = a;
|
||||||
|
|
||||||
assert a.x == 1f;
|
assert a.x == 1f;
|
||||||
assert a.y == 2f;
|
assert a.y == 2f;
|
||||||
|
@ -141,6 +141,10 @@ fn test_Vec3() {
|
||||||
|
|
||||||
assert a.cross(&b) == Vec3::new(-3f, 6f, -3f);
|
assert a.cross(&b) == Vec3::new(-3f, 6f, -3f);
|
||||||
|
|
||||||
|
mut_a.cross_self(&b);
|
||||||
|
assert mut_a == a.cross(&b);
|
||||||
|
mut_a = a;
|
||||||
|
|
||||||
assert -a == Vec3::new(-1f, -2f, -3f);
|
assert -a == Vec3::new(-1f, -2f, -3f);
|
||||||
assert a.neg() == Vec3::new(-1f, -2f, -3f);
|
assert a.neg() == Vec3::new(-1f, -2f, -3f);
|
||||||
|
|
||||||
|
|
35
src/vec.rs
35
src/vec.rs
|
@ -143,6 +143,16 @@ pub trait NumericVector3<T>: NumericVector<T> {
|
||||||
pure fn cross(&self, other: &self) -> self;
|
pure fn cross(&self, other: &self) -> self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A mutable 3-dimensional vector with numeric components
|
||||||
|
*/
|
||||||
|
pub trait MutableNumericVector3<T>: MutableNumericVector<&self/T> {
|
||||||
|
/**
|
||||||
|
* Set to the cross product of the vector and `other`
|
||||||
|
*/
|
||||||
|
fn cross_self(&mut self, other: &self);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A 4-dimensional vector with numeric components
|
* A 4-dimensional vector with numeric components
|
||||||
*/
|
*/
|
||||||
|
@ -525,15 +535,6 @@ pub impl<T:Copy Number> Vec3<T>: Neg<Vec3<T>> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub impl<T:Copy Number> Vec3<T>: NumericVector3<T> {
|
|
||||||
#[inline(always)]
|
|
||||||
pure fn cross(&self, other: &Vec3<T>) -> Vec3<T> {
|
|
||||||
Vec3::new((self[1] * other[2]) - (self[2] * other[1]),
|
|
||||||
(self[2] * other[0]) - (self[0] * other[2]),
|
|
||||||
(self[0] * other[1]) - (self[1] * other[0]))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub impl<T:Copy Number> Vec3<T>: MutableNumericVector<&self/T> {
|
pub impl<T:Copy Number> Vec3<T>: MutableNumericVector<&self/T> {
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn neg_self(&mut self) {
|
fn neg_self(&mut self) {
|
||||||
|
@ -571,6 +572,22 @@ pub impl<T:Copy Number> Vec3<T>: MutableNumericVector<&self/T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub impl<T:Copy Number> Vec3<T>: NumericVector3<T> {
|
||||||
|
#[inline(always)]
|
||||||
|
pure fn cross(&self, other: &Vec3<T>) -> Vec3<T> {
|
||||||
|
Vec3::new((self[1] * other[2]) - (self[2] * other[1]),
|
||||||
|
(self[2] * other[0]) - (self[0] * other[2]),
|
||||||
|
(self[0] * other[1]) - (self[1] * other[0]))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub impl<T:Copy Number> Vec3<T>: MutableNumericVector3<&self/T> {
|
||||||
|
#[inline(always)]
|
||||||
|
fn cross_self(&mut self, other: &Vec3<T>) {
|
||||||
|
*self = self.cross(other);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub impl<T:Copy Number Exp> Vec3<T>: GeometricVector<T> {
|
pub impl<T:Copy Number Exp> Vec3<T>: GeometricVector<T> {
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pure fn length2(&self) -> T {
|
pure fn length2(&self) -> T {
|
||||||
|
|
Loading…
Reference in a new issue