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.
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 quarter_turn_cw(self) -> Self
pub fn quarter_turn_cw(self) -> Self
A quarter turn clockwise around the circle, i.e. + 90 degrees.
§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 degrees.
§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);
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 * f64::EPSILON));
impl Copy for Angle
impl StructuralPartialEq for Angle
Auto Trait Implementations§
impl Freeze for Angle
impl RefUnwindSafe for Angle
impl Send for Angle
impl Sync for Angle
impl Unpin for Angle
impl UnwindSafe for Angle
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)