public final class VectorM4D extends Object implements Vector4DType
A four-dimensional mutable vector type with double elements.
Values of this type cannot be accessed safely from multiple threads without explicit synchronization.
| Modifier and Type | Class and Description |
|---|---|
static class |
VectorM4D.ContextVM4D
Preallocated storage to allow all vector functions to run without
allocating.
|
| Constructor and Description |
|---|
VectorM4D()
Default constructor, initializing the vector with values
[0.0, 0.0,
0.0, 1.0]. |
VectorM4D(double in_x,
double in_y,
double in_z,
double in_w)
Construct a vector initialized with the given values.
|
VectorM4D(VectorReadable4DType in_v)
Construct a vector initialized with the values given in the vector
v. |
| Modifier and Type | Method and Description |
|---|---|
static <V extends VectorWritable4DType> |
absolute(VectorReadable4DType v,
V out)
Calculate the absolute values of the elements in vector
v, saving
the result to out. |
static <V extends VectorWritable4DType & VectorReadable4DType> |
absoluteInPlace(V v)
Calculate the absolute values of the elements in vector
v,
modifying the vector in-place. |
static <V extends VectorWritable4DType> |
add(VectorReadable4DType v0,
VectorReadable4DType v1,
V out)
Calculate the element-wise sum of the vectors
v0 and v1,
saving the result to out. |
static <V extends VectorWritable4DType & VectorReadable4DType> |
addInPlace(V v0,
VectorReadable4DType v1)
Calculate the element-wise sum of the vectors
v0 and v1,
saving the result to v0. |
static <V extends VectorWritable4DType> |
addScaled(VectorReadable4DType v0,
VectorReadable4DType v1,
double r,
V out)
Calculate the element-wise sum of the vectors
v0 and the
element-wise product of v1 and r, saving the result to
out. |
static <V extends VectorWritable4DType & VectorReadable4DType> |
addScaledInPlace(V v0,
VectorReadable4DType v1,
double r)
Calculate the element-wise sum of the vectors
v0 and the
element-wise product of v1 and r, saving the result to
v0. |
static boolean |
almostEqual(com.io7m.jequality.AlmostEqualDouble.ContextRelative context,
VectorReadable4DType va,
VectorReadable4DType vb)
Determine whether or not the vectors
va and vb are equal to
within the degree of error given in context. |
static <V extends VectorWritable4DType> |
clamp(VectorReadable4DType v,
double minimum,
double maximum,
V out)
Clamp the elements of the vector
v to the range {@code [minimum .. |
static <V extends VectorWritable4DType> |
clampByVector(VectorReadable4DType v,
VectorReadable4DType minimum,
VectorReadable4DType maximum,
V out)
Clamp the elements of the vector
v to the inclusive range given by
the corresponding elements in minimum and maximum, saving
the result to out. |
static <V extends VectorWritable4DType & VectorReadable4DType> |
clampByVectorInPlace(V v,
VectorReadable4DType minimum,
VectorReadable4DType maximum)
Clamp the elements of the vector
v to the inclusive range given by
the corresponding elements in minimum and maximum, saving
the result to v. |
static <V extends VectorWritable4DType & VectorReadable4DType> |
clampInPlace(V v,
double minimum,
double maximum)
Clamp the elements of the vector
v to the range {@code [minimum .. |
static <V extends VectorWritable4DType> |
clampMaximum(VectorReadable4DType v,
double maximum,
V out)
Clamp the elements of the vector
v to the range {@code [-Infinity
.. |
static <V extends VectorWritable4DType> |
clampMaximumByVector(VectorReadable4DType v,
VectorReadable4DType maximum,
V out)
Clamp the elements of the vector
v to the inclusive range given by
the corresponding elements in maximum, saving the result to out. |
static <V extends VectorWritable4DType & VectorReadable4DType> |
clampMaximumByVectorInPlace(V v,
VectorReadable4DType maximum)
Clamp the elements of the vector
v to the inclusive range given by
the corresponding elements in maximum, saving the result to v. |
static <V extends VectorWritable4DType & VectorReadable4DType> |
clampMaximumInPlace(V v,
double maximum)
Clamp the elements of the vector
v to the range {@code [-Infinity
.. |
static <V extends VectorWritable4DType> |
clampMinimum(VectorReadable4DType v,
double minimum,
V out)
Clamp the elements of the vector
v to the range {@code [minimum .. |
static <V extends VectorWritable4DType> |
clampMinimumByVector(VectorReadable4DType v,
VectorReadable4DType minimum,
V out)
Clamp the elements of the vector
v to the inclusive range given by
the corresponding elements in minimum, saving the result to out. |
static <V extends VectorWritable4DType & VectorReadable4DType> |
clampMinimumByVectorInPlace(V v,
VectorReadable4DType minimum)
Clamp the elements of the vector
v to the inclusive range given by
the corresponding elements in minimum, saving the result to v. |
static <V extends VectorWritable4DType & VectorReadable4DType> |
clampMinimumInPlace(V v,
double minimum)
Clamp the elements of the vector
v to the range {@code [minimum .. |
static <V extends VectorWritable4DType> |
copy(VectorReadable4DType input,
V output)
Copy all elements of the vector
input to the vector output. |
void |
copyFrom2D(VectorReadable2DType in_v)
Set the current vector to the contents of the input vector.
|
void |
copyFrom3D(VectorReadable3DType in_v)
Set the current vector to the contents of the input vector.
|
void |
copyFrom4D(VectorReadable4DType in_v)
Set the current vector to the contents of the input vector.
|
static double |
distance(VectorM4D.ContextVM4D c,
VectorReadable4DType v0,
VectorReadable4DType v1)
Calculate the distance between the two vectors
v0 and v1. |
static double |
dotProduct(VectorReadable4DType v0,
VectorReadable4DType v1)
Calculate the scalar product of the vectors
v0 and v1. |
boolean |
equals(Object obj) |
double |
getWD() |
double |
getXD() |
double |
getYD() |
double |
getZD() |
int |
hashCode() |
static <V extends VectorWritable4DType> |
interpolateLinear(VectorM4D.ContextVM4D c,
VectorReadable4DType v0,
VectorReadable4DType v1,
double alpha,
V r)
Linearly interpolate between
v0 and v1 by the amount alpha, saving the result to r. |
static double |
magnitude(VectorReadable4DType v)
Calculate the magnitude of the vector
v. |
static double |
magnitudeSquared(VectorReadable4DType v)
Calculate the squared magnitude of the vector
v. |
static <V extends VectorWritable4DType> |
normalize(VectorReadable4DType v,
V out)
Returns a vector with the same orientation as
v but with magnitude
equal to 1.0 in out. |
static <V extends VectorWritable4DType & VectorReadable4DType> |
normalizeInPlace(V v)
Returns a vector with the same orientation as
v but with magnitude
equal to 1.0 in v. |
static <V extends VectorReadable4DType,U extends VectorWritable4DType> |
orthoNormalize(VectorM4D.ContextVM4D c,
VectorReadable4DType v0,
U v0_out,
VectorReadable4DType v1,
U v1_out)
Orthonormalize and return the vectors
v0 and v1 . |
static <V extends VectorWritable4DType & VectorReadable4DType,W extends VectorWritable4DType & VectorReadable4DType> |
orthoNormalizeInPlace(VectorM4D.ContextVM4D c,
V v0,
W v1)
Orthonormalize and the vectors
v0 and v1. |
static <V extends VectorWritable4DType> |
projection(VectorReadable4DType p,
VectorReadable4DType q,
V r)
Calculate the projection of the vector
p onto the vector q,
saving the result in r. |
static <V extends VectorWritable4DType> |
scale(VectorReadable4DType v,
double r,
V out)
Scale the vector
v by the scalar r, saving the result to
out. |
static <V extends VectorWritable4DType & VectorReadable4DType> |
scaleInPlace(V v,
double r)
Scale the vector
v by the scalar r, saving the result to
v. |
void |
set2D(double in_x,
double in_y)
Set the current
x and y values of the current vector. |
void |
set3D(double in_x,
double in_y,
double in_z)
Set the current
x, y and z values of the current
vector. |
void |
set4D(double in_x,
double in_y,
double in_z,
double in_w)
Set the current
x, y, z and w values of the
current vector. |
void |
setWD(double in_w)
Set the current
w value of the current vector. |
void |
setXD(double in_x)
Set the current
x value of the current vector. |
void |
setYD(double in_y)
Set the current
y value of the current vector. |
void |
setZD(double in_z)
Set the current
z value of the current vector. |
static <V extends VectorWritable4DType> |
subtract(VectorReadable4DType v0,
VectorReadable4DType v1,
V out)
Subtract the vector
v1 from the vector v0, saving the
result to out. |
static <V extends VectorWritable4DType & VectorReadable4DType> |
subtractInPlace(V v0,
VectorReadable4DType v1)
Subtract the vector
v1 from the vector v0, saving the
result to v0. |
String |
toString() |
public VectorM4D()
[0.0, 0.0,
0.0, 1.0].public VectorM4D(double in_x,
double in_y,
double in_z,
double in_w)
in_x - The x valuein_y - The y valuein_z - The z valuein_w - The w valuepublic VectorM4D(VectorReadable4DType in_v)
v.in_v - The source vectorpublic static <V extends VectorWritable4DType> V absolute(VectorReadable4DType v, V out)
v, saving
the result to out.V - The precise type of vectorv - The input vectorout - The output vector(abs v.x, abs v.y, abs v.z, abs.w)public static <V extends VectorWritable4DType & VectorReadable4DType> V absoluteInPlace(V v)
v,
modifying the vector in-place.V - The precise type of vectorv - The input vector(abs v.x, abs v.y, abs v.z, abs v.w)public static <V extends VectorWritable4DType> V add(VectorReadable4DType v0, VectorReadable4DType v1, V out)
v0 and v1,
saving the result to out.V - The precise type of vectorv0 - The left input vectorv1 - The right input vectorout - The output vector(v0.x + v1.x, v0.y + v1.y, v0.z + v1.z, v0.w + v1.w)public static <V extends VectorWritable4DType & VectorReadable4DType> V addInPlace(V v0, VectorReadable4DType v1)
v0 and v1,
saving the result to v0.V - The precise type of vectorv0 - The left input vectorv1 - The right input vector(v0.x + v1.x, v0.y + v1.y, v0.z + v1.z, v0.w + v1.w)public static <V extends VectorWritable4DType> V addScaled(VectorReadable4DType v0, VectorReadable4DType v1, double r, V out)
v0 and the
element-wise product of v1 and r, saving the result to
out.V - The precise type of vectorv0 - The left input vectorv1 - The right input vectorout - The output vectorr - The scaling value(v0.x + (v1.x * r), v0.y + (v1.y * r), v0.z + (v1.z * r),
v0.w + (v1.w * r))public static <V extends VectorWritable4DType & VectorReadable4DType> V addScaledInPlace(V v0, VectorReadable4DType v1, double r)
v0 and the
element-wise product of v1 and r, saving the result to
v0.V - The precise type of vectorv0 - The left input vectorv1 - The right input vectorr - The scaling value(v0.x + (v1.x * r), v0.y + (v1.y * r), v0.z + (v1.z * r),
v0.w + (v1.w * r))public static boolean almostEqual(com.io7m.jequality.AlmostEqualDouble.ContextRelative context,
VectorReadable4DType va,
VectorReadable4DType vb)
va and vb are equal to
within the degree of error given in context.context - The equality contextva - The left input vectorvb - The right input vectortrue if the vectors are almost equalAlmostEqualDouble.almostEqual(AlmostEqualDouble.ContextRelative,
double, double)public static <V extends VectorWritable4DType> V clamp(VectorReadable4DType v, double minimum, double maximum, V out)
v to the range [minimum ..
maximum] inclusive, saving the result to out.V - The precise type of vectorv - The input vectorminimum - The minimum allowed valuemaximum - The maximum allowed valueout - The output vectormaximum and at
least minimumpublic static <V extends VectorWritable4DType> V clampByVector(VectorReadable4DType v, VectorReadable4DType minimum, VectorReadable4DType maximum, V out)
v to the inclusive range given by
the corresponding elements in minimum and maximum, saving
the result to out.V - The precise type of vectorv - The input vectorminimum - The vector containing the minimum acceptable valuesmaximum - The vector containing the maximum acceptable valuesout - The output vector(min(max(v.x, minimum.x), maximum.x), min(max(v.y,
minimum.y), maximum.y), min(max(v.z, minimum.z), maximum.z), min(max(v.w,
minimum.w), maximum.w))public static <V extends VectorWritable4DType & VectorReadable4DType> V clampByVectorInPlace(V v, VectorReadable4DType minimum, VectorReadable4DType maximum)
v to the inclusive range given by
the corresponding elements in minimum and maximum, saving
the result to v.V - The precise type of vectorv - The input vectorminimum - The vector containing the minimum acceptable valuesmaximum - The vector containing the maximum acceptable values(min(max(v.x, minimum.x), maximum.x), min(max(v.y,
minimum.y), maximum.y), min(max(v.z, minimum.z), maximum.z), min(max(v.w,
minimum.w), maximum.w))public static <V extends VectorWritable4DType & VectorReadable4DType> V clampInPlace(V v, double minimum, double maximum)
v to the range [minimum ..
maximum] inclusive, saving the result to v.V - The precise type of vectorv - The input vectorminimum - The minimum allowed valuemaximum - The maximum allowed valuemaximum and at
least minimum, in vpublic static <V extends VectorWritable4DType> V clampMaximum(VectorReadable4DType v, double maximum, V out)
v to the range [-Infinity
.. maximum] inclusive, saving the result to out.V - The precise type of vectorv - The input vectorout - The output vectormaximum - The maximum allowed valuemaximumpublic static <V extends VectorWritable4DType> V clampMaximumByVector(VectorReadable4DType v, VectorReadable4DType maximum, V out)
v to the inclusive range given by
the corresponding elements in maximum, saving the result to out.V - The precise type of vectorv - The input vectormaximum - The vector containing the maximum acceptable valuesout - The output vector(min(v.x, maximum.x), min(v.y, maximum.y), min(v.z,
maximum.z), min(v.w, maximum.w))public static <V extends VectorWritable4DType & VectorReadable4DType> V clampMaximumByVectorInPlace(V v, VectorReadable4DType maximum)
v to the inclusive range given by
the corresponding elements in maximum, saving the result to v.V - The precise type of vectorv - The input vectormaximum - The vector containing the maximum acceptable values(min(v.x, maximum.x), min(v.y, maximum.y), min(v.z,
maximum.z), min(v.w, maximum.w))public static <V extends VectorWritable4DType & VectorReadable4DType> V clampMaximumInPlace(V v, double maximum)
v to the range [-Infinity
.. maximum] inclusive, saving the result to v.V - The precise type of vectorv - The input vectormaximum - The maximum allowed valuemaximum , in
vpublic static <V extends VectorWritable4DType> V clampMinimum(VectorReadable4DType v, double minimum, V out)
v to the range [minimum ..
Infinity] inclusive, saving the result to out.V - The precise type of vectorv - The input vectorout - The output vectorminimum - The minimum allowed valueminimumpublic static <V extends VectorWritable4DType> V clampMinimumByVector(VectorReadable4DType v, VectorReadable4DType minimum, V out)
v to the inclusive range given by
the corresponding elements in minimum, saving the result to out.V - The precise type of vectorv - The input vectorout - The output vectorminimum - The vector containing the minimum acceptable values(max(v.x, minimum.x), max(v.y, minimum.y), max(v.z,
minimum.z), max(v.w, minimum.w))public static <V extends VectorWritable4DType & VectorReadable4DType> V clampMinimumByVectorInPlace(V v, VectorReadable4DType minimum)
v to the inclusive range given by
the corresponding elements in minimum, saving the result to v.V - The precise type of vectorv - The input vectorminimum - The vector containing the minimum acceptable values(max(v.x, minimum.x), max(v.y, minimum.y), max(v.z,
minimum.z), max(v.w, minimum.w)) , in vpublic static <V extends VectorWritable4DType & VectorReadable4DType> V clampMinimumInPlace(V v, double minimum)
v to the range [minimum ..
Infinity] inclusive, saving the result to v.V - The precise type of vectorv - The input vectorminimum - The minimum allowed valueminimum, in
v.public static <V extends VectorWritable4DType> V copy(VectorReadable4DType input, V output)
input to the vector output.V - The precise type of vectorinput - The input vectoroutput - The output vectorpublic static double distance(VectorM4D.ContextVM4D c, VectorReadable4DType v0, VectorReadable4DType v1)
v0 and v1.c - Preallocated storagev0 - The left input vectorv1 - The right input vectorpublic static double dotProduct(VectorReadable4DType v0, VectorReadable4DType v1)
v0 and v1.v0 - The left input vectorv1 - The right input vectorpublic static <V extends VectorWritable4DType> V interpolateLinear(VectorM4D.ContextVM4D c, VectorReadable4DType v0, VectorReadable4DType v1, double alpha, V r)
v0 and v1 by the amount alpha, saving the result to r.
The alpha parameter controls the degree of interpolation, such
that:
interpolateLinear(v0, v1, 0.0, r) -> r = v0interpolateLinear(v0, v1, 1.0, r) -> r = v1V - The precise type of vectorc - Preallocated storagev0 - The left input vector.v1 - The right input vector.alpha - The interpolation value, between 0.0 and 1.0.r - The result vector.rpublic static double magnitude(VectorReadable4DType v)
v.
Correspondingly, magnitude(normalize(v)) == 1.0.v - The input vectorpublic static double magnitudeSquared(VectorReadable4DType v)
v.v - The input vectorpublic static <V extends VectorWritable4DType> V normalize(VectorReadable4DType v, V out)
v but with magnitude
equal to 1.0 in out. The function returns the zero vector
iff the input is the zero vector.V - The precise type of vectorv - The input vectorout - The output vectorpublic static <V extends VectorWritable4DType & VectorReadable4DType> V normalizeInPlace(V v)
v but with magnitude
equal to 1.0 in v. The function returns the zero vector iff
the input is the zero vector.V - The precise type of vectorv - The input vectorpublic static <V extends VectorReadable4DType,U extends VectorWritable4DType> void orthoNormalize(VectorM4D.ContextVM4D c, VectorReadable4DType v0, U v0_out, VectorReadable4DType v1, U v1_out)
Orthonormalize and return the vectors v0 and v1 .
See GSP
V - The precise type of readable vectorsU - The precise type of writable vectorsc - Preallocated storagev0 - The left vectorv0_out - The orthonormalized form of v0v1 - The right vectorv1_out - The orthonormalized form of v1public static <V extends VectorWritable4DType & VectorReadable4DType,W extends VectorWritable4DType & VectorReadable4DType> void orthoNormalizeInPlace(VectorM4D.ContextVM4D c, V v0, W v1)
Orthonormalize and the vectors v0 and v1.
See GSP
V - The precise type of readable/writable vectorW - The precise type of readable/writable vectorc - Preallocated storagev0 - The left vectorv1 - The right vectorpublic static <V extends VectorWritable4DType> V projection(VectorReadable4DType p, VectorReadable4DType q, V r)
p onto the vector q,
saving the result in r.V - The precise type of vectorp - The left vectorq - The right vectorr - The output vector((dotProduct p q) / magnitudeSquared q) * qpublic static <V extends VectorWritable4DType> V scale(VectorReadable4DType v, double r, V out)
v by the scalar r, saving the result to
out.V - The precise type of vectorv - The input vectorr - The scaling valueout - The output vector(v.x * r, v.y * r, v.z * r, v.w * r)public static <V extends VectorWritable4DType & VectorReadable4DType> V scaleInPlace(V v, double r)
v by the scalar r, saving the result to
v.V - The precise type of vectorv - The input vectorr - The scaling value(v.x * r, v.y * r, v.z * r, v.w * r)public static <V extends VectorWritable4DType> V subtract(VectorReadable4DType v0, VectorReadable4DType v1, V out)
v1 from the vector v0, saving the
result to out.V - The precise type of vectorv0 - The left input vectorv1 - The right input vectorout - The output vector(v0.x - v1.x, v0.y - v1.y, v0.z - v1.z, v0.w - v1.w)public static <V extends VectorWritable4DType & VectorReadable4DType> V subtractInPlace(V v0, VectorReadable4DType v1)
v1 from the vector v0, saving the
result to v0.V - The precise type of vectorv0 - The left input vectorv1 - The right input vector(v0.x - v1.x, v0.y - v1.y, v0.z - v1.z, v0.w - v1.w)public void copyFrom2D(VectorReadable2DType in_v)
VectorWritable2DTypecopyFrom2D in interface VectorWritable2DTypein_v - The input vectorpublic void copyFrom3D(VectorReadable3DType in_v)
VectorWritable3DTypecopyFrom3D in interface VectorWritable3DTypein_v - The input vectorpublic void copyFrom4D(VectorReadable4DType in_v)
VectorWritable4DTypecopyFrom4D in interface VectorWritable4DTypein_v - The input vectorpublic double getWD()
getWD in interface VectorReadable4DTypepublic void setWD(double in_w)
VectorWritable4DTypew value of the current vector.setWD in interface VectorWritable4DTypein_w - The new w value.public double getXD()
getXD in interface VectorReadable2DTypepublic void setXD(double in_x)
VectorWritable2DTypex value of the current vector.setXD in interface VectorWritable2DTypein_x - The new x value.public double getYD()
getYD in interface VectorReadable2DTypepublic void setYD(double in_y)
VectorWritable2DTypey value of the current vector.setYD in interface VectorWritable2DTypein_y - The new y value.public double getZD()
getZD in interface VectorReadable3DTypepublic void setZD(double in_z)
VectorWritable3DTypez value of the current vector.setZD in interface VectorWritable3DTypein_z - The new z value.public void set2D(double in_x,
double in_y)
VectorWritable2DTypex and y values of the current vector.set2D in interface VectorWritable2DTypein_x - The new x value.in_y - The new y value.public void set3D(double in_x,
double in_y,
double in_z)
VectorWritable3DTypex, y and z values of the current
vector.set3D in interface VectorWritable3DTypein_x - The new x value.in_y - The new y value.in_z - The new z value.public void set4D(double in_x,
double in_y,
double in_z,
double in_w)
VectorWritable4DTypex, y, z and w values of the
current vector.set4D in interface VectorWritable4DTypein_x - The new x value.in_y - The new y value.in_z - The new z value.in_w - The new w value.Copyright © 2017 <code@io7m.com> http://io7m.com