Struct Intrinsic2

Source
pub struct Intrinsic2 {
    pub start: Frame2,
    pub curvature: CurvatureLaw,
    pub length: f64,
}
Expand description

A plane curve given by its natural equation: a curvature law anchored to a start frame and run for a finite arc length.

The frame supplies the rigid motion that k(s) alone cannot: its origin is the curve start, and its x axis is the start tangent direction.

Like every other value in this crate, dirty imported data stays representable – a non-positive length is storable, and naming it is the job of a validator, not of the type.

Fields§

§start: Frame2

Start frame: origin at the curve start, x along the start tangent.

§curvature: CurvatureLaw

Curvature as a function of arc length from start.

§length: f64

Arc length the law is defined over.

Implementations§

Source§

impl Intrinsic2

Source

pub const fn new( start: Frame2, curvature: CurvatureLaw, length: f64, ) -> Intrinsic2

Anchor a curvature law to a start frame over an arc length.

Source

pub fn is_straight(&self) -> bool

Whether the curve is a straight segment.

Source

pub fn heading_at(&self, s: f64) -> Option<f64>

Tangent heading at arc length s from the start, in radians.

The integral of k over [0, s], which every law in the family has in closed form – so the heading is exact even though the POSITION is not and has to be quadratured. Measured from the start tangent, so the absolute heading is this plus the start frame’s rotation.

Returns None when s is not finite or a piecewise law does not tile [0, s], matching Self::total_turning.

Source

pub fn total_turning(&self) -> Option<f64>

Total tangent turning over the curve, in radians, in closed form.

This is the integral of k(s) over [0, length] – exact for every law in the family, because each one has an elementary antiderivative. It is the angle that integrates in closed form; position does not, which is why this method exists and an evaluate does not.

Returns None when the length is not finite, since the integral is then undefined rather than merely large.

Source

pub fn turning_variation_bound(&self, s: f64) -> Option<f64>

Upper bound on the total variation of heading over [0, s], in radians.

total_turning is the SIGNED integral of k; over a zero-mean oscillation it is zero however violently the curve wiggles. A quadrature budget derived from it would then spend one panel on a curve that needs many, so this returns the integral of |k| instead – or a bound on it.

Exact for Constant. For the other families an exact total variation needs the sign changes of k, so this returns a cheap upper bound from the triangle inequality: a bound is what a panel budget wants, and overestimating costs panels while underestimating costs correctness.

None when s is not finite, matching heading_at.

Trait Implementations§

Source§

impl Clone for Intrinsic2

Source§

fn clone(&self) -> Intrinsic2

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Intrinsic2

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Intrinsic2

Source§

fn eq(&self, other: &Intrinsic2) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Intrinsic2

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,