Fixed some static fields in the math classes that weren't also readonly.
/// </summary>
public Vector2 Row1;
+ /// <summary>
+ /// The identity matrix.
+ /// </summary>
+ public static Matrix2 Identity = new Matrix2(Vector2.UnitX, Vector2.UnitY);
+
+ /// <summary>
+ /// The zero matrix.
+ /// </summary>
+ public static readonly Matrix2 Zero = new Matrix2(Vector2.Zero, Vector2.Zero);
+
#endregion
#region Constructors
#region Multiply Functions
+ /// <summary>
+ /// Multiplies and instance by a scalar.
+ /// </summary>
+ /// <param name="left">The left operand of the multiplication.</param>
+ /// <param name="right">The right operand of the multiplication.</param>
+ /// <param name="result">A new instance that is the result of the multiplication.</param>
+ public static void Mult(ref Matrix2 left, float right, out Matrix2 result)
+ {
+ result.Row0.X = left.Row0.X * right;
+ result.Row0.Y = left.Row0.Y * right;
+ result.Row1.X = left.Row1.X * right;
+ result.Row1.Y = left.Row1.Y * right;
+ }
+
+ /// <summary>
+ /// Multiplies and instance by a scalar.
+ /// </summary>
+ /// <param name="left">The left operand of the multiplication.</param>
+ /// <param name="right">The right operand of the multiplication.</param>
+ /// <returns>A new instance that is the result of the multiplication.</returns>
+ public static Matrix2 Mult(Matrix2 left, float right)
+ {
+ Matrix2 result;
+ Mult(ref left, right, out result);
+ return result;
+ }
+
/// <summary>
/// Multiplies two instances.
/// </summary>
#region Operators
+ /// <summary>
+ /// Scalar multiplication.
+ /// </summary>
+ /// <param name="left">left-hand operand</param>
+ /// <param name="right">right-hand operand</param>
+ /// <returns>A new Matrix2 which holds the result of the multiplication</returns>
+ public static Matrix2 operator *(float left, Matrix2 right)
+ {
+ return Matrix2.Mult(right, left);
+ }
+
+ /// <summary>
+ /// Scalar multiplication.
+ /// </summary>
+ /// <param name="left">left-hand operand</param>
+ /// <param name="right">right-hand operand</param>
+ /// <returns>A new Matrix2 which holds the result of the multiplication</returns>
+ public static Matrix2 operator *(Matrix2 left, float right)
+ {
+ return Matrix2.Mult(left, right);
+ }
+
/// <summary>
/// Matrix multiplication
/// </summary>
#endregion
- #region Overloads
+ #region Overrides
#region public override string ToString()
/// </summary>
public Vector3 Row1;
+ /// <summary>
+ /// The zero matrix.
+ /// </summary>
+ public static Matrix2x3 Zero = new Matrix2x3(Vector3.Zero, Vector3.Zero);
+
#endregion
#region Constructors
}
}
+ #endregion
+
+ #region Instance
+ #endregion
+
+ #region Static
+
+
+
#endregion
#region Operators
public Vector4 Row0;
public Vector4 Row1;
+ /// <summary>
+ /// The zero matrix.
+ /// </summary>
+ public static Matrix2x4 Zero = new Matrix2x4(Vector4.Zero, Vector4.Zero);
+
#endregion
#region Constructors
/// <summary>
/// The identity matrix.
/// </summary>
- public static Matrix3 Identity = new Matrix3(Vector3.UnitX, Vector3.UnitY, Vector3.UnitZ);
+ public static readonly Matrix3 Identity = new Matrix3(Vector3.UnitX, Vector3.UnitY, Vector3.UnitZ);
+
+ /// <summary>
+ /// The zero matrix.
+ /// </summary>
+ public static readonly Matrix3 Zero = new Matrix3(Vector3.Zero, Vector3.Zero, Vector3.Zero);
#endregion
{
#region Fields
+ /// <summary>
+ /// Top row of the matrix.
+ /// </summary>
public Vector2 Row0;
+
+ /// <summary>
+ /// Second row of the matrix.
+ /// </summary>
public Vector2 Row1;
+
+ /// <summary>
+ /// Bottom row of the matrix.
+ /// </summary>
public Vector2 Row2;
+ /// <summary>
+ /// The zero matrix.
+ /// </summary>
+ public static Matrix3x2 Zero = new Matrix3x2(Vector2.Zero, Vector2.Zero, Vector2.Zero);
+
#endregion
#region Constructors
#endregion
+ #region Instance
+ #endregion
+
+ #region Static
+ #endregion
+
+ #region Operators
+ #endregion
+
+ #region Overrides
+
+ #region public override string ToString()
+
+ /// <summary>
+ /// Returns a System.String that represents the current Matrix3d.
+ /// </summary>
+ /// <returns>The string representation of the matrix.</returns>
+ public override string ToString()
+ {
+ return String.Format("{0}\n{1}\n{2}", Row0, Row1, Row2);
+ }
+
+ #endregion
+
+ #region public override int GetHashCode()
+
+ /// <summary>
+ /// Returns the hashcode for this instance.
+ /// </summary>
+ /// <returns>A System.Int32 containing the unique hashcode for this instance.</returns>
+ public override int GetHashCode()
+ {
+ return Row0.GetHashCode() ^ Row1.GetHashCode() ^ Row2.GetHashCode();
+ }
+
+ #endregion
+
+ #region public override bool Equals(object obj)
+
+ /// <summary>
+ /// Indicates whether this instance and a specified object are equal.
+ /// </summary>
+ /// <param name="obj">The object to compare to.</param>
+ /// <returns>True if the instances are equal; false otherwise.</returns>
+ public override bool Equals(object obj)
+ {
+ if (!(obj is Matrix3x2))
+ return false;
+
+ return this.Equals((Matrix3x2)obj);
+ }
+
+ #endregion
+
+ #endregion
+
#endregion
#region IEquatable<Matrix3x2> Members
public Vector4 Row2;
/// <summary>
- /// The identity matrix
+ /// The zero matrix
/// </summary>
- public static Matrix3x4 Identity = new Matrix3x4(Vector4.UnitX, Vector4.UnitY, Vector4.UnitZ);
+ public static Matrix3x4 Zero = new Matrix3x4(Vector4.Zero, Vector4.Zero, Vector4.Zero);
#endregion
float cos = (float)System.Math.Cos(angle);
float sin = (float)System.Math.Sin(angle);
- result = Identity;
+ result.Row0.X = 1;
+ result.Row0.Y = 0;
+ result.Row0.Z = 0;
+ result.Row0.W = 0;
+ result.Row1.X = 0;
result.Row1.Y = cos;
result.Row1.Z = sin;
+ result.Row1.W = 0;
+ result.Row2.X = 0;
result.Row2.Y = -sin;
result.Row2.Z = cos;
+ result.Row2.W = 0;
}
/// <summary>
float cos = (float)System.Math.Cos(angle);
float sin = (float)System.Math.Sin(angle);
- result = Identity;
result.Row0.X = cos;
+ result.Row0.Y = 0;
result.Row0.Z = -sin;
+ result.Row0.W = 0;
+ result.Row1.X = 0;
+ result.Row1.Y = 1;
+ result.Row1.Z = 0;
+ result.Row1.W = 0;
result.Row2.X = sin;
+ result.Row2.Y = 0;
result.Row2.Z = cos;
+ result.Row2.W = 0;
}
/// <summary>
float cos = (float)System.Math.Cos(angle);
float sin = (float)System.Math.Sin(angle);
- result = Identity;
result.Row0.X = cos;
result.Row0.Y = sin;
+ result.Row0.Z = 0;
+ result.Row0.W = 0;
result.Row1.X = -sin;
result.Row1.Y = cos;
+ result.Row1.Z = 0;
+ result.Row1.W = 0;
+ result.Row2.X = 0;
+ result.Row2.Y = 0;
+ result.Row2.Z = 1;
+ result.Row2.W = 0;
}
/// <summary>
/// <param name="result">The resulting Matrix4 instance.</param>
public static void CreateTranslation(float x, float y, float z, out Matrix3x4 result)
{
- result = Identity;
+ result.Row0.X = 1;
+ result.Row0.Y = 0;
+ result.Row0.Z = 0;
result.Row0.W = x;
+ result.Row1.X = 0;
+ result.Row1.Y = 1;
+ result.Row1.Z = 0;
result.Row1.W = y;
+ result.Row2.X = 0;
+ result.Row2.Y = 0;
+ result.Row2.Z = 1;
result.Row2.W = z;
}
/// <param name="result">The resulting Matrix4 instance.</param>
public static void CreateTranslation(ref Vector3 vector, out Matrix3x4 result)
{
- result = Identity;
+ result.Row0.X = 1;
+ result.Row0.Y = 0;
+ result.Row0.Z = 0;
result.Row0.W = vector.X;
+ result.Row1.X = 0;
+ result.Row1.Y = 1;
+ result.Row1.Z = 0;
result.Row1.W = vector.Y;
+ result.Row2.X = 0;
+ result.Row2.Y = 0;
+ result.Row2.Z = 1;
result.Row2.W = vector.Z;
}
/// <returns>A scaling matrix</returns>
public static Matrix3x4 CreateScale(float x, float y, float z)
{
- Matrix3x4 result = Identity;
+ Matrix3x4 result;
result.Row0.X = x;
+ result.Row0.Y = 0;
+ result.Row0.Z = 0;
+ result.Row0.W = 0;
+ result.Row1.X = 0;
result.Row1.Y = y;
+ result.Row1.Z = 0;
+ result.Row1.W = 0;
+ result.Row2.X = 0;
+ result.Row2.Y = 0;
result.Row2.Z = z;
+ result.Row2.W = 0;
return result;
}
/// <summary>
/// The identity matrix.
/// </summary>
- public static Matrix4 Identity = new Matrix4(Vector4.UnitX, Vector4.UnitY, Vector4.UnitZ, Vector4.UnitW);
+ public static readonly Matrix4 Identity = new Matrix4(Vector4.UnitX, Vector4.UnitY, Vector4.UnitZ, Vector4.UnitW);
+
+ /// <summary>
+ /// The zero matrix.
+ /// </summary>
+ public static readonly Matrix4 Zero = new Matrix4(Vector4.Zero, Vector4.Zero, Vector4.Zero, Vector4.Zero);
#endregion
public Vector2 Row2;
public Vector2 Row3;
+ /// <summary>
+ /// The zero matrix.
+ /// </summary>
+ public static Matrix4x2 Zero = new Matrix4x2(Vector2.Zero, Vector2.Zero, Vector2.Zero, Vector2.Zero);
+
#endregion
#region Constructors
public Vector3 Row3;
/// <summary>
- /// The identity matrix
+ /// The zero matrix
/// </summary>
- public static Matrix4x3 Identity = new Matrix4x3(Vector3.UnitX, Vector3.UnitY, Vector3.UnitZ, Vector3.Zero);
+ public static Matrix4x3 Zero = new Matrix4x3(Vector3.Zero, Vector3.Zero, Vector3.Zero, Vector3.Zero);
#endregion
float cos = (float)System.Math.Cos(angle);
float sin = (float)System.Math.Sin(angle);
- result = Identity;
+ result.Row0.X = 1;
+ result.Row0.Y = 0;
+ result.Row0.Z = 0;
+ result.Row1.X = 0;
result.Row1.Y = cos;
result.Row1.Z = sin;
+ result.Row2.X = 0;
result.Row2.Y = -sin;
result.Row2.Z = cos;
+ result.Row3.X = 0;
+ result.Row3.Y = 0;
+ result.Row3.Z = 0;
}
/// <summary>
float cos = (float)System.Math.Cos(angle);
float sin = (float)System.Math.Sin(angle);
- result = Identity;
result.Row0.X = cos;
+ result.Row0.Y = 0;
result.Row0.Z = -sin;
+ result.Row1.X = 0;
+ result.Row1.Y = 1;
+ result.Row1.Z = 0;
result.Row2.X = sin;
+ result.Row2.Y = 0;
result.Row2.Z = cos;
+ result.Row3.X = 0;
+ result.Row3.Y = 0;
+ result.Row3.Z = 0;
}
/// <summary>
float cos = (float)System.Math.Cos(angle);
float sin = (float)System.Math.Sin(angle);
- result = Identity;
result.Row0.X = cos;
result.Row0.Y = sin;
+ result.Row0.Z = 0;
result.Row1.X = -sin;
result.Row1.Y = cos;
+ result.Row1.Z = 0;
+ result.Row2.X = 0;
+ result.Row2.Y = 0;
+ result.Row2.Z = 1;
+ result.Row3.X = 0;
+ result.Row3.Y = 0;
+ result.Row3.Z = 0;
}
/// <summary>
/// <param name="result">The resulting Matrix4 instance.</param>
public static void CreateTranslation(float x, float y, float z, out Matrix4x3 result)
{
- result = Identity;
+ result.Row0.X = 1;
+ result.Row0.Y = 0;
+ result.Row0.Z = 0;
+ result.Row1.X = 0;
+ result.Row1.Y = 1;
+ result.Row1.Z = 0;
+ result.Row2.X = 0;
+ result.Row2.Y = 0;
+ result.Row2.Z = 1;
result.Row3.X = x;
result.Row3.Y = y;
result.Row3.Z = z;
/// <param name="result">The resulting Matrix4 instance.</param>
public static void CreateTranslation(ref Vector3 vector, out Matrix4x3 result)
{
- result = Identity;
+ result.Row0.X = 1;
+ result.Row0.Y = 0;
+ result.Row0.Z = 0;
+ result.Row1.X = 0;
+ result.Row1.Y = 1;
+ result.Row1.Z = 0;
+ result.Row2.X = 0;
+ result.Row2.Y = 0;
+ result.Row2.Z = 1;
result.Row3.X = vector.X;
result.Row3.Y = vector.Y;
result.Row3.Z = vector.Z;
/// <returns>A scaling matrix</returns>
public static Matrix4x3 CreateScale(float x, float y, float z)
{
- Matrix4x3 result = Identity;
+ Matrix4x3 result;
result.Row0.X = x;
+ result.Row0.Y = 0;
+ result.Row0.Z = 0;
+ result.Row1.X = 0;
result.Row1.Y = y;
+ result.Row1.Z = 0;
+ result.Row2.X = 0;
+ result.Row2.Y = 0;
result.Row2.Z = z;
+ result.Row3.X = 0;
+ result.Row3.Y = 0;
+ result.Row3.Z = 0;
return result;
}
/// <summary>
/// Defines a unit-length Vector2d that points towards the X-axis.
/// </summary>
- public static Vector2d UnitX = new Vector2d(1, 0);
+ public static readonly Vector2d UnitX = new Vector2d(1, 0);
/// <summary>
/// Defines a unit-length Vector2d that points towards the Y-axis.
/// </summary>
- public static Vector2d UnitY = new Vector2d(0, 1);
+ public static readonly Vector2d UnitY = new Vector2d(0, 1);
/// <summary>
/// Defines a zero-length Vector2d.
/// </summary>
- public static Vector2d Zero = new Vector2d(0, 0);
+ public static readonly Vector2d Zero = new Vector2d(0, 0);
/// <summary>
/// Defines an instance with all components set to 1.
/// <summary>
/// Defines a unit-length Vector4 that points towards the X-axis.
/// </summary>
- public static Vector4 UnitX = new Vector4(1, 0, 0, 0);
+ public static readonly Vector4 UnitX = new Vector4(1, 0, 0, 0);
/// <summary>
/// Defines a unit-length Vector4 that points towards the Y-axis.
/// </summary>
- public static Vector4 UnitY = new Vector4(0, 1, 0, 0);
+ public static readonly Vector4 UnitY = new Vector4(0, 1, 0, 0);
/// <summary>
/// Defines a unit-length Vector4 that points towards the Z-axis.
/// </summary>
- public static Vector4 UnitZ = new Vector4(0, 0, 1, 0);
+ public static readonly Vector4 UnitZ = new Vector4(0, 0, 1, 0);
/// <summary>
/// Defines a unit-length Vector4 that points towards the W-axis.
/// </summary>
- public static Vector4 UnitW = new Vector4(0, 0, 0, 1);
+ public static readonly Vector4 UnitW = new Vector4(0, 0, 0, 1);
/// <summary>
/// Defines a zero-length Vector4.
/// </summary>
- public static Vector4 Zero = new Vector4(0, 0, 0, 0);
+ public static readonly Vector4 Zero = new Vector4(0, 0, 0, 0);
/// <summary>
/// Defines an instance with all components set to 1.
/// <summary>
/// Defines a unit-length Vector4d that points towards the X-axis.
/// </summary>
- public static Vector4d UnitX = new Vector4d(1, 0, 0, 0);
+ public static readonly Vector4d UnitX = new Vector4d(1, 0, 0, 0);
/// <summary>
/// Defines a unit-length Vector4d that points towards the Y-axis.
/// </summary>
- public static Vector4d UnitY = new Vector4d(0, 1, 0, 0);
+ public static readonly Vector4d UnitY = new Vector4d(0, 1, 0, 0);
/// <summary>
/// Defines a unit-length Vector4d that points towards the Z-axis.
/// </summary>
- public static Vector4d UnitZ = new Vector4d(0, 0, 1, 0);
+ public static readonly Vector4d UnitZ = new Vector4d(0, 0, 1, 0);
/// <summary>
/// Defines a unit-length Vector4d that points towards the W-axis.
/// </summary>
- public static Vector4d UnitW = new Vector4d(0, 0, 0, 1);
+ public static readonly Vector4d UnitW = new Vector4d(0, 0, 0, 1);
/// <summary>
/// Defines a zero-length Vector4d.
/// </summary>
- public static Vector4d Zero = new Vector4d(0, 0, 0, 0);
+ public static readonly Vector4d Zero = new Vector4d(0, 0, 0, 0);
/// <summary>
/// Defines an instance with all components set to 1.