Added Vector4.mult(Matrix4) and Matrix4.transform(Vector4).

This commit is contained in:
Michael Bayne
2012-05-18 09:06:37 -07:00
parent a24891d535
commit 6a45db8e35
8 changed files with 140 additions and 0 deletions
+15
View File
@@ -247,6 +247,21 @@ public interface IMatrix4
*/
Vector3 transformVector (IVector3 vector, Vector3 result);
/**
* Transforms {@code vector} by this matrix (M * V).
*
* @return a new vector containing the result.
*/
Vector4 transform (IVector4 vector);
/**
* Transforms {@code vector} by this matrix (M * V) and stores the result in the object
* provided.
*
* @return a reference to the result vector, for chaining.
*/
Vector4 transform (IVector4 vector, Vector4 result);
/**
* Extracts the rotation component of the matrix.
*
+14
View File
@@ -34,4 +34,18 @@ public interface IVector4
* Compares this vector to another with the provided epsilon.
*/
boolean epsilonEquals (IVector4 other, double epsilon);
/**
* Multiplies this vector by a matrix (V * M).
*
* @return a new vector containing the result.
*/
IVector4 mult (IMatrix4 matrix);
/**
* Multiplies this vector by a matrix (V * M) and stores the result in the object provided.
*
* @return a reference to the result vector, for chaining.
*/
IVector4 mult (IMatrix4 matrix, Vector4 result);
}
+14
View File
@@ -916,6 +916,20 @@ public final class Matrix4 implements IMatrix4, Serializable
m02*vx + m12*vy + m22*vz);
}
@Override // from IMatrix4
public Vector4 transform (IVector4 vector) {
return transform(vector, new Vector4());
}
@Override // from IMatrix4
public Vector4 transform (IVector4 vector, Vector4 result) {
double vx = vector.x(), vy = vector.y(), vz = vector.z(), vw = vector.w();
return result.set(m00*vx + m10*vy + m20*vz + m30*vw,
m01*vx + m11*vy + m21*vz + m31*vw,
m02*vx + m12*vy + m22*vz + m32*vw,
m03*vx + m13*vy + m23*vz + m33*vw);
}
@Override // from IMatrix4
public Quaternion extractRotation () {
return extractRotation(new Quaternion());
+27
View File
@@ -92,6 +92,15 @@ public class Vector4 implements IVector4, Serializable
return this;
}
/**
* Multiplies this vector by a matrix (V * M) and stores the result back in this vector.
*
* @return a reference to this vector, for chaining.
*/
public IVector4 multLocal (IMatrix4 matrix) {
return mult(matrix, this);
}
@Override // from IVector4
public double x () {
return x;
@@ -125,6 +134,24 @@ public class Vector4 implements IVector4, Serializable
Math.abs(w - other.w()) < epsilon);
}
@Override // from IVector4
public IVector4 mult (IMatrix4 matrix) {
return mult(matrix, new Vector4());
}
@Override // from IVector4
public IVector4 mult (IMatrix4 matrix, Vector4 result) {
double m00 = matrix.m00(), m10 = matrix.m10(), m20 = matrix.m20(), m30 = matrix.m30();
double m01 = matrix.m01(), m11 = matrix.m11(), m21 = matrix.m21(), m31 = matrix.m31();
double m02 = matrix.m02(), m12 = matrix.m12(), m22 = matrix.m22(), m32 = matrix.m32();
double m03 = matrix.m03(), m13 = matrix.m13(), m23 = matrix.m23(), m33 = matrix.m33();
double vx = x, vy = y, vz = z, vw = w;
return result.set(m00*vx + m01*vy + m02*vz + m03*vw,
m10*vx + m11*vy + m12*vz + m13*vw,
m20*vx + m21*vy + m22*vz + m23*vw,
m30*vx + m31*vy + m32*vz + m33*vw);
}
@Override
public String toString () {
return "[" + x + ", " + y + ", " + z + ", " + w + "]";
+15
View File
@@ -247,6 +247,21 @@ public interface IMatrix4
*/
Vector3 transformVector (IVector3 vector, Vector3 result);
/**
* Transforms {@code vector} by this matrix (M * V).
*
* @return a new vector containing the result.
*/
Vector4 transform (IVector4 vector);
/**
* Transforms {@code vector} by this matrix (M * V) and stores the result in the object
* provided.
*
* @return a reference to the result vector, for chaining.
*/
Vector4 transform (IVector4 vector, Vector4 result);
/**
* Extracts the rotation component of the matrix.
*
+14
View File
@@ -34,4 +34,18 @@ public interface IVector4
* Compares this vector to another with the provided epsilon.
*/
boolean epsilonEquals (IVector4 other, float epsilon);
/**
* Multiplies this vector by a matrix (V * M).
*
* @return a new vector containing the result.
*/
IVector4 mult (IMatrix4 matrix);
/**
* Multiplies this vector by a matrix (V * M) and stores the result in the object provided.
*
* @return a reference to the result vector, for chaining.
*/
IVector4 mult (IMatrix4 matrix, Vector4 result);
}
+14
View File
@@ -916,6 +916,20 @@ public final class Matrix4 implements IMatrix4, Serializable
m02*vx + m12*vy + m22*vz);
}
@Override // from IMatrix4
public Vector4 transform (IVector4 vector) {
return transform(vector, new Vector4());
}
@Override // from IMatrix4
public Vector4 transform (IVector4 vector, Vector4 result) {
float vx = vector.x(), vy = vector.y(), vz = vector.z(), vw = vector.w();
return result.set(m00*vx + m10*vy + m20*vz + m30*vw,
m01*vx + m11*vy + m21*vz + m31*vw,
m02*vx + m12*vy + m22*vz + m32*vw,
m03*vx + m13*vy + m23*vz + m33*vw);
}
@Override // from IMatrix4
public Quaternion extractRotation () {
return extractRotation(new Quaternion());
+27
View File
@@ -92,6 +92,15 @@ public class Vector4 implements IVector4, Serializable
return this;
}
/**
* Multiplies this vector by a matrix (V * M) and stores the result back in this vector.
*
* @return a reference to this vector, for chaining.
*/
public IVector4 multLocal (IMatrix4 matrix) {
return mult(matrix, this);
}
@Override // from IVector4
public float x () {
return x;
@@ -125,6 +134,24 @@ public class Vector4 implements IVector4, Serializable
Math.abs(w - other.w()) < epsilon);
}
@Override // from IVector4
public IVector4 mult (IMatrix4 matrix) {
return mult(matrix, new Vector4());
}
@Override // from IVector4
public IVector4 mult (IMatrix4 matrix, Vector4 result) {
float m00 = matrix.m00(), m10 = matrix.m10(), m20 = matrix.m20(), m30 = matrix.m30();
float m01 = matrix.m01(), m11 = matrix.m11(), m21 = matrix.m21(), m31 = matrix.m31();
float m02 = matrix.m02(), m12 = matrix.m12(), m22 = matrix.m22(), m32 = matrix.m32();
float m03 = matrix.m03(), m13 = matrix.m13(), m23 = matrix.m23(), m33 = matrix.m33();
float vx = x, vy = y, vz = z, vw = w;
return result.set(m00*vx + m01*vy + m02*vz + m03*vw,
m10*vx + m11*vy + m12*vz + m13*vw,
m20*vx + m21*vy + m22*vz + m23*vw,
m30*vx + m31*vy + m32*vz + m33*vw);
}
@Override
public String toString () {
return "[" + x + ", " + y + ", " + z + ", " + w + "]";