AngleSharp by AngleSharp

<PackageReference Include="AngleSharp" Version="0.9.7" />

 TransformMatrix

public sealed class TransformMatrix : IEquatable<TransformMatrix>
Represents a transformation matrix value. http://dev.w3.org/csswg/css-transforms/#mathematical-description
using System; namespace AngleSharp.Css { public sealed class TransformMatrix : IEquatable<TransformMatrix> { public static readonly TransformMatrix Zero = new TransformMatrix(); public static readonly TransformMatrix One = new TransformMatrix(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0); private readonly float[,] _matrix; public float M11 => _matrix[0, 0]; public float M12 => _matrix[0, 1]; public float M13 => _matrix[0, 2]; public float M21 => _matrix[1, 0]; public float M22 => _matrix[1, 1]; public float M23 => _matrix[1, 2]; public float M31 => _matrix[2, 0]; public float M32 => _matrix[2, 1]; public float M33 => _matrix[2, 2]; public float Tx => _matrix[0, 3]; public float Ty => _matrix[1, 3]; public float Tz => _matrix[2, 3]; private TransformMatrix() { _matrix = new float[4, 4]; } public TransformMatrix(float[] values) : this() { if (values == null) throw new ArgumentNullException("values"); if (values.Length != 16) throw new ArgumentException("You need to provide 16 (4x4) values.", "values"); int i = 0; int num = 0; for (; i < 4; i++) { int num2 = 0; while (num2 < 4) { float[,] matrix = _matrix; int num3 = num2; int num4 = i; float num5 = values[num]; matrix[num3, num4] = num5; num2++; num++; } } } public TransformMatrix(float m11, float m12, float m13, float m21, float m22, float m23, float m31, float m32, float m33, float tx, float ty, float tz, float px, float py, float pz) : this() { _matrix[0, 0] = m11; _matrix[0, 1] = m12; _matrix[0, 2] = m13; _matrix[1, 0] = m21; _matrix[1, 1] = m22; _matrix[1, 2] = m23; _matrix[2, 0] = m31; _matrix[2, 1] = m32; _matrix[2, 2] = m33; _matrix[0, 3] = tx; _matrix[1, 3] = ty; _matrix[2, 3] = tz; _matrix[3, 0] = px; _matrix[3, 1] = py; _matrix[3, 2] = pz; _matrix[3, 3] = 1; } public bool Equals(TransformMatrix other) { float[,] matrix = _matrix; float[,] matrix2 = other._matrix; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (matrix[i, j] != matrix2[i, j]) return false; } } return true; } public override bool Equals(object obj) { TransformMatrix transformMatrix = obj as TransformMatrix; if (transformMatrix == null) return false; return Equals(transformMatrix); } public override int GetHashCode() { float num = 0; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { num += _matrix[i, j] * (float)(4 * i + j); } } return (int)num; } } }