Skip to main content

Multi-dimensional parameterized spline curves (snappiness parameter gives uniform cubic B-splines, four-point subdivision splines, uniform quintic B-splines, and everything in-between)

Project description

jspline

Multi-dimensional parameterized spline curves (snappiness parameter gives uniform cubic B-splines, four-point subdivision splines, uniform quintic B-splines, and everything in-between)

Description

J-Splines are awesome: they're a class of spline curves that take a shape parameter, s. Setting s=1 yields uniform cubic B-spline curves, s=0 gives four-point subdivision curves, s=0.5 are uniform quintic B-splines - and more. "s" basically governs the "snappiness" of the curve.

jspline, lets you choose any combination of J-Spline parameters for any number of input arrays, with a range of different starting and ending schemes (eg: open or closed loops). Use it for 2D drawing, 3D graphics, or any other kind of interpolation you might need.

Synopsis

from jspline import jspline
interpolated_results=jspline.make(subdivision_level, a, b, end_type, [xarray, ...])

where

subdivision_level determines how many points to interpolate (1 doubles $#x in the above example). 
when a = b, this is the "s" paramater from the description (and the math paper below)
end_type is how you want to deal with the start and end points:
      3=join them up (loop). 2=tangent clamp, 1=end clamp, 0=simple join (refer "see also" below)
[xarray] any number of array references come next, ex [xarray,yarray,zarray]

Example

from jspline import jspline
js=jspline.make(1,0,0, 0 ,[[1, 2, 4, 5]])    # returns 1,2,3,4,5
# or
x=[ 50 ,250, 250, 50 ]
y=[ 50, 50, 250, 250 ]
js=jspline.make(1,0,0, 0 ,[x,y])    # Draws one of the the below

Jsplines

See Also http://faculty.cs.tamu.edu/schaefer/research/js.pdf for details.

Installation

Normal installation

pip install jspline

Development installation

git clone https://github.com/gitcnd/jspline.git
cd jspline
pip install --editable .

Author note

Be sure to check out Airfoil Tools, a Fusion 360 plugin, for which this module was written. Airfoil Tools

Change log

[1.0.0] - 2020-05-02

[1.0.1] - 2020-05-02

  • Added synopsis, examples, and references to the Doc

[1.0.2] - 2020-05-02

  • Improved doc.

[1.0.3] - 2020-05-04

  • Correct endpoint clamping to create closed output shapes when input shape was closed

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

jspline-1.0.3.tar.gz (4.9 kB view hashes)

Uploaded Source

Built Distribution

jspline-1.0.3-py3-none-any.whl (6.5 kB view hashes)

Uploaded Python 3

Supported by

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