Как добавить элементы в матрицу после Dim NormalVectorRotationMatrix As New devDept.Geometry.Matrix - PullRequest
0 голосов
/ 04 июня 2019

Специально работает с DevDept.Geometry внутри приложения VB.Net.Я создал новую матрицу

Теперь я хочу заполнить матрицу значениями?Любая помощь приветствуется.

В Visual Studio vb.net после создания матричной переменной с именем NormalVectorRotationMatrix из класса devDept.Geometry я набираю "NormalVectorRotationMatrix.", и она показывает только 4 метода []Equals, []GetHashcode, []GetType, []ToString

Я ожидал увидеть список свойств / методов для определения размера матрицы и затем список элементов для заполнения значениями.Чего мне не хватает?

Dim NormalVectorRotationMatrix As New devDept.Geometry.Matrix

1 Ответ

0 голосов
/ 04 июня 2019

Если вы хотите создать матрицу глазных яблок, это довольно просто. При использовании вы используете его через класс 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)
...