pub struct Angle { /* private fields */ }
Expand description
An angle represented by it’s sine and cosine as UnitNegRanges
.
Implementations§
source§impl Angle
impl Angle
sourcepub fn from_y_x(y: f64, x: f64) -> Self
pub fn from_y_x(y: f64, x: f64) -> Self
Construct an Angle from y and x values.
Normalises the values.
sourcepub const fn sin(self) -> UnitNegRange
pub const fn sin(self) -> UnitNegRange
The sine of the Angle.
sourcepub const fn cos(self) -> UnitNegRange
pub const fn cos(self) -> UnitNegRange
The cosine of the Angle.
sourcepub fn abs(self) -> Self
pub fn abs(self) -> Self
The absolute value of the angle, i.e. the angle with a positive sine.
§Examples
use angle_sc::{Angle, Degrees};
let angle_m45 = Angle::from(Degrees(-45.0));
let result_45 = angle_m45.abs();
assert_eq!(Degrees(45.0), Degrees::from(result_45));
sourcepub fn opposite(self) -> Self
pub fn opposite(self) -> Self
The opposite angle on the circle, i.e. +/- 180 degrees.
§Examples
use angle_sc::{Angle, Degrees};
let angle_m30 = Angle::from(Degrees(-30.0));
let result = angle_m30.opposite();
assert_eq!(Degrees(150.0), Degrees::from(result));
sourcepub fn negate_cos(self) -> Self
pub fn negate_cos(self) -> Self
Negate the cosine of the Angle.
I.e. PI
- angle.radians()
for positive angles,
angle.radians()
+ PI
for negative angles
§Examples
use angle_sc::{Angle, Degrees};
let angle_45 = Angle::from(Degrees(45.0));
let result_45 = angle_45.negate_cos();
assert_eq!(Degrees(135.0), Degrees::from(result_45));
sourcepub fn double(self) -> Self
pub fn double(self) -> Self
Double the Angle. See: Double-angle formulae
§Examples
use angle_sc::{Angle, Degrees};
let angle_30 = Angle::from(Degrees(30.0));
let result_60 = angle_30.double();
// Note: multiplication is not precise...
// assert_eq!(Degrees(60.0), Degrees::from(result_60));
let delta_angle = libm::fabs(60.0 - Degrees::from(result_60).0);
assert!(delta_angle <= 32.0 * std::f64::EPSILON);
Trait Implementations§
source§impl Add for Angle
impl Add for Angle
source§fn add(self, other: Self) -> Self
fn add(self, other: Self) -> Self
Add two Angles, i.e. a + b
Uses trigonometric identity functions, see:
angle sum and difference identities.
§Examples
use angle_sc::{Angle, Degrees};
let angle_30 = Angle::from(Degrees(30.0));
let angle_60 = Angle::from(Degrees(60.0));
let result_90 = angle_30 + angle_60;
assert_eq!(Degrees(90.0), Degrees::from(result_90));
source§impl<'de> Deserialize<'de> for Angle
impl<'de> Deserialize<'de> for Angle
source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Deserialize an value in Degrees to an Angle.
source§impl From<Degrees> for Angle
impl From<Degrees> for Angle
source§fn from(a: Degrees) -> Self
fn from(a: Degrees) -> Self
Construct an Angle from an angle in Degrees.
In order to minimize round-off errors, this function calculates sines
of angles with sine values <= 1 / sqrt(2): see
https://stackoverflow.com/questions/31502120/sin-and-cos-give-unexpected-results-for-well-known-angles
It is based on
GeographicLib::Math::sincosd function.
source§impl Neg for Angle
impl Neg for Angle
source§fn neg(self) -> Self
fn neg(self) -> Self
An implementation of Neg for Angle, i.e. -angle.
Negates the sine of the Angle, does not affect the cosine.
§Examples
use angle_sc::{Angle, Degrees};
let angle_45 = Angle::from(Degrees(45.0));
let result_m45 = -angle_45;
assert_eq!(Degrees(-45.0), Degrees::from(result_m45));
source§impl PartialEq for Angle
impl PartialEq for Angle
source§impl PartialOrd for Angle
impl PartialOrd for Angle
source§fn partial_cmp(&self, other: &Self) -> Option<Ordering>
fn partial_cmp(&self, other: &Self) -> Option<Ordering>
Compare two Angles, i.e. a < b.
It compares whether an Angle
is clockwise of the other Angle
on the
unit circle.
§Examples
use angle_sc::{Angle, Degrees};
let degrees_120 = Angle::from(Degrees(120.0));
let degrees_m120 = -degrees_120;
assert!(degrees_120 < degrees_m120);
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl Sub for Angle
impl Sub for Angle
source§fn sub(self, other: Self) -> Self
fn sub(self, other: Self) -> Self
Subtract two Angles, i.e. a - b
Uses trigonometric identity functions, see:
angle sum and difference identities.
§Examples
use angle_sc::{Angle, Degrees, is_within_tolerance};
let angle_30 = Angle::from(Degrees(30.0));
let angle_60 = Angle::from(Degrees(60.0));
let result_30 = angle_60 - angle_30;
assert!(is_within_tolerance(Degrees(30.0).0, Degrees::from(result_30).0, 32.0 * std::f64::EPSILON));