pub struct Circle<const D: usize> { /* private fields */ }Expand description
An n-dimensional circle
The dimensionality of the circle is defined by the const generic D
parameter.
Implementations§
Source§impl<const D: usize> Circle<D>
impl<const D: usize> Circle<D>
Sourcepub fn new(
center: impl Into<Point<D>>,
a: impl Into<Vector<D>>,
b: impl Into<Vector<D>>,
) -> Self
pub fn new( center: impl Into<Point<D>>, a: impl Into<Vector<D>>, b: impl Into<Vector<D>>, ) -> Self
Construct a circle
§Panics
Panics, if any of the following requirements are not met:
- The circle radius (defined by the length of
aandb) must not be zero. aandbmust be of equal length.aandbmust be perpendicular to each other.
Sourcepub fn from_center_and_radius(
center: impl Into<Point<D>>,
radius: impl Into<Scalar>,
) -> Self
pub fn from_center_and_radius( center: impl Into<Point<D>>, radius: impl Into<Scalar>, ) -> Self
Construct a Circle from a center point and a radius
Sourcepub fn a(&self) -> Vector<D>
pub fn a(&self) -> Vector<D>
Access the vector that defines the starting point of the circle
The point where this vector points from the circle center, is the zero coordinate of the circle’s coordinate system. The length of the vector defines the circle’s radius.
Please also refer to Self::b.
Sourcepub fn b(&self) -> Vector<D>
pub fn b(&self) -> Vector<D>
Access the vector that defines the plane of the circle
Also defines the direction of the circle’s coordinate system. The length
is equal to the circle’s radius, and this vector is perpendicular to
Self::a.
Sourcepub fn point_to_circle_coords(&self, point: impl Into<Point<D>>) -> Point<1>
pub fn point_to_circle_coords(&self, point: impl Into<Point<D>>) -> Point<1>
Convert a D-dimensional point to circle coordinates
Converts the provided point into circle coordinates between 0.
(inclusive) and PI * 2. (exclusive).
Projects the point onto the circle before computing circle coordinate, ignoring the radius. This is done to make this method robust against floating point accuracy issues.
Callers are advised to be careful about the points they pass, as the point not being on the curve, intentional or not, will not result in an error.
Sourcepub fn point_from_circle_coords(&self, point: impl Into<Point<1>>) -> Point<D>
pub fn point_from_circle_coords(&self, point: impl Into<Point<1>>) -> Point<D>
Convert a point in circle coordinates into a D-dimensional point
Sourcepub fn vector_from_circle_coords(
&self,
vector: impl Into<Vector<1>>,
) -> Vector<D>
pub fn vector_from_circle_coords( &self, vector: impl Into<Vector<1>>, ) -> Vector<D>
Convert a vector in circle coordinates into a D-dimensional point
Trait Implementations§
Source§impl<const D: usize> AbsDiffEq for Circle<D>
impl<const D: usize> AbsDiffEq for Circle<D>
Source§fn default_epsilon() -> Self::Epsilon
fn default_epsilon() -> Self::Epsilon
Source§fn abs_diff_eq(&self, other: &Self, epsilon: Self::Epsilon) -> bool
fn abs_diff_eq(&self, other: &Self, epsilon: Self::Epsilon) -> bool
Source§fn abs_diff_ne(&self, other: &Rhs, epsilon: Self::Epsilon) -> bool
fn abs_diff_ne(&self, other: &Rhs, epsilon: Self::Epsilon) -> bool
AbsDiffEq::abs_diff_eq.Source§impl<const D: usize> Ord for Circle<D>
impl<const D: usize> Ord for Circle<D>
Source§impl<const D: usize> PartialOrd for Circle<D>
impl<const D: usize> PartialOrd for Circle<D>
impl<const D: usize> Copy for Circle<D>
impl<const D: usize> Eq for Circle<D>
impl<const D: usize> StructuralPartialEq for Circle<D>
Auto Trait Implementations§
impl<const D: usize> Freeze for Circle<D>
impl<const D: usize> RefUnwindSafe for Circle<D>
impl<const D: usize> Send for Circle<D>
impl<const D: usize> Sync for Circle<D>
impl<const D: usize> Unpin for Circle<D>
impl<const D: usize> UnwindSafe for Circle<D>
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: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.