public void CalculateTriangleMatrices(int index) { var A = srcMesh.matricesForTriangle[index].A; var C = srcMesh.matricesForTriangle[index].C; var inverseMat = srcMesh.InverseVertexMatrices[index]; var coefv1 = TriangleUtils.CalculateCoefficientV1(srcMesh.InverseVertexMatrices[index]); float coef = 0; int v1 = index * 3 + 0; int v2 = index * 3 + 1; int v3 = index * 3 + 2; for (int i = 0, row = 0; i < 3; i++) { for (int j = 0; j < 3; j++, row++) { C[row] = 0; /* coefficient of v1: -(a[0,i] + a[1,i] + a[2,i]) */ coef = coefv1[j]; if (!vertexConstraintList.ContainsKey(srcMesh.TriangleList[v1])) { A[row, 0] = coef; } else { var tgtVertIdx = vertexConstraintList[srcMesh.TriangleList[v1]]; C[row] -= coef * tgtMesh.VertexList[tgtVertIdx][i]; } /* coefficient of v2: a[0,i]*/ coef = inverseMat[0, j]; if (!vertexConstraintList.ContainsKey(srcMesh.TriangleList[v2])) { A[row, 1] = coef; } else { var tgtVertIdx = vertexConstraintList[srcMesh.TriangleList[v2]]; C[row] -= coef * tgtMesh.VertexList[tgtVertIdx][i]; } /* coefficient of v3: a[1,i] */ coef = inverseMat[1, j]; if (!vertexConstraintList.ContainsKey(srcMesh.TriangleList[v3])) { A[row, 2] = coef; } else { var tgtVertIdx = vertexConstraintList[srcMesh.TriangleList[v3]]; C[row] -= coef * tgtMesh.VertexList[tgtVertIdx][i]; } /* coefficient of v4: a[2,i] */ A[row, 3] = inverseMat[2, j]; } } }