}
impl Point2D<f64> {
- pub fn length(self) -> f64 {
+ pub fn length(&self) -> f64 {
((self.x * self.x) + (self.y * self.y)).sqrt()
}
+ pub fn normalized(&self) -> Self {
+ let l = self.length();
+ Self {
+ x: self.x / l,
+ y: self.y / l,
+ }
+ }
+
+ pub fn to_radians(&self) -> Radians {
+ Radians(self.y.atan2(self.x))
+ }
+
+ pub fn to_degrees(&self) -> Degrees {
+ self.to_radians().to_degrees()
+ }
+
pub fn to_i32(self) -> Point2D<i32> {
Point2D {
x: self.x as i32,
impl From<Degrees> for Point2D<f64> {
fn from(item: Degrees) -> Self {
+ let r = item.0.to_radians();
Point2D {
- x: (item.0 * std::f64::consts::PI / 180.0).cos(),
- y: (item.0 * std::f64::consts::PI / 180.0).sin(),
+ x: r.cos(),
+ y: r.sin(),
}
}
}
impl Degrees {
#[allow(dead_code)]
fn to_radians(&self) -> Radians {
- Radians(self.0 * std::f64::consts::PI / 180.0)
+ Radians(self.0.to_radians())
}
}
impl Radians {
#[allow(dead_code)]
fn to_degrees(&self) -> Degrees {
- Degrees(self.0 * 180.0 * std::f64::consts::FRAC_1_PI)
+ Degrees(self.0.to_degrees())
}
}