Если вы хотите создать матрицу глазных яблок, это довольно просто. При использовании вы используете его через класс Transformation
, так что вы можете пропустить объект Matrix
напрямую и использовать только преобразования.
Вы можете смешаться с тем фактом, что класс Matrix
в поле зрения не является объектом. На самом деле это вспомогательный класс, а сама матрица - это просто двойные массивы.
Вот пример 2 разных типов матриц, которые вы можете использовать, и как это работает.
// create 2 transformations
var rotation = new devDept.Geometry.Rotation(radian, rotationVector);
var translate = new devDept.Geometry.Translation(x, y, z);
// just a simple object for demonstration purpose
Solid someSolid = Solid.CreateBox(10, 10, 10);
// rotate the solid
someSolid.TransformBy(rotation);
// or translate
someSolid.TransformBy(translate);
// or create a custom transformation (you see the point)
var transformation = rotation * translation * rotation
// apply that custom transformation
someSolid.TransformBy(transformation);
// or even better just create the matrix from scratch
var matrix4x4 = new double[16] {... define 4x4 matrix here ... };
// the transformation object takes a 4x4 double array matrix too
var matrixTransformation = new devDept.Geometry.Transformation(matrix4x4);
Если вы работали с System.Media.Media3D.Matrix3D
или .net, то для правильного преобразования этого объекта в double[]
, который будет соответствовать формату Eyeshot
, используйте следующий статический метод
public static double[] ToEyeshotMatrix(this Matrix3D matrix)
{
// this is to format a windows matrix to the proper format eyeshot uses
return new[]
{
matrix.M11,matrix.M21,matrix.M31,matrix.OffsetX,
matrix.M12,matrix.M22,matrix.M32,matrix.OffsetY,
matrix.M13,matrix.M23,matrix.M33,matrix.OffsetZ,
matrix.M14,matrix.M24,matrix.M34,matrix.M44
};
}
// you can call it like so
var someMatrix = System.Media.Media3D.Matrix3D.Identity;
// apply normal .net transform you would do then
var eyeshotMatrix = new devDept.Geometry.Transformation(someMatrix.ToEyeshotMatrix());
Это должно охватывать практически все способы работы с матрицей в зоне видимости и .net
В качестве обновления к вашему комментарию о конкретных манипуляциях с вектором вам не нужно смотреть на глаза. Он есть в пространстве имен System.Windows.Media.Media3D
, к которому нужно добавить ссылку на PresentationCore
сборку
Вы делаете что-то вроде этого
// create some vector to change
var v = new System.Windows.Media.Media3D.Vector3D(1, 0, 0);
// create a matrix to transform our vector
var m = System.Windows.Media.Media3D.Matrix3D.Identity;
// rotate the matrix in Z 90 degree
m.Rotate(new System.Windows.Media.Media3D.Vector3D(0, 0, 1), 90d);
// apply the matrix to the vector
var resultVector = m.Transform(v);
// resultVector is now (0, 1, 0)