Package arc.math.geom

Class Bezier<T extends Vector<T>>

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

public class Bezier<T extends Vector<T>> extends Object implements Path<T>
Implementation of the Bezier curve.
  • Field Details

  • Constructor Details

    • Bezier

      public Bezier()
    • Bezier

      public Bezier(T... points)
    • Bezier

      public Bezier(T[] points, int offset, int length)
    • Bezier

      public Bezier(Seq<T> points, int offset, int length)
  • Method Details

    • linear

      public static <T extends Vector<T>> T linear(T out, float t, T p0, T p1, T tmp)
      Simple Linear interpolation
      Parameters:
      out - The Vector to set to the result.
      t - The location (ranging 0..1) on the line.
      p0 - The start point.
      p1 - The end point.
      tmp - A temporary vector to be used by the calculation.
      Returns:
      The value specified by out for chaining
    • linearDerivative

      public static <T extends Vector<T>> T linearDerivative(T out, float t, T p0, T p1, T tmp)
      Simple Linear interpolation derivative
      Parameters:
      out - The Vector to set to the result.
      t - The location (ranging 0..1) on the line.
      p0 - The start point.
      p1 - The end point.
      tmp - A temporary vector to be used by the calculation.
      Returns:
      The value specified by out for chaining
    • quadratic

      public static <T extends Vector<T>> T quadratic(T out, float t, T p0, T p1, T p2, T tmp)
      Quadratic Bezier curve
      Parameters:
      out - The Vector to set to the result.
      t - The location (ranging 0..1) on the curve.
      p0 - The first bezier point.
      p1 - The second bezier point.
      p2 - The third bezier point.
      tmp - A temporary vector to be used by the calculation.
      Returns:
      The value specified by out for chaining
    • quadraticDerivative

      public static <T extends Vector<T>> T quadraticDerivative(T out, float t, T p0, T p1, T p2, T tmp)
      Quadratic Bezier curve derivative
      Parameters:
      out - The Vector to set to the result.
      t - The location (ranging 0..1) on the curve.
      p0 - The first bezier point.
      p1 - The second bezier point.
      p2 - The third bezier point.
      tmp - A temporary vector to be used by the calculation.
      Returns:
      The value specified by out for chaining
    • cubic

      public static <T extends Vector<T>> T cubic(T out, float t, T p0, T p1, T p2, T p3, T tmp)
      Cubic Bezier curve
      Parameters:
      out - The Vector to set to the result.
      t - The location (ranging 0..1) on the curve.
      p0 - The first bezier point.
      p1 - The second bezier point.
      p2 - The third bezier point.
      p3 - The fourth bezier point.
      tmp - A temporary vector to be used by the calculation.
      Returns:
      The value specified by out for chaining
    • cubicDerivative

      public static <T extends Vector<T>> T cubicDerivative(T out, float t, T p0, T p1, T p2, T p3, T tmp)
      Cubic Bezier curve derivative
      Parameters:
      out - The Vector to set to the result.
      t - The location (ranging 0..1) on the curve.
      p0 - The first bezier point.
      p1 - The second bezier point.
      p2 - The third bezier point.
      p3 - The fourth bezier point.
      tmp - A temporary vector to be used by the calculation.
      Returns:
      The value specified by out for chaining
    • set

      public Bezier<T> set(T... points)
    • set

      public Bezier<T> set(T[] points, int offset, int length)
    • set

      public Bezier<T> set(T p1, T p2, T p3)
    • set

      public Bezier<T> set(Seq<T> points)
    • set

      public Bezier<T> set(Seq<T> points, int offset, int length)
    • 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
    • derivativeAt

      public T derivativeAt(T out, float t)
      Specified by:
      derivativeAt in interface Path<T extends Vector<T>>
    • 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.
    • 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.