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.
- See also my CPAN perl module that does the same: https://metacpan.org/pod/Math::JSpline
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
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.
Change log
[1.0.0] - 2020-05-02
- Cloned a quality github python module, and changed it to jspline :-)
- Followed instructions here: https://medium.com/@thucnc/how-to-publish-your-own-python-package-to-pypi-4318868210f9
[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.