Найдите угол поворота куба

У меня есть набор точек (вершины X, Y, Z), которые я могу прочитать из файла STL в MATLAB. Это точки, из которых состоит куб.

Я хочу знать угол, на который этот куб может быть повернут относительно оси X/Y/Z.

Может ли кто-нибудь дать какие-либо указания, как это можно сделать?

Спасибо


person Rusheel Jain    schedule 17.01.2015    source источник
comment
Это хороший вопрос, но больше математический, чем программный.   -  person Rashid    schedule 17.01.2015
comment
Я думаю, что с помощью min и max в разных измерениях вы могли бы обнаружить некоторые углы куба. Затем из этого выработайте боковую линию и, наконец, получите угол этих линий с нормальным референтным X,Y,Z ... просто предположение, возможно, есть более простое решение.   -  person Hoki    schedule 17.01.2015


Ответы (2)


Чтобы узнать, как куб вращается относительно оси X/Y/Z, вы должны сначала построить локальную систему координат для куба, что можно легко сделать в следующих шагах, предполагая, что вы знаете все 8 угловых точек куба и как они связаны друг с другом, чтобы сформировать куб.

1) Выберите любую точку из 8 точек, обозначьте ее как P0.

2) Должны быть еще 3 точки, которые подключены к P0. Обозначим эти 3 точки как P1, P2 и P3.

3) Создайте векторы от P0 до P1, P2 и P3 и объедините эти 3 вектора. Эти 3 единичных вектора, обозначенные как v1, v2 и v3, должны быть ортогональны друг другу и могут использоваться в качестве локальной системы координат для куба. Вы можете назначить v1, v2 и v3 в качестве осей x, y и z для локальной системы координат, но вам нужно убедиться, что они соответствуют правилу правой руки.

4) Теперь, когда у вас есть локальная система координат, вы можете легко вычислить углы относительно исходной системы координат.

person fang    schedule 17.01.2015

Сначала вам нужно присвоить кубу систему координат. Вы можете сделать это, выбрав точку на кубе и нарисовав ось на каждом из трех ребер, которые с ней соединены (это будут направления к трем ближайшим точкам). Куб можно расположить по осям XYZ несколькими способами, поэтому выбор точки произвольный. Вы можете найти ближайшую точку к началу координат или просто выбрать ее наугад.

Итак, теперь у вас есть система координат XYZ (заданная тремя векторами-столбцами, образующими матрицу A) и система координат куба (заданная матрицей C). Если вам нужно матричное преобразование T, которое соединяется с ними двумя, вы можете решить матричное уравнение C = T*A. Поскольку A — это всего лишь единичная матрица, у нас есть T = C. Если вам нужны фактические углы, вы можете выровнять оси один за другим с помощью матриц вращения многократное использование одного и того же процесса обращения матрицы.

person eigenchris    schedule 17.01.2015