} //Матрица перехода из данной системы координат в глобальную public ReferenceFrame(Point o, Vector x, Vector y, Vector z) { O = o; XAxis = x; YAxis = y; ZAxis = z; TransMatrix = new double[3, 3]; MatrixHandler.SetRow(0, TransMatrix, new double[] { XAxis.X, YAxis.X, ZAxis.X }); MatrixHandler.SetRow(1, TransMatrix, new double[] { XAxis.Y, YAxis.Y, ZAxis.Y }); MatrixHandler.SetRow(2, TransMatrix, new double[] { XAxis.Z, YAxis.Z, ZAxis.Z }); }
public Point Translate(Point spot) { double[,] A = MatrixHandler.MatrixInverse(frame.TransMatrix); double[,] localO = new double[3, 1]; //Точка начала местной системы координат в глобальных координатах localO[0, 0] = frame.O.X; localO[1, 0] = frame.O.Y; localO[2, 0] = frame.O.Z; double[,] O = MatrixHandler.Multiply(MatrixHandler.Multiply(A, localO), -1); //Начало глобальных координат в местных координатах double[,] spotColumn = new double[3, 1]; // Столбец координат данной точки spotColumn[0, 0] = spot.X; spotColumn[1, 0] = spot.Y; spotColumn[2, 0] = spot.Z; double[,] localSpot = MatrixHandler.Sum(O, MatrixHandler.Multiply(A, spotColumn)); // Столбец координат данной точки в местных координатах return(new Point(localSpot[0, 0], localSpot[1, 0], localSpot[2, 0])); }