Class Spline2D
- Direct Known Subclasses:
ParticlePath2D
This is a generic 3D B-Spline class for curves of arbitrary length, control handles and patches are created and joined automatically as described here: ibiblio.org/e-notes/ Splines/Bint.htm
Thanks to a bug report by Aaron Meyers (http://universaloscillation.com) the toLineStrip2D(int) method has a slightly changed behaviour from version 0014 onwards. In earlier versions erroneous duplicate points would be added near each given control point, which lead to various weird results.
The new behaviour of the curve interpolation/computation is described in the docs for the toLineStrip2D(int) method below.
- Version:
- 0014 Added user adjustable curve tightness control, 0015 Added JAXB annotations and List support for dynamic building of spline
-
Field Summary
-
Constructor Summary
ConstructorDescriptionSpline2D()
Constructs an empty spline container with default curve tightness.Spline2D
(List<Vec2D> rawPoints, BernsteinPolynomial b, float tightness) Spline2D
(Vec2D[] pointArray, BernsteinPolynomial b, float tightness) -
Method Summary
Modifier and TypeMethodDescriptionadd
(float x, float y) add
(ReadonlyVec2D p) Adds a copy of the given point to the list of control points.final int
Returns the number of control points.float
setPointList
(List<Vec2D> plist) Overrides the current control points with the given list.setTightness
(float tightness) Sets the tightness for future curve interpolation calls.toLineStrip2D
(int res) Computes all curve vertices based on the resolution/number of subdivisions requested.void
-
Field Details
-
DEFAULT_TIGHTNESS
public static final float DEFAULT_TIGHTNESS- See Also:
-
DEFAULT_RES
public static final int DEFAULT_RES- See Also:
-
pointList
-
bernstein
-
delta
-
coeffA
-
bi
public float[] bi
-
-
Constructor Details
-
Spline2D
public Spline2D()Constructs an empty spline container with default curve tightness. You need to populate the spline manually by usingadd(ReadonlyVec2D)
. -
Spline2D
- Parameters:
rawPoints
- list of control point vectors
-
Spline2D
- Parameters:
rawPoints
- list of control point vectorsb
- predefined Bernstein polynomial (good for reusing)tightness
- default curve tightness used for the interpolated vertices setTightness(float)
-
Spline2D
- Parameters:
pointArray
- array of control point vectors
-
Spline2D
- Parameters:
pointArray
- array of control point vectorsb
- predefined Bernstein polynomial (good for reusing)tightness
- default curve tightness used for the interpolated vertices setTightness(float)
-
-
Method Details
-
add
-
add
Adds a copy of the given point to the list of control points.- Parameters:
p
-- Returns:
- itself
-
getNumPoints
public final int getNumPoints()Returns the number of control points.- Returns:
- the numP
-
getPointList
- Returns:
- the pointList
-
getTightness
public float getTightness()- Returns:
- the spline3d tightness
- Since:
- 0014 (rev.216)
- See Also:
-
setPointList
Overrides the current control points with the given list.- Parameters:
plist
- the pointList to set- Returns:
- itself
-
setTightness
Sets the tightness for future curve interpolation calls. Default value is 0.25. A value of 0.0 equals linear interpolation between the given curve input points. Curve behaviour for values outside the 0.0 .. 0.5 interval is unspecified and becomes increasingly less intuitive. Negative values are possible too and create interesting results (in some cases).- Parameters:
tightness
- the tightness value used for the next call totoLineStrip2D(int)
- Since:
- 0014 (rev. 216)
-
toLineStrip2D
Computes all curve vertices based on the resolution/number of subdivisions requested. The higher, the more vertices are computed:
(number of control points - 1) * resolution + 1
Since version 0014 the automatic placement of the curve handles can also be manipulated via the setTightness(float) method.
- Parameters:
res
- the number of vertices to be computed per segment between original control points (incl. control point always at the start of each segment)- Returns:
- list of Vec2D vertices along the curve
-
updateCoefficients
public void updateCoefficients()
-