//public idVec6 this[int index] { get { return mat[index]; } } public static idMat6 operator *(idMat6 a, idMat6 b) { idMat6 dst = new idMat6(); //float[] m1Ptr = this; //float[] m2Ptr = a; //float[] dstPtr = null; for (int i = 0; i < 6; i++) { for (int j = 0; j < 6; j++) { // *dstPtr = m1Ptr[0] * m2Ptr[ 0 * 6 + j ] // + m1Ptr[1] * m2Ptr[ 1 * 6 + j ] // + m1Ptr[2] * m2Ptr[ 2 * 6 + j ] // + m1Ptr[3] * m2Ptr[ 3 * 6 + j ] // + m1Ptr[4] * m2Ptr[ 4 * 6 + j ] // + m1Ptr[5] * m2Ptr[ 5 * 6 + j ]; // dstPtr++; } //m1Ptr += 6; } return dst; }
public idMat6 Transpose() { idMat6 transpose = new idMat6(); for (int i = 0; i < 6; i++) for (int j = 0; j < 6; j++) transpose[i][j] = mat[j][i]; return transpose; }
public bool Compare(ref idMat6 a, float epsilon) { float[] ptr1 = mat; float[] ptr2 = a.mat; for (int i = 0; i < 6 * 6; i++) if (idMath.Fabs(ptr1[i] - ptr2[i]) > epsilon) return false; return true; }
public bool Compare(ref idMat6 a) { float[] ptr1 = mat; float[] ptr2 = a.mat; for (int i = 0; i < 6 * 6; i++) if (ptr1[i] != ptr2[i]) return false; return true; }
public idMat6 opSub(ref idMat6 a) { idVec6[] a_mat = a.mat; mat[0].p[0] -= a_mat[0].p[0]; mat[0].p[1] -= a_mat[0].p[1]; mat[0].p[2] -= a_mat[0].p[2]; mat[0].p[3] -= a_mat[0].p[3]; mat[0].p[4] -= a_mat[0].p[4]; mat[0].p[5] -= a_mat[0].p[5]; mat[1].p[0] -= a_mat[1].p[0]; mat[1].p[1] -= a_mat[1].p[1]; mat[1].p[2] -= a_mat[1].p[2]; mat[1].p[3] -= a_mat[1].p[3]; mat[1].p[4] -= a_mat[1].p[4]; mat[1].p[5] -= a_mat[1].p[5]; mat[2].p[0] -= a_mat[2].p[0]; mat[2].p[1] -= a_mat[2].p[1]; mat[2].p[2] -= a_mat[2].p[2]; mat[2].p[3] -= a_mat[2].p[3]; mat[2].p[4] -= a_mat[2].p[4]; mat[2].p[5] -= a_mat[2].p[5]; mat[3].p[0] -= a_mat[3].p[0]; mat[3].p[1] -= a_mat[3].p[1]; mat[3].p[2] -= a_mat[3].p[2]; mat[3].p[3] -= a_mat[3].p[3]; mat[3].p[4] -= a_mat[3].p[4]; mat[3].p[5] -= a_mat[3].p[5]; mat[4].p[0] -= a_mat[4].p[0]; mat[4].p[1] -= a_mat[4].p[1]; mat[4].p[2] -= a_mat[4].p[2]; mat[4].p[3] -= a_mat[4].p[3]; mat[4].p[4] -= a_mat[4].p[4]; mat[4].p[5] -= a_mat[4].p[5]; mat[5].p[0] -= a_mat[5].p[0]; mat[5].p[1] -= a_mat[5].p[1]; mat[5].p[2] -= a_mat[5].p[2]; mat[5].p[3] -= a_mat[5].p[3]; mat[5].p[4] -= a_mat[5].p[4]; mat[5].p[5] -= a_mat[5].p[5]; return this; }
public idMat6 opAdd(ref idMat6 a) { idVec6[] a_mat = a.mat; mat[0].p[0] += a_mat[0].p[0]; mat[0].p[1] += a_mat[0].p[1]; mat[0].p[2] += a_mat[0].p[2]; mat[0].p[3] += a_mat[0].p[3]; mat[0].p[4] += a_mat[0].p[4]; mat[0].p[5] += a_mat[0].p[5]; mat[1].p[0] += a_mat[1].p[0]; mat[1].p[1] += a_mat[1].p[1]; mat[1].p[2] += a_mat[1].p[2]; mat[1].p[3] += a_mat[1].p[3]; mat[1].p[4] += a_mat[1].p[4]; mat[1].p[5] += a_mat[1].p[5]; mat[2].p[0] += a_mat[2].p[0]; mat[2].p[1] += a_mat[2].p[1]; mat[2].p[2] += a_mat[2].p[2]; mat[2].p[3] += a_mat[2].p[3]; mat[2].p[4] += a_mat[2].p[4]; mat[2].p[5] += a_mat[2].p[5]; mat[3].p[0] += a_mat[3].p[0]; mat[3].p[1] += a_mat[3].p[1]; mat[3].p[2] += a_mat[3].p[2]; mat[3].p[3] += a_mat[3].p[3]; mat[3].p[4] += a_mat[3].p[4]; mat[3].p[5] += a_mat[3].p[5]; mat[4].p[0] += a_mat[4].p[0]; mat[4].p[1] += a_mat[4].p[1]; mat[4].p[2] += a_mat[4].p[2]; mat[4].p[3] += a_mat[4].p[3]; mat[4].p[4] += a_mat[4].p[4]; mat[4].p[5] += a_mat[4].p[5]; mat[5].p[0] += a_mat[5].p[0]; mat[5].p[1] += a_mat[5].p[1]; mat[5].p[2] += a_mat[5].p[2]; mat[5].p[3] += a_mat[5].p[3]; mat[5].p[4] += a_mat[5].p[4]; mat[5].p[5] += a_mat[5].p[5]; return this; }
public idMat6 opMul(ref idMat6 a) { this = this * a; return this; }