/// <summary> /// Transforms the vector by the matrix. /// </summary> /// <param name="v">Vector2 to transform. Considered to be a column vector for purposes of multiplication.</param> /// <param name="matrix">Matrix to use as the transformation.</param> /// <param name="result">Column vector product of the transformation.</param> public static void Transform(ref Vector3 v, ref Matrix2x3 matrix, out Vector2 result) { #if !WINDOWS result = new Vector2(); #endif result.X = matrix.M11 * v.X + matrix.M12 * v.Y + matrix.M13 * v.Z; result.Y = matrix.M21 * v.X + matrix.M22 * v.Y + matrix.M23 * v.Z; }
/// <summary> /// Multiplies the two matrices. /// </summary> /// <param name="a">First matrix to multiply.</param> /// <param name="b">Second matrix to multiply.</param> /// <param name="result">Product of the multiplication.</param> public static void Multiply(ref Matrix2x3 a, ref Matrix3x2 b, out Matrix2x2 result) { result.M11 = a.M11 * b.M11 + a.M12 * b.M21 + a.M13 * b.M31; result.M12 = a.M11 * b.M12 + a.M12 * b.M22 + a.M13 * b.M32; result.M21 = a.M21 * b.M11 + a.M22 * b.M21 + a.M23 * b.M31; result.M22 = a.M21 * b.M12 + a.M22 * b.M22 + a.M23 * b.M32; }
public static void Validate(this Matrix2x3 m) { if (IsInvalid(m.M11) || IsInvalid(m.M12) || IsInvalid(m.M13) || IsInvalid(m.M21) || IsInvalid(m.M22) || IsInvalid(m.M23)) { throw new NotFiniteNumberException("Invalid value."); } }
/// <summary> /// Transforms the vector by the matrix. /// </summary> /// <param name="v">Vector2 to transform. Considered to be a row vector for purposes of multiplication.</param> /// <param name="matrix">Matrix to use as the transformation.</param> /// <param name="result">Row vector product of the transformation.</param> public static void Transform(ref Vector2 v, ref Matrix2x3 matrix, out Vector3 result) { #if !WINDOWS result = new Vector3(); #endif result.X = v.X * matrix.M11 + v.Y * matrix.M21; result.Y = v.X * matrix.M12 + v.Y * matrix.M22; result.Z = v.X * matrix.M13 + v.Y * matrix.M23; }
/// <summary> /// Computes the transposed matrix of a matrix. /// </summary> /// <param name="matrix">Matrix to transpose.</param> /// <param name="result">Transposed matrix.</param> public static void Transpose(ref Matrix3x2 matrix, out Matrix2x3 result) { result.M11 = matrix.M11; result.M12 = matrix.M21; result.M13 = matrix.M31; result.M21 = matrix.M12; result.M22 = matrix.M22; result.M23 = matrix.M32; }
/// <summary> /// Adds the two matrices together on a per-element basis. /// </summary> /// <param name="a">First matrix to add.</param> /// <param name="b">Second matrix to add.</param> /// <param name="result">Sum of the two matrices.</param> public static void Add(ref Matrix2x3 a, ref Matrix2x3 b, out Matrix2x3 result) { float m11 = a.M11 + b.M11; float m12 = a.M12 + b.M12; float m13 = a.M13 + b.M13; float m21 = a.M21 + b.M21; float m22 = a.M22 + b.M22; float m23 = a.M23 + b.M23; result.M11 = m11; result.M12 = m12; result.M13 = m13; result.M21 = m21; result.M22 = m22; result.M23 = m23; }
/// <summary> /// Negates every element in the matrix. /// </summary> /// <param name="matrix">Matrix to negate.</param> /// <param name="result">Negated matrix.</param> public static void Negate(ref Matrix2x3 matrix, out Matrix2x3 result) { float m11 = -matrix.M11; float m12 = -matrix.M12; float m13 = -matrix.M13; float m21 = -matrix.M21; float m22 = -matrix.M22; float m23 = -matrix.M23; result.M11 = m11; result.M12 = m12; result.M13 = m13; result.M21 = m21; result.M22 = m22; result.M23 = m23; }
/// <summary> /// Subtracts the two matrices from each other on a per-element basis. /// </summary> /// <param name="a">First matrix to subtract.</param> /// <param name="b">Second matrix to subtract.</param> /// <param name="result">Difference of the two matrices.</param> public static void Subtract(ref Matrix2x3 a, ref Matrix2x3 b, out Matrix2x3 result) { float m11 = a.M11 - b.M11; float m12 = a.M12 - b.M12; float m13 = a.M13 - b.M13; float m21 = a.M21 - b.M21; float m22 = a.M22 - b.M22; float m23 = a.M23 - b.M23; result.M11 = m11; result.M12 = m12; result.M13 = m13; result.M21 = m21; result.M22 = m22; result.M23 = m23; }
/// <summary> /// Negates every element in the matrix. /// </summary> /// <param name="matrix">Matrix to negate.</param> /// <param name="result">Negated matrix.</param> public static void Negate(ref Matrix2x3 matrix, out Matrix2x3 result) { Fix64 m11 = -matrix.M11; Fix64 m12 = -matrix.M12; Fix64 m13 = -matrix.M13; Fix64 m21 = -matrix.M21; Fix64 m22 = -matrix.M22; Fix64 m23 = -matrix.M23; result.M11 = m11; result.M12 = m12; result.M13 = m13; result.M21 = m21; result.M22 = m22; result.M23 = m23; }
/// <summary> /// Multiplies the two matrices. /// </summary> /// <param name="a">First matrix to multiply.</param> /// <param name="b">Second matrix to multiply.</param> /// <param name="result">Product of the multiplication.</param> public static void Multiply(ref Matrix2x3 a, ref Matrix3x3 b, out Matrix2x3 result) { float resultM11 = a.M11 * b.M11 + a.M12 * b.M21 + a.M13 * b.M31; float resultM12 = a.M11 * b.M12 + a.M12 * b.M22 + a.M13 * b.M32; float resultM13 = a.M11 * b.M13 + a.M12 * b.M23 + a.M13 * b.M33; float resultM21 = a.M21 * b.M11 + a.M22 * b.M21 + a.M23 * b.M31; float resultM22 = a.M21 * b.M12 + a.M22 * b.M22 + a.M23 * b.M32; float resultM23 = a.M21 * b.M13 + a.M22 * b.M23 + a.M23 * b.M33; result.M11 = resultM11; result.M12 = resultM12; result.M13 = resultM13; result.M21 = resultM21; result.M22 = resultM22; result.M23 = resultM23; }
internal void Setup(ConvexContactManifoldConstraint contactManifoldConstraint) { this.contactManifoldConstraint = contactManifoldConstraint; isActive = true; linearA = new Matrix2x3(); entityA = contactManifoldConstraint.EntityA; entityB = contactManifoldConstraint.EntityB; }