Package arc.math.geom

Class CatmullRomSpline<T extends Vector<T>>

java.lang.Object
arc.math.geom.CatmullRomSpline<T>
All Implemented Interfaces:
Path<T>

public class CatmullRomSpline<T extends Vector<T>> extends Object implements Path<T>
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    boolean
     
    T[]
     
    int
     
  • Constructor Summary

    Constructors
    Constructor
    Description
     
    CatmullRomSpline(T[] controlPoints, boolean continuous)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    float
     
    float
    approximate(T in, int near)
     
    float
    approximate(T in, int start, int count)
     
    float
    approxLength(int samples)
     
    static <T extends Vector<T>>
    T
    calculate(T out, float t, T[] points, boolean continuous, T tmp)
    Calculates the catmullrom value for the given position (t).
    static <T extends Vector<T>>
    T
    calculate(T out, int i, float u, T[] points, boolean continuous, T tmp)
    Calculates the catmullrom value for the given span (i) at the given position (u).
    static <T extends Vector<T>>
    T
    derivative(T out, float t, T[] points, boolean continuous, T tmp)
    Calculates the derivative of the catmullrom spline for the given position (t).
    static <T extends Vector<T>>
    T
    derivative(T out, int i, float u, T[] points, boolean continuous, T tmp)
    Calculates the derivative of the catmullrom spline for the given span (i) at the given position (u).
    derivativeAt(T out, float t)
     
    derivativeAt(T out, int span, float u)
     
    float
    locate(T v)
     
    int
    nearest(T in)
     
    int
    nearest(T in, int start, int count)
     
    set(T[] controlPoints, boolean continuous)
     
    valueAt(T out, float t)
     
    valueAt(T out, int span, float u)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • controlPoints

      public T extends Vector<T>[] controlPoints
    • continuous

      public boolean continuous
    • spanCount

      public int spanCount
  • Constructor Details

    • CatmullRomSpline

      public CatmullRomSpline()
    • CatmullRomSpline

      public CatmullRomSpline(T[] controlPoints, boolean continuous)
  • Method Details

    • calculate

      public static <T extends Vector<T>> T calculate(T out, float t, T[] points, boolean continuous, T tmp)
      Calculates the catmullrom value for the given position (t).
      Parameters:
      out - The Vector to set to the result.
      t - The position (0<=t<=1) on the spline
      points - The control points
      continuous - If true the b-spline restarts at 0 when reaching 1
      tmp - A temporary vector used for the calculation
      Returns:
      The value of out
    • calculate

      public static <T extends Vector<T>> T calculate(T out, int i, float u, T[] points, boolean continuous, T tmp)
      Calculates the catmullrom value for the given span (i) at the given position (u).
      Parameters:
      out - The Vector to set to the result.
      i - The span (0<=i<spanCount) spanCount = continuous ? points.length : points.length - degree
      u - The position (0<=u<=1) on the span
      points - The control points
      continuous - If true the b-spline restarts at 0 when reaching 1
      tmp - A temporary vector used for the calculation
      Returns:
      The value of out
    • derivative

      public static <T extends Vector<T>> T derivative(T out, float t, T[] points, boolean continuous, T tmp)
      Calculates the derivative of the catmullrom spline for the given position (t).
      Parameters:
      out - The Vector to set to the result.
      t - The position (0<=t<=1) on the spline
      points - The control points
      continuous - If true the b-spline restarts at 0 when reaching 1
      tmp - A temporary vector used for the calculation
      Returns:
      The value of out
    • derivative

      public static <T extends Vector<T>> T derivative(T out, int i, float u, T[] points, boolean continuous, T tmp)
      Calculates the derivative of the catmullrom spline for the given span (i) at the given position (u).
      Parameters:
      out - The Vector to set to the result.
      i - The span (0<=i<spanCount) spanCount = continuous ? points.length : points.length - degree
      u - The position (0<=u<=1) on the span
      points - The control points
      continuous - If true the b-spline restarts at 0 when reaching 1
      tmp - A temporary vector used for the calculation
      Returns:
      The value of out
    • set

      public CatmullRomSpline set(T[] controlPoints, boolean continuous)
    • valueAt

      public T valueAt(T out, float t)
      Specified by:
      valueAt in interface Path<T extends Vector<T>>
      Returns:
      The value of the path at t where 0<=t<=1
    • valueAt

      public T valueAt(T out, int span, float u)
      Returns:
      The value of the spline at position u of the specified span
    • derivativeAt

      public T derivativeAt(T out, float t)
      Specified by:
      derivativeAt in interface Path<T extends Vector<T>>
    • derivativeAt

      public T derivativeAt(T out, int span, float u)
      Returns:
      The derivative of the spline at position u of the specified span
    • nearest

      public int nearest(T in)
      Returns:
      The span closest to the specified value
    • nearest

      public int nearest(T in, int start, int count)
      Returns:
      The span closest to the specified value, restricting to the specified spans.
    • approximate

      public float approximate(T v)
      Specified by:
      approximate in interface Path<T extends Vector<T>>
      Returns:
      The approximated value (between 0 and 1) on the path which is closest to the specified value. Note that the implementation of this method might be optimized for speed against precision, see Path.locate(Object) for a more precise (but more intensive) method.
    • approximate

      public float approximate(T in, int start, int count)
    • approximate

      public float approximate(T in, int near)
    • locate

      public float locate(T v)
      Specified by:
      locate in interface Path<T extends Vector<T>>
      Returns:
      The precise location (between 0 and 1) on the path which is closest to the specified value. Note that the implementation of this method might be CPU intensive, see Path.approximate(Object) for a faster (but less precise) method.
    • approxLength

      public float approxLength(int samples)
      Specified by:
      approxLength in interface Path<T extends Vector<T>>
      Parameters:
      samples - The amount of divisions used to approximate length. Higher values will produce more precise results, but will be more CPU intensive.
      Returns:
      An approximated length of the spline through sampling the curve and accumulating the euclidean distances between the sample points.