public void CreateFromColumnsTest() { Vector3 column0 = new Vector3(1, 4, 7); Vector3 column1 = new Vector3(2, 5, 8); Vector3 column2 = new Vector3(3, 6, 9); Matrix3x3 matrix = Matrix3x3.CreateFromColumns(column0, column1, column2); float[] array = matrix.ToArray(); for (int i = 0; i < 9; i++) { Assert.AreEqual(array[i], (float)(i + 1)); } Assert.AreEqual(column0, matrix.GetColumn(0)); Assert.AreEqual(column1, matrix.GetColumn(1)); Assert.AreEqual(column2, matrix.GetColumn(2)); Assert.ThrowsException <ArgumentException>(() => { matrix.GetColumn(-1); } ); Assert.ThrowsException <ArgumentException>(() => { matrix.GetColumn(3); } ); }
private Vector3 CalculateBarycentric(int x, int y, FilledTriangle triangle) { var d = new Vector3(x, y, 1); var w = triangle.A.Determinant; var wx = Matrix3x3.CreateFromColumns(d, triangle.VB, triangle.VC).Determinant; var wy = Matrix3x3.CreateFromColumns(triangle.VA, d, triangle.VC).Determinant; var wz = Matrix3x3.CreateFromColumns(triangle.VA, triangle.VB, d).Determinant; var xA = wx / w; var xB = wy / w; var xC = wz / w; return(new Vector3(xA, xB, xC)); }