tuple addition and subtraction
This commit is contained in:
@@ -41,6 +41,24 @@ fn tuple_equals(lhs: PointVector, rhs: PointVector) -> bool {
|
|||||||
&& relative_eq!(lhs.3, rhs.3)
|
&& relative_eq!(lhs.3, rhs.3)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn tuple_add(lhs: PointVector, rhs: PointVector) -> PointVector {
|
||||||
|
(
|
||||||
|
lhs.0 + rhs.0,
|
||||||
|
lhs.1 + rhs.1,
|
||||||
|
lhs.2 + rhs.2,
|
||||||
|
lhs.3 + rhs.3
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn tuple_sub(lhs: PointVector, rhs: PointVector) -> PointVector {
|
||||||
|
(
|
||||||
|
lhs.0 - rhs.0,
|
||||||
|
lhs.1 - rhs.1,
|
||||||
|
lhs.2 - rhs.2,
|
||||||
|
lhs.3 - rhs.3
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
@@ -99,4 +117,40 @@ mod tests {
|
|||||||
let rhs = vector(1.0, 2.0, 3.0);
|
let rhs = vector(1.0, 2.0, 3.0);
|
||||||
assert_eq!(false, tuple_equals(lhs, rhs));
|
assert_eq!(false, tuple_equals(lhs, rhs));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn add_two_tuples() {
|
||||||
|
let a1 = point(3.0, -2.0, 5.0);
|
||||||
|
let a2 = vector(-2.0, 3.0, 1.0);
|
||||||
|
|
||||||
|
let result = point(1.0, 1.0, 6.0);
|
||||||
|
assert_eq!(true, tuple_equals(result, tuple_add(a1, a2)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn subtract_two_points() {
|
||||||
|
let a1 = point(3.0, 2.0, 1.0);
|
||||||
|
let a2 = point(5.0, 6.0, 7.0);
|
||||||
|
|
||||||
|
let result = vector(-2.0, -4.0, -6.0);
|
||||||
|
assert_eq!(true, tuple_equals(result, tuple_sub(a1, a2)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn subract_vector_from_point() {
|
||||||
|
let a1 = point(3.0, 2.0, 1.0);
|
||||||
|
let a2 = vector(5.0, 6.0, 7.0);
|
||||||
|
|
||||||
|
let result = point(-2.0, -4.0, -6.0);
|
||||||
|
assert_eq!(true, tuple_equals(result, tuple_sub(a1, a2)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn subract_vector_from_vector() {
|
||||||
|
let a1 = vector(3.0, 2.0, 1.0);
|
||||||
|
let a2 = vector(5.0, 6.0, 7.0);
|
||||||
|
|
||||||
|
let result = vector(-2.0, -4.0, -6.0);
|
||||||
|
assert_eq!(true, tuple_equals(result, tuple_sub(a1, a2)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user