Package arc.math.geom

Class BSpline<T extends Vector<T>>

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

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

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

    Constructors
    Constructor
    Description
     
    BSpline(T[] controlPoints, int degree, 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, int degree, boolean continuous, T tmp)
    Calculates the n-degree b-spline value for the given position (t).
    static <T extends Vector<T>>
    T
    calculate(T out, int i, float u, T[] points, int degree, boolean continuous, T tmp)
    Calculates the n-degree b-spline value for the given span (i) at the given position (u).
    static <T extends Vector<T>>
    T
    cubic(T out, float t, T[] points, boolean continuous, T tmp)
    Calculates the cubic b-spline value for the given position (t).
    static <T extends Vector<T>>
    T
    cubic(T out, int i, float u, T[] points, boolean continuous, T tmp)
    Calculates the cubic b-spline value for the given span (i) at the given position (u).
    static <T extends Vector<T>>
    T
    cubic_derivative(T out, float t, T[] points, boolean continuous, T tmp)
    Calculates the cubic b-spline derivative for the given position (t).
    static <T extends Vector<T>>
    T
    cubic_derivative(T out, int i, float u, T[] points, boolean continuous, T tmp)
    Calculates the cubic b-spline derivative for the given span (i) at the given position (u).
    static <T extends Vector<T>>
    T
    derivative(T out, float t, T[] points, int degree, boolean continuous, T tmp)
    Calculates the n-degree b-spline derivative for the given position (t).
    static <T extends Vector<T>>
    T
    derivative(T out, int i, float u, T[] points, int degree, boolean continuous, T tmp)
    Calculates the n-degree b-spline derivative 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, int degree, 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
    • knots

      public Seq<T extends Vector<T>> knots
    • degree

      public int degree
    • continuous

      public boolean continuous
    • spanCount

      public int spanCount
  • Constructor Details

    • BSpline

      public BSpline()
    • BSpline

      public BSpline(T[] controlPoints, int degree, boolean continuous)
  • Method Details

    • cubic

      public static <T extends Vector<T>> T cubic(T out, float t, T[] points, boolean continuous, T tmp)
      Calculates the cubic b-spline 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
    • cubic_derivative

      public static <T extends Vector<T>> T cubic_derivative(T out, float t, T[] points, boolean continuous, T tmp)
      Calculates the cubic b-spline derivative 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
    • cubic

      public static <T extends Vector<T>> T cubic(T out, int i, float u, T[] points, boolean continuous, T tmp)
      Calculates the cubic b-spline 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 - 3 (cubic 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
    • cubic_derivative

      public static <T extends Vector<T>> T cubic_derivative(T out, int i, float u, T[] points, boolean continuous, T tmp)
      Calculates the cubic b-spline derivative 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 - 3 (cubic 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
    • calculate

      public static <T extends Vector<T>> T calculate(T out, float t, T[] points, int degree, boolean continuous, T tmp)
      Calculates the n-degree b-spline 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
      degree - The degree of the b-spline
      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, int degree, boolean continuous, T tmp)
      Calculates the n-degree b-spline derivative 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
      degree - The degree of the b-spline
      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, int degree, boolean continuous, T tmp)
      Calculates the n-degree b-spline 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
      degree - The degree of the b-spline
      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, int degree, boolean continuous, T tmp)
      Calculates the n-degree b-spline derivative 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
      degree - The degree of the b-spline
      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 BSpline set(T[] controlPoints, int degree, 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.