/// <summary> /// multyply this matrix by the given <see cref="T:Orts.Formats.Msts.matrix"/> /// </summary> /// <param name="m"></param> /// <returns></returns> /// <remarks>Also sums the offset vector</remarks> public matrix Mul(matrix m) { matrix ret; if (isUnity()) { ret = m; } else if (isUnity(m)) { ret = mat; } else { ret = new matrix(); for (int j = 0; j < 3; j++) { for (int k = 0; k < 3; k++) { ret[j, k] = 0; for (int n = 0; n < 3; n++) { ret[j, k] += mat[j, n] * m[n, k]; } } } } PointEx pe = new PointEx(new point(m.DX, m.DY, m.DZ)); point p = pe.Sum(new point(mat.DX, mat.DY, mat.DZ)); ret.DX = p.X; ret.DY = p.Y; ret.DZ = p.Z; return(ret); }
/// <summary> /// Multiply the given <see cref="T:Orts.Formats.Msts.point"/> by this matrix /// </summary> /// <param name="p"></param> /// <returns></returns> /// <remarks>Also sums the offset vector</remarks> public point Mul(point p) { point ret; if (isUnity()) { ret = p; } else { ret = new point(p.X * mat.AX + p.Y * mat.BX + p.Z * mat.CX, p.X * mat.AY + p.Y * mat.BY + p.Z * mat.CY, p.X * mat.AZ + p.Y * mat.BZ + p.Z * mat.CZ); } PointEx pe = new PointEx(ret); return(pe.Sum(new point(mat.DX, mat.DY, mat.DZ))); }