mirror of
https://github.com/thilo-behnke/wasm-pong.git
synced 2026-05-06 20:26:33 +00:00
perpendicular vectors
This commit is contained in:
@@ -11,7 +11,9 @@ pub mod geom {
|
||||
}
|
||||
|
||||
pub fn unit() -> Vector {
|
||||
Vector { x: 1., y: 1. }
|
||||
let mut vector = Vector { x: 1., y: 1. };
|
||||
vector.normalize();
|
||||
vector
|
||||
}
|
||||
|
||||
pub fn new(x: f64, y: f64) -> Vector {
|
||||
@@ -26,6 +28,18 @@ pub mod geom {
|
||||
self.y /= length;
|
||||
}
|
||||
|
||||
pub fn perpendicular_clockwise(&self) -> Vector {
|
||||
let mut vector = Vector::new(self.y, -self.x);
|
||||
vector.normalize();
|
||||
vector
|
||||
}
|
||||
|
||||
pub fn perpendicular_counter_clockwise(&self) -> Vector {
|
||||
let mut vector = Vector::new(-self.y, self.x);
|
||||
vector.normalize();
|
||||
vector
|
||||
}
|
||||
|
||||
pub fn add(&mut self, other: &Vector) {
|
||||
self.x += other.x;
|
||||
self.y += other.y;
|
||||
|
||||
@@ -41,3 +41,27 @@ pub fn should_calculate_angle_correctly(
|
||||
let res = vector_a.angle(&vector_b);
|
||||
assert_eq!(res, expected_angle);
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case(Vector::new(1., 0.), Vector::new(0., -1.))]
|
||||
#[case(Vector::new(0., 1.), Vector::new(1., 0.))]
|
||||
#[case(Vector::new(7., 7.), Vector::new(0.7071067811865476, -0.7071067811865476))]
|
||||
pub fn should_get_perpendicular_clockwise(
|
||||
#[case] vector: Vector,
|
||||
#[case] expected: Vector
|
||||
) {
|
||||
let res = vector.perpendicular_clockwise();
|
||||
assert_eq!(res, expected);
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case(Vector::new(0., -1.), Vector::new(1., 0.))]
|
||||
#[case(Vector::new(1., 0.), Vector::new(0., 1.))]
|
||||
#[case(Vector::new(7., 7.), Vector::new(-0.7071067811865476, 0.7071067811865476))]
|
||||
pub fn should_get_perpendicular_counter_clockwise(
|
||||
#[case] vector: Vector,
|
||||
#[case] expected: Vector
|
||||
) {
|
||||
let res = vector.perpendicular_counter_clockwise();
|
||||
assert_eq!(res, expected);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user