Как добавить элементы в матрицу после Dim NormalVectorRotationMatrix As New devDept.Geometry.Matrix

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

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

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

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

Dim NormalVectorRotationMatrix As New devDept.Geometry.Matrix

person Phil Bugg    schedule 04.06.2019    source источник


Ответы (1)


Если вы хотите создать матрицу обзора, это довольно просто. При использовании вы используете его через класс Transformation, поэтому вы можете напрямую пропустить объект Matrix и использовать только преобразования.

Вас может запутать тот факт, что класс Matrix в кадре не является объектом. На самом деле это вспомогательный класс, а сами матрицы все время представляют собой просто двойные массивы.

Вот пример двух разных типов матриц, которые вы можете использовать, и то, как они работают.

// 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());

Это должно охватывать практически все способы работы с матрицей в Eyeshot и .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)
person Franck    schedule 04.06.2019
comment
Спасибо Франк за ваш ценный вклад. Я попробую некоторые идеи и посмотрю, как они работают. Я действительно просто хочу преобразовать вектор 0,0,1 в новый вектор нормали на основе Yaw, Pitch, Roll из программы робота, чтобы я мог рисовать векторы нормали в каждой точке программы робота. Я уже обнаружил уравнения для создания элементов матрицы преобразования, поэтому я буду использовать ваш метод, описанный выше, или, как вы сохраните, создам свой собственный. Еще раз спасибо. Ваше здоровье! - person Phil Bugg; 04.06.2019
comment
@PhilBugg из этого комментария см. последнюю часть моего ответа, где я обновил только для векторного вращения. - person Franck; 04.06.2019
comment
Ваше первое мнение было правильным, что обычно и бывает. Спасибо, Франк! - person Phil Bugg; 05.06.2019
comment
после создания матрицы и вектора я использовал transformby TestVector.TransformBy(NormalVectorRotationMatrix) - person Phil Bugg; 05.06.2019