Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## toxi.geom
Class Spline3D

    java.lang.Object
      toxi.geom.Spline3D

    public class Spline3D

extends java.lang.Object

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 computeVertices(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 computeVertices(int) method below.

Field Summary
`BernsteinPolynomial` | `bernstein`
`float[]` | `bi`
`Vec3D[]` | `coeffA`
`static int` | `DEFAULT_RES`
`static float` | `DEFAULT_TIGHTNESS`
`Vec3D[]` | `delta`
`java.util.List<Vec3D>` | `pointList`
`java.util.List<Vec3D>` | `vertices`

Constructor Summary
`Spline3D()` Constructs an empty spline container with default curve tightness.
`Spline3D(java.util.List<Vec3D> rawPoints)`
`Spline3D(java.util.List<Vec3D> rawPoints, BernsteinPolynomial b, float tightness)`
`Spline3D(Vec3D[] pointArray)`
`Spline3D(Vec3D[] pointArray, BernsteinPolynomial b, float tightness)`

Method Summary
`Spline3D` | `add(float x, float y, float z)`
`Spline3D` | `add(ReadonlyVec3D p)` Adds the given point to the list of control points.
`java.util.List<Vec3D>` | `computeVertices(int res)` Computes all curve vertices based on the resolution/number of subdivisions requested.
`java.util.List<Vec3D>` | `getDecimatedVertices(float step)` Computes a list of points along the spline which are uniformly separated by the given step distance.
`java.util.List<Vec3D>` | `getDecimatedVertices(float step, boolean doAddFinalVertex)` Computes a list of points along the spline which are uniformly separated by the given step distance.
`float` | `getEstimatedArcLength()`
`int` | `getNumPoints()` Returns the number of key points.
`java.util.List<Vec3D>` | `getPointList()`
`float` | `getTightness()`
`Spline3D` | `setPointList(java.util.List<Vec3D> plist)`
`Spline3D` | `setTightness(float tightness)` Sets the tightness for future curve interpolation calls.
`void` | `updateCoefficients()`

Methods inherited from class java.lang.Object
`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### DEFAULT_TIGHTNESS

    public static final float DEFAULT_TIGHTNESS

See Also:
  Constant Field Values

### DEFAULT_RES

    public static final int DEFAULT_RES

See Also:
  Constant Field Values

### pointList

    public java.util.List<Vec3D> pointList

### vertices

    public java.util.List<Vec3D> vertices

### bernstein

    public BernsteinPolynomial bernstein

### delta

    public Vec3D[] delta

### coeffA

    public Vec3D[] coeffA

### bi

    public float[] bi

Constructor Detail

### Spline3D

    public Spline3D()

  Constructs an empty spline container with default curve tightness. You need to populate the spline manually by using `add(ReadonlyVec3D)` .

### Spline3D

    public Spline3D(java.util.List<Vec3D> rawPoints)

Parameters:
  `rawPoints` - list of control point vectors

### Spline3D

    public Spline3D(java.util.List<Vec3D> rawPoints,
                    BernsteinPolynomial b,
                    float tightness)

Parameters:
  `rawPoints` - list of control point vectors
  `b` - predefined Bernstein polynomial (good for reusing)
  `tightness` - default curve tightness used for the interpolated vertices setTightness(float)

### Spline3D

    public Spline3D(Vec3D[] pointArray)

Parameters:
  `pointArray` - array of control point vectors

### Spline3D

    public Spline3D(Vec3D[] pointArray,
                    BernsteinPolynomial b,
                    float tightness)

Parameters:
  `pointArray` - array of control point vectors
  `b` - predefined Bernstein polynomial (good for reusing)
  `tightness` - default curve tightness used for the interpolated vertices setTightness(float)

Method Detail

### add

    public Spline3D add(float x,
                        float y,
                        float z)

### add

    public Spline3D add(ReadonlyVec3D p)

  Adds the given point to the list of control points.

  Parameters:
    `p` -
  Returns:
    itself

### computeVertices

    public java.util.List<Vec3D> computeVertices(int res)

  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 Vec3D vertices along the curve

### getDecimatedVertices

    public java.util.List<Vec3D> getDecimatedVertices(float step)

  Computes a list of points along the spline which are uniformly separated by the given step distance.

  Parameters:
    `step` -
  Returns:
    point list

### getDecimatedVertices

    public java.util.List<Vec3D> getDecimatedVertices(float step,
                                                      boolean doAddFinalVertex)

  Computes a list of points along the spline which are uniformly separated by the given step distance.

  Parameters:
    `step` -
    `doAddFinalVertex` - true, if the last vertex computed by `computeVertices(int)` should be added regardless of its distance.
  Returns:
    point list

### getEstimatedArcLength

    public float getEstimatedArcLength()

  Returns:
    estimated arc length based on summing the individual lengths of the line segments computed with `computeVertices(int)`.

### getNumPoints

    public int getNumPoints()

  Returns the number of key points.

  Returns:
    the numP

### getPointList

    public java.util.List<Vec3D> getPointList()

  Returns:
    the pointList

### getTightness

    public float getTightness()

  Returns:
    the spline3d tightness
  Since:
    0014 (rev.216)
  See Also:
    `setTightness(float)`

### setPointList

    public Spline3D setPointList(java.util.List<Vec3D> plist)

  Parameters:
    `plist` - the pointList to set
  Returns:
    itself

### setTightness

    public Spline3D setTightness(float tightness)

  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 to `computeVertices(int)`
  Returns:
    itself
  Since:
    0014 (rev. 216)

### updateCoefficients

    public void updateCoefficients()

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD