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 const fn new(sin: UnitNegRange, cos: UnitNegRange) -> Self
pub const fn new(sin: UnitNegRange, cos: UnitNegRange) -> Self
Construct an Angle from sin and cos values.
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.
Normalizes 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 tan(self) -> Option<f64>
pub fn tan(self) -> Option<f64>
The tangent of the Angle.
returns the tangent or None
if self.cos < SQ_EPSILON
Sourcepub fn csc(self) -> Option<f64>
pub fn csc(self) -> Option<f64>
The cosecant of the Angle.
returns the cosecant or None
if self.sin < SQ_EPSILON
Sourcepub fn sec(self) -> Option<f64>
pub fn sec(self) -> Option<f64>
The secant of the Angle.
returns the secant or None
if self.cos < SQ_EPSILON
Sourcepub fn cot(self) -> Option<f64>
pub fn cot(self) -> Option<f64>
The cotangent of the Angle.
returns the cotangent or None
if self.sin < SQ_EPSILON
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 quarter_turn_cw(self) -> Self
pub fn quarter_turn_cw(self) -> Self
A quarter turn clockwise around the circle, i.e. + 90°.
§Examples
use angle_sc::{Angle, Degrees};
let angle_m30 = Angle::from(Degrees(-30.0));
let result = angle_m30.quarter_turn_cw();
assert_eq!(Angle::from(Degrees(60.0)), result);
Sourcepub fn quarter_turn_ccw(self) -> Self
pub fn quarter_turn_ccw(self) -> Self
A quarter turn counter-clockwise around the circle, i.e. - 90°.
§Examples
use angle_sc::{Angle, Degrees};
let angle_120 = Angle::from(Degrees(120.0));
let result = angle_120.quarter_turn_ccw();
assert_eq!(Angle::from(Degrees(30.0)), 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 * f64::EPSILON);
Sourcepub fn half(self) -> Self
pub fn half(self) -> Self
Half of the Angle.
See: Half-angle formulae
§Examples
use angle_sc::{Angle, Degrees};
let angle_30 = Angle::from(Degrees(30.0));
let angle_60 = Angle::from(Degrees(60.0));
assert_eq!(angle_30, angle_60.half());
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, Degrees)> for Angle
impl From<(Degrees, Degrees)> for Angle
Source§fn from(params: (Degrees, Degrees)) -> Self
fn from(params: (Degrees, Degrees)) -> Self
Construct an Angle
from the difference of a pair angles in Degrees:
a - b
Examples:
use angle_sc::{Angle, Degrees, trig};
// Difference of Degrees(-155.0) - Degrees(175.0)
let angle = Angle::from((Degrees(-155.0), Degrees(175.0)));
assert_eq!(0.5, angle.sin().0);
assert_eq!(trig::COS_30_DEGREES, angle.cos().0);
assert_eq!(30.0, Degrees::from(angle).0);
Source§impl From<(Radians, Radians)> for Angle
impl From<(Radians, Radians)> for Angle
Source§fn from(params: (Radians, Radians)) -> Self
fn from(params: (Radians, Radians)) -> Self
Construct an Angle from the difference of a pair angles in Radians: a - b
Examples:
use angle_sc::{Angle, Radians, trig};
// 6*π - π/3 radians round trip
let angle = Angle::from((
Radians(3.0 * core::f64::consts::TAU),
Radians(core::f64::consts::FRAC_PI_3),
));
assert_eq!(-core::f64::consts::FRAC_PI_3, Radians::from(angle).0);
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.
Examples:
use angle_sc::{Angle, Degrees, is_within_tolerance, trig};
let angle = Angle::from(Degrees(60.0));
assert_eq!(trig::COS_30_DEGREES, angle.sin().0);
assert_eq!(0.5, angle.cos().0);
assert_eq!(60.0, Degrees::from(angle).0);
Source§impl From<Radians> for Angle
impl From<Radians> for Angle
Source§fn from(a: Radians) -> Self
fn from(a: Radians) -> Self
Construct an Angle
from an angle in Radians.
Examples:
use angle_sc::{Angle, Radians, trig};
let angle = Angle::from(Radians(-core::f64::consts::FRAC_PI_6));
assert_eq!(-0.5, angle.sin().0);
assert_eq!(trig::COS_30_DEGREES, angle.cos().0);
assert_eq!(-core::f64::consts::FRAC_PI_6, Radians::from(angle).0);
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 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);
Source§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 * f64::EPSILON));