Skip to main content

Approximate or interpolate a sequence of points into a sequence of c2-continuous, non-rational cubic Bézier curves.

Project description

Non-rational Bezier curves and splines (composite Bezier curves)

This package exists mostly to create C2-continuous, non-rational cubic Bezier splines. In other words, this will approximate or interpolate a sequence of points into a sequence of non-rational cubic Bezier curves.

Should be relatively fast, but this isn't suited for heavy math. This is for taking some points you have and making a nice-looking curve out of them. Specifically, a cubic Bezier spline, which is made from the type of curves used in SVG, fonts, and other vector-base programs. I am only interested in feature requests that directly apply to that purpose. This is not an exercise in completism.

install

pip install cubic_bezier_spline

this package will

  • Evaluate, differentiate, elevate, and split non-rational Bezier curves of any degree
  • Construct non-rational cubic Bezier splines (open and closed, approximating and interpolating)
  • Evaluate and differentiate non-rational Bezier splines of any degree
  • Approximate (closely) the length of a curve

this package will not **

  • Work with rational Bezier splines, b-splines, NURBS, or any other generalization of Bezier curves
  • Decrease curve degree
  • Approximate curve intersections
  • "Stroke" (move left or right) a curve

** much of the "will not" features can be found here: https://github.com/dhermes/bezier

Public classes / functions

# a c2-continuous cubic Bezier spline near the control points
new_open_approximating_spline([(x0, y0), (x1, y1), ...])

# a c2-continuous cubic Bezier spline near the control points
new_closed_approximating_spline([(x0, y0), (x1, y1), ...])

# a c2-continuous cubic Bezier spline through the control points
new_open_interpolating_spline([(x0, y0), (x1, y1), ...])

# a c2-continuous cubic Bezier spline through the control points
new_closed_interpolating_spline([(x0, y0), (x1, y1), ...])

Any of these will return a BezierSpline object. This object has a some of the usual methods (e.g., elevate, derivative, split) to help find path normals or do some light modeling, but you may be most interested in.

# plot the spline at a given point, where time is 0 to
# (number of input points + 1)
def __call__(self,
    time: float,
    derivative: int = 0,
    *,
    normalized: bool | None = None,
    uniform: bool | None = None,
) -> npt.NDArray[np.floating[Any]]:
    """Given x.y, call curve x at time y.

    :param time: x.y -> curve index x and time on curve y
        between 0 and len(curves)
    :param derivative: optional derivative at time
    :param normalized: if True (default False), time is in [0, 1]
        instead of [0, len(curves)]
    :param uniform: if True (default), treat all curves as equal in length,
        else longer curves will take up more of the time interval.
    :return: xth non-rational Bezier at time

    For a spline with 3 curves, spline(3) will return curve 2 at time=1
    """

# an svg data string
# (the d="" attribute of an SVG path object)
spline.svgd

Examples

Some of these use double and triple repeated points to create "knots". This isn't a special function, just a feature of Bezier math. The idea is clearer with a picture.

knot examples

Most of the math can be found in:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cubic_bezier_spline-0.21.0.tar.gz (12.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cubic_bezier_spline-0.21.0-py3-none-any.whl (17.2 kB view details)

Uploaded Python 3

File details

Details for the file cubic_bezier_spline-0.21.0.tar.gz.

File metadata

  • Download URL: cubic_bezier_spline-0.21.0.tar.gz
  • Upload date:
  • Size: 12.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.23

File hashes

Hashes for cubic_bezier_spline-0.21.0.tar.gz
Algorithm Hash digest
SHA256 5ce197a7c60913a74f9472c985172e94ccfa880a46782d643898d40138131dc0
MD5 d2c89f7d647d59d793f1157ff05b932b
BLAKE2b-256 3ca818238b0a965719e67869a246ee6492bb002115910ddbb9d047a9fc92e158

See more details on using hashes here.

File details

Details for the file cubic_bezier_spline-0.21.0-py3-none-any.whl.

File metadata

File hashes

Hashes for cubic_bezier_spline-0.21.0-py3-none-any.whl
Algorithm Hash digest
SHA256 103fdf68408413e1c85ce4e414877548a110ea15a03590159711a6c3ed657c65
MD5 4fe44b1394e05afab6f24cb2082da0fb
BLAKE2b-256 4d91f7322f85bbadc875019cfb0f175a61e8788071de5a45a3c0e2af9d838717

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page