Class BSplined<T extends Vectord<T>>

  • All Implemented Interfaces:
    Pathd<T>

    public class BSplined<T extends Vectord<T>>
    extends java.lang.Object
    implements Pathd<T>
    • Constructor Summary

      Constructors 
      Constructor Description
      BSplined()  
      BSplined​(T[] controlPoints, int degree, boolean continuous)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      double approximate​(T v)  
      double approximate​(T in, int near)  
      double approximate​(T in, int start, int count)  
      double approxLength​(int samples)  
      static <T extends Vectord<T>>
      T
      calculate​(T out, double t, T[] points, int degree, boolean continuous, T tmp)
      Calculates the n-degree b-spline value for the given position (t).
      static <T extends Vectord<T>>
      T
      calculate​(T out, int i, double 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 Vectord<T>>
      T
      cubic​(T out, double t, T[] points, boolean continuous, T tmp)
      Calculates the cubic b-spline value for the given position (t).
      static <T extends Vectord<T>>
      T
      cubic​(T out, int i, double 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 Vectord<T>>
      T
      cubic_derivative​(T out, double t, T[] points, boolean continuous, T tmp)
      Calculates the cubic b-spline derivative for the given position (t).
      static <T extends Vectord<T>>
      T
      cubic_derivative​(T out, int i, double 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 Vectord<T>>
      T
      derivative​(T out, double t, T[] points, int degree, boolean continuous, T tmp)
      Calculates the n-degree b-spline derivative for the given position (t).
      static <T extends Vectord<T>>
      T
      derivative​(T out, int i, double 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).
      T derivativeAt​(T out, double t)  
      T derivativeAt​(T out, int span, double u)  
      double locate​(T v)  
      int nearest​(T in)  
      int nearest​(T in, int start, int count)  
      BSplined set​(T[] controlPoints, int degree, boolean continuous)  
      T valueAt​(T out, double t)  
      T valueAt​(T out, int span, double u)  
      • Methods inherited from class java.lang.Object

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

      • controlPoints

        public T extends Vectord<T>[] controlPoints
      • knots

        public com.badlogic.gdx.utils.Array<T extends Vectord<T>> knots
      • degree

        public int degree
      • continuous

        public boolean continuous
      • spanCount

        public int spanCount
    • Constructor Detail

      • BSplined

        public BSplined()
      • BSplined

        public BSplined​(T[] controlPoints,
                        int degree,
                        boolean continuous)
    • Method Detail

      • cubic

        public static <T extends Vectord<T>> T cubic​(T out,
                                                     double t,
                                                     T[] points,
                                                     boolean continuous,
                                                     T tmp)
        Calculates the cubic b-spline value for the given position (t).
        Parameters:
        out - The Vectord 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 Vectord<T>> T cubic_derivative​(T out,
                                                                double t,
                                                                T[] points,
                                                                boolean continuous,
                                                                T tmp)
        Calculates the cubic b-spline derivative for the given position (t).
        Parameters:
        out - The Vectord 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 Vectord<T>> T cubic​(T out,
                                                     int i,
                                                     double 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 Vectord to set to the result.
        i - The span (0<=i
        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 Vectord<T>> T cubic_derivative​(T out,
                                                                int i,
                                                                double 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 Vectord to set to the result.
        i - The span (0<=i
        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 Vectord<T>> T calculate​(T out,
                                                         double t,
                                                         T[] points,
                                                         int degree,
                                                         boolean continuous,
                                                         T tmp)
        Calculates the n-degree b-spline value for the given position (t).
        Parameters:
        out - The Vectord 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 Vectord<T>> T derivative​(T out,
                                                          double t,
                                                          T[] points,
                                                          int degree,
                                                          boolean continuous,
                                                          T tmp)
        Calculates the n-degree b-spline derivative for the given position (t).
        Parameters:
        out - The Vectord 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 Vectord<T>> T calculate​(T out,
                                                         int i,
                                                         double 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 Vectord to set to the result.
        i - The span (0<=i
        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 Vectord<T>> T derivative​(T out,
                                                          int i,
                                                          double 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 Vectord to set to the result.
        i - The span (0<=i
        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 BSplined set​(T[] controlPoints,
                            int degree,
                            boolean continuous)
      • valueAt

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

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

        public T derivativeAt​(T out,
                              int span,
                              double 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 double approximate​(T v)
        Specified by:
        approximate in interface Pathd<T extends Vectord<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 Pathd.locate(Object) for a more precise (but more intensive) method.
      • approximate

        public double approximate​(T in,
                                  int start,
                                  int count)
      • approximate

        public double approximate​(T in,
                                  int near)
      • locate

        public double locate​(T v)
        Specified by:
        locate in interface Pathd<T extends Vectord<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 Pathd.approximate(Object) for a faster (but less precise) method.
      • approxLength

        public double approxLength​(int samples)
        Specified by:
        approxLength in interface Pathd<T extends Vectord<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.