perpendicular vectors

This commit is contained in:
Thilo Behnke
2022-04-21 20:09:43 +02:00
parent dc7f6c1e34
commit 885ebdbd20
2 changed files with 39 additions and 1 deletions

View File

@@ -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;

View File

@@ -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);
}