pub struct Scatter { /* private fields */ }Expand description
Points on the ground (east and north of the pad, m), sorted, and how many samples were tried.
It serializes as those two, and reads back through Scatter::new’s checks.
Implementations§
Source§impl Scatter
impl Scatter
Sourcepub const MAX_COORDINATE_M: f64 = 1e9
pub const MAX_COORDINATE_M: f64 = 1e9
The largest distance east or north of the pad a point may have, m: 10⁹ m, 25 times round the Earth, and small enough that every square and sum of a scatter stays finite.
Sourcepub fn new(
points: Vec<[f64; 2]>,
attempted: usize,
) -> Result<Self, AnalysisError>
pub fn new( points: Vec<[f64; 2]>, attempted: usize, ) -> Result<Self, AnalysisError>
The scatter of points, each [east_m, north_m], from attempted samples (those that
gave no point make up the difference).
§Errors
AnalysisError::Domainfor a coordinate that isn’t finite, or is more thanScatter::MAX_COORDINATE_Mfrom the pad.AnalysisError::Countfor more points than samples.
Sourcepub fn mean(&self) -> Option<[f64; 2]>
pub fn mean(&self) -> Option<[f64; 2]>
The mean point, x₀ + Σ(xᵢ − x₀)/n with x₀ the first; None with no points.
Sourcepub fn covariance(&self) -> Option<Covariance>
pub fn covariance(&self) -> Option<Covariance>
The sample covariance, Σ(dᵢ − d̄)(dᵢ − d̄)ᵀ/(n − 1) with dᵢ = xᵢ − x₀; None with
fewer than two points.
Sourcepub fn ellipse(&self, level: f64) -> Result<Option<Ellipse>, AnalysisError>
pub fn ellipse(&self, level: f64) -> Result<Option<Ellipse>, AnalysisError>
The ellipse holding the share level of a normal spread with this scatter’s mean and
covariance (gaussian_scale); None with fewer than two points.
§Errors
AnalysisError::Domain for a level outside (0, 1).
Sourcepub fn prediction_ellipse(
&self,
level: f64,
) -> Result<Option<Ellipse>, AnalysisError>
pub fn prediction_ellipse( &self, level: f64, ) -> Result<Option<Ellipse>, AnalysisError>
The ellipse a new flight lands in with probability level, if the landings are normal,
allowing for the mean and covariance being estimated from this scatter
(prediction_scale); None with fewer than three points.
§Errors
AnalysisError::Domain for a level outside (0, 1).
Sourcepub fn principal_axes(&self) -> Option<PrincipalAxes>
pub fn principal_axes(&self) -> Option<PrincipalAxes>
The scatter’s axes: the heading of its Covariance::principal_axes, and the variances
as the mean squares of the points’ distances along and across that heading,
Σ(uᵀdᵢ)²/(n − 1) with dᵢ a point less the mean. With the heading exact these are the
eigenvalues, and an error δ in the heading moves them by only δ² (λ₁ − λ₂) (they are
Rayleigh quotients). So a spread far narrower than it is long keeps its width, which the
covariance’s three entries, each rounded to about ε λ₁, can’t carry. None with fewer
than two points.
Bounds on the share of the samples tried that landed inside or on ellipse (Share):
a sample with no point counts as outside for low, inside for high. None with no
samples tried.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Scatter
impl<'de> Deserialize<'de> for Scatter
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>,
impl StructuralPartialEq for Scatter
Auto Trait Implementations§
impl Freeze for Scatter
impl RefUnwindSafe for Scatter
impl Send for Scatter
impl Sync for Scatter
impl Unpin for Scatter
impl UnsafeUnpin for Scatter
impl UnwindSafe for Scatter
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,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
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 more