Skip to content
Browse files

More work on matrices.

Fixed some static fields in the math classes that weren't also readonly.
  • Loading branch information...
1 parent 84a03e9 commit 5438f941dca32683c097ab2deed87b5781b92688 @Robmaister Robmaister committed Jan 19, 2013
View
61 Source/OpenTK/Math/Matrix2.cs
@@ -44,6 +44,16 @@ public struct Matrix2 : IEquatable<Matrix2>
/// </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
@@ -281,6 +291,33 @@ public static Matrix2 CreateScale(float x, float y)
#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>
/// <param name="left">The left operand of the multiplication.</param>
@@ -486,6 +523,28 @@ public static Matrix2 Transpose(Matrix2 mat)
#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>
/// <param name="left">left-hand operand</param>
@@ -564,7 +623,7 @@ public static Matrix2 Transpose(Matrix2 mat)
#endregion
- #region Overloads
+ #region Overrides
#region public override string ToString()
View
14 Source/OpenTK/Math/Matrix2x3.cs
@@ -44,6 +44,11 @@ public struct Matrix2x3 : IEquatable<Matrix2x3>
/// </summary>
public Vector3 Row1;
+ /// <summary>
+ /// The zero matrix.
+ /// </summary>
+ public static Matrix2x3 Zero = new Matrix2x3(Vector3.Zero, Vector3.Zero);
+
#endregion
#region Constructors
@@ -164,6 +169,15 @@ public Vector2 Column2
#endregion
+ #region Instance
+ #endregion
+
+ #region Static
+
+
+
+ #endregion
+
#region Operators
/// <summary>
View
5 Source/OpenTK/Math/Matrix2x4.cs
@@ -34,6 +34,11 @@ public struct Matrix2x4 : IEquatable<Matrix2x4>
public Vector4 Row0;
public Vector4 Row1;
+ /// <summary>
+ /// The zero matrix.
+ /// </summary>
+ public static Matrix2x4 Zero = new Matrix2x4(Vector4.Zero, Vector4.Zero);
+
#endregion
#region Constructors
View
7 Source/OpenTK/Math/Matrix3.cs
@@ -54,7 +54,12 @@ public struct Matrix3 : IEquatable<Matrix3>
/// <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
View
72 Source/OpenTK/Math/Matrix3x2.cs
@@ -31,10 +31,26 @@ public struct Matrix3x2 : IEquatable<Matrix3x2>
{
#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
@@ -108,6 +124,62 @@ public Vector3 Column1
#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
View
62 Source/OpenTK/Math/Matrix3x4.cs
@@ -52,9 +52,9 @@ public struct Matrix3x4 : IEquatable<Matrix3x4>
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
@@ -355,11 +355,18 @@ public static void CreateRotationX(float angle, out Matrix3x4 result)
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>
@@ -384,11 +391,18 @@ public static void CreateRotationY(float angle, out Matrix3x4 result)
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>
@@ -413,11 +427,18 @@ public static void CreateRotationZ(float angle, out Matrix3x4 result)
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>
@@ -445,9 +466,17 @@ public static Matrix3x4 CreateRotationZ(float angle)
/// <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;
}
@@ -458,9 +487,17 @@ public static void CreateTranslation(float x, float y, float z, out Matrix3x4 re
/// <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;
}
@@ -523,10 +560,19 @@ public static Matrix3x4 CreateScale(Vector3 scale)
/// <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;
}
View
7 Source/OpenTK/Math/Matrix4.cs
@@ -59,7 +59,12 @@ public struct Matrix4 : IEquatable<Matrix4>
/// <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
View
5 Source/OpenTK/Math/Matrix4x2.cs
@@ -36,6 +36,11 @@ public struct Matrix4x2 : IEquatable<Matrix4x2>
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
View
62 Source/OpenTK/Math/Matrix4x3.cs
@@ -57,9 +57,9 @@ public struct Matrix4x3 : IEquatable<Matrix4x3>
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
@@ -358,11 +358,18 @@ public static void CreateRotationX(float angle, out Matrix4x3 result)
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>
@@ -387,11 +394,18 @@ public static void CreateRotationY(float angle, out Matrix4x3 result)
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>
@@ -416,11 +430,18 @@ public static void CreateRotationZ(float angle, out Matrix4x3 result)
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>
@@ -448,7 +469,15 @@ public static Matrix4x3 CreateRotationZ(float angle)
/// <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;
@@ -461,7 +490,15 @@ public static void CreateTranslation(float x, float y, float z, out Matrix4x3 re
/// <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;
@@ -526,10 +563,19 @@ public static Matrix4x3 CreateScale(Vector3 scale)
/// <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;
}
View
6 Source/OpenTK/Math/Vector2d.cs
@@ -44,17 +44,17 @@ public struct Vector2d : IEquatable<Vector2d>
/// <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.
View
10 Source/OpenTK/Math/Vector4.cs
@@ -60,27 +60,27 @@ public struct Vector4 : IEquatable<Vector4>
/// <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.
View
10 Source/OpenTK/Math/Vector4d.cs
@@ -58,27 +58,27 @@ public struct Vector4d : IEquatable<Vector4d>
/// <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.

0 comments on commit 5438f94

Please sign in to comment.
Something went wrong with that request. Please try again.