0.4.0
PyPI: https://pypi.org/project/bezier/0.4.0/
Docs: https://bezier.readthedocs.io/en/0.4.0/
Performance Optimizations
- Adding Fortran speedups for many crucial computation helpers including
- intersecting line segments
- (vectorized) Horner's method for evaluating a Bézier curve at multiple parameters at once
- (vectorized) Horner's method for evaluating a Bézier surface
- computing "linearization error" (how close a curve is to a line)
- specializing a Bézier curve to a sub-interval
- using Newton's method to refine a curve-curve intersection
- Adding
_verify
switch toSurface.locate()
andCurve.intersect()
to selectively disable overly defensive value checking. (Making sure to use this switch during "internal" computation.) - Making sure NumPy arrays are Fortran-contiguous as often as possible (e.g. snippets and source, via
np.asfortranarray()
). This is to avoid (and emphasize) a non-trivial overhead when passing a C-contiguous array to a Fortran function. (03a7242
,6064e4c
,f1804f4
) - Using Horner's method in
Curve.evaluate_multi()
andSurface.evaluate_barycentric()
, rather than inferior (sometimes non-vectorized) approaches (dee8181
,2611e64
) - Made surface-surface intersection more resilient / lenient for corner intersections. For "nearby" intersections, parameter values can be rounded to
0
or1
. (4a8458c
)
New Features
- Adding optional
strategy
argument (one of geometric or algebraic) toSurface.intersect()
- Added "algebraic"
IntersectionStrategy
via curve implicitization (reference)
- Added "algebraic"
- Adding
Curve.reduce_()
which acts as a partial inverse toCurve.elevate()
. It is only a complete inverse when a curve is degree-elevated, otherwise it returns the "best" reduced form (in the least squares sense).
Interface Changes
- (Breaking change) Removing
show
keyword fromCurve.plot()
,Surface.plot()
andCurvedPolygon.plot()
- Adding
color
keyword toCurve.plot()
- Adding
alpha
keyword toCurve.plot()
- (Breaking change) Splitting the
Surface.evaluate_multi()
method intoSurface.evaluate_barycentric_multi()
andSurface.evaluate_cartesian_multi()
- Adding
__dict__
helpers onCurve
,CurvedPolygon
andSurface
. These are@property
s intended only for REPL use, since classes with__slots__
no longer have a__dict__
attribute.
Miscellany
- Adding
IntersectionClassification
to docs (ref) - Moving most plotting into a dedicated module. More importantly, importing plotting helpers at run-time rather at import time. So if computational code never plots, it won't eat the import cost of
matplotlib
. Removingmatplotlib
as a dependency.