Skip to content

0.4.0

Compare
Choose a tag to compare
@dhermes dhermes released this 02 Aug 17:52

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 to Surface.locate() and Curve.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() and Surface.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 or 1. (4a8458c)

New Features

Interface Changes

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. Removing matplotlib as a dependency.