c49fe2a022269037a19cdd6eb4f72f906c8863ef
[bug-basher.git] / src / geometry.rs
1 use std::ops::*;
2
3 #[derive(Debug, Clone, Copy, PartialEq)]
4 pub struct Vec2d {
5     pub x: f64,
6     pub y: f64
7 }
8
9 impl Vec2d {
10     pub fn distance(&self, other: Vec2d) -> f64 {
11         self.distance_squared(other).sqrt()
12     }
13     pub fn distance_squared(&self, other: Vec2d) -> f64 {
14         ((other.x-self.x).powi(2) + (other.y-self.y).powi(2))
15     }
16
17     pub fn angle(&self) -> f64 {
18         self.y.atan2(self.x)
19     }
20 }
21
22 impl Add for Vec2d {
23     type Output = Vec2d;
24
25     fn add(self, other: Self) -> Self {
26         Vec2d {
27             x: self.x + other.x,
28             y: self.y + other.y
29         }
30     }
31 }
32
33 impl Sub for Vec2d {
34     type Output = Vec2d;
35
36     fn sub(self, other: Self) -> Self {
37         Vec2d {
38             x: self.x - other.x,
39             y: self.y - other.y
40         }
41     }
42 }
43
44 impl Neg for Vec2d {
45     type Output = Vec2d;
46
47     fn neg(self) -> Self {
48         Vec2d {
49             x: -self.x,
50             y: -self.y
51         }
52     }
53 }