Trait piet_common::kurbo::ParamCurveArclen [−]
A parametrized curve that can have its arc length measured.
Required methods
pub fn arclen(&self, accuracy: f64) -> f64
The arc length of the curve.
The result is accurate to the given accuracy (subject to roundoff errors for ridiculously low values). Compute time may vary with accuracy, if the curve needs to be subdivided.
Provided methods
pub fn inv_arclen(&self, arclen: f64, accuracy: f64) -> f64
Solve for the parameter that has the given arc length from the start.
This implementation uses the IPT method, as provided by
common::solve_itp
. This is as robust as bisection but
typically converges faster. In addition, the method takes
care to compute arc lengths of increasingly smaller segments
of the curve, as that is likely faster than repeatedly
computing the arc length of the segment starting at t=0.
Implementors
impl ParamCurveArclen for PathSeg
impl ParamCurveArclen for ConstPoint
impl ParamCurveArclen for CubicBez
pub fn arclen(&self, accuracy: f64) -> f64
Arclength of a cubic Bézier segment.
This is an adaptive subdivision approach using Legendre-Gauss quadrature in the base case, and an error estimate to decide when to subdivide.
impl ParamCurveArclen for Line
pub fn arclen(&self, _accuracy: f64) -> f64
pub fn inv_arclen(&self, arclen: f64, _accuracy: f64) -> f64
impl ParamCurveArclen for QuadBez
pub fn arclen(&self, _accuracy: f64) -> f64
Arclength of a quadratic Bézier segment.
This computation is based on an analytical formula. Since that formula suffers from numerical instability when the curve is very close to a straight line, we detect that case and fall back to Legendre-Gauss quadrature.
Accuracy should be better than 1e-13 over the entire range.
Adapted from http://www.malczak.linuxpl.com/blog/quadratic-bezier-curve-length/ with permission.