java.lang.Object
com.io7m.jtensors.core.unparameterized.vectors.Vectors4D

public final class Vectors4D
extends java.lang.Object

Functions over Vector4D values.

See "Mathematics for 3D Game Programming and Computer Graphics" 2nd Ed for the derivations of most of the code in this class (ISBN: 1-58450-277-0).

Since:
8.0.0
  • Method Details

    • absolute

      public static Vector4D absolute​(Vector4D v0)
      Calculate the absolute of v0.
      Returns:
      (abs v0.x, abs v0.y, abs v0.z, abs v0.w) * @param v0 The vector
    • add

      public static Vector4D add​(Vector4D v0, Vector4D v1)
      Add v0 to v1.
      Parameters:
      v1 - The right vector
      Returns:
      (v0.x + v1.x, v0.y + v1.y, v0.z + v1.z, v0.w + v1.w) * @param v0 The left vector
    • multiply

      public static Vector4D multiply​(Vector4D v0, Vector4D v1)
      Multiply v0 by v1.
      Parameters:
      v1 - The right vector
      Returns:
      (v0.x * v1.x, v0.y * v1.y, v0.z * v1.z, v0.w * v1.w) * @param v0 The left vector
      Since:
      10.0.0
    • addScaled

      public static Vector4D addScaled​(Vector4D v0, Vector4D v1, double r)
      Add v0 to v1 * r.
      Parameters:
      v1 - The right vector
      r - The scaling value
      Returns:
      (v0.x + (v1.x * r), v0.y + (v0.y * r), v0.z + (v1.z * r), v0.w + (v1.w * r)) * @param v0 The left vector
    • clamp

      public static Vector4D clamp​(Vector4D v, Vector4D v_min, Vector4D v_max)
      Clamp the values in v by v_min and v_max.
      Parameters:
      v_min - The minimum vector
      v_max - The maximum vector
      Returns:
      (max(min(v.x, v_max.x()), v_min.x()), max(min(v.y, v_max.y()), v_min.y()), max(min(v.z, v_max.z()), v_min.z()), max(min(v.w, v_max.w()), v_min.w())) * @param v The source vector
    • distance

      public static double distance​(Vector4D v0, Vector4D v1)
      Calculate the distance between v0 and v1.
      Parameters:
      v1 - The right vector
      Returns:
      The distance between v0 and v1. * @param v0 The left vector
    • dotProduct

      public static double dotProduct​(Vector4D v0, Vector4D v1)
      Calculate the scalar product of the vectors v0 and v1. * @param v0 The left vector
      Parameters:
      v1 - The right vector
      Returns:
      The scalar product of the two vectors
    • interpolateLinear

      public static Vector4D interpolateLinear​(Vector4D v0, Vector4D v1, double alpha)

      Linearly interpolate between v0 and v1 by the amount alpha.

      The alpha parameter controls the degree of interpolation, such that:

      • interpolateLinear(v0, v1, 0.0) = v0
      • interpolateLinear(v0, v1, 1.0) = v1
      Parameters:
      v0 - The left input vector
      v1 - The right input vector
      alpha - The interpolation value in the range [0, 1] * @return ((1 - alpha) * v0) + (alpha * v1)
    • interpolateBilinear

      public static Vector4D interpolateBilinear​(Vector4D x0y0, Vector4D x1y0, Vector4D x0y1, Vector4D x1y1, double px, double py)

      Bilinearly interpolate between x0y0, x1y0, x0y1, x1y1.

      The px and py parameters control the degree of interpolation, such that:

      • interpolateBilinear(x0y0, x1y0, x0y1, x1y1, 0.0, 0.0) = x0y0
      • interpolateBilinear(x0y0, x1y0, x0y1, x1y1, 1.0, 0.0) = x1y0
      • interpolateBilinear(x0y0, x1y0, x0y1, x1y1, 0.0, 1.0) = x0y1
      • interpolateBilinear(x0y0, x1y0, x0y1, x1y1, 1.0, 1.0) = x1y1
      Parameters:
      x0y0 - The top left input vector
      x1y0 - The top right input vector
      x0y1 - The bottom left input vector
      x1y1 - The bottom right input vector
      px - The X interpolation value in the range [0, 1]
      py - The Y interpolation value in the range [0, 1] * @return The bilinearly interpolated value
    • magnitudeSquared

      public static double magnitudeSquared​(Vector4D v0)
      Calculate the squared magnitude of the vector v0. * @param v0 The vector
      Returns:
      The squared magnitude of the vector
    • magnitude

      public static double magnitude​(Vector4D v0)
      Calculate the magnitude of the vector v0. * @param v0 The vector
      Returns:
      The magnitude of the vector
    • negate

      public static Vector4D negate​(Vector4D v)
      Calculate the negation of v.
      Returns:
      (-v.x, -v.y, -v.z, -v.w) * @param v The vector
    • normalize

      public static Vector4D normalize​(Vector4D v0)

      Normalize the vector v0.

      If the magnitude of the vector is zero, the function returns v0.

      * @param v0 The vector
      Returns:
      A normalized copy of v0
    • scale

      public static Vector4D scale​(Vector4D v0, double r)
      Scale v0 by r.
      Parameters:
      r - The scaling value
      Returns:
      (v0.x * r, v0.y * r, v0.z * r, v0.w * r) * @param v0 The left vector
    • subtract

      public static Vector4D subtract​(Vector4D v0, Vector4D v1)
      Subtract v1 from v0.
      Parameters:
      v1 - The right vector
      Returns:
      (v0.x - v1.x, v0.y - v1.y, v0.z - v1.z, v0.w - v1.w) * @param v0 The left vector
    • zero

      public static Vector4D zero()
      The zero vector.
      Returns:
      (0, 0, 0, 0)