Как найти координаты точки из четырех точек, которые можно перевести или повернуть?Все эти точки образуют твердое тело - PullRequest
1 голос
/ 24 февраля 2012

У меня есть твердое тело, которое перемещается и / или вращается вокруг оси, перпендикулярной экрану. У меня есть координаты четырех точек на твердом теле. Как я могу получить координаты неизвестной точки на твердом теле?

enter image description here

Могу ли я сформировать линейное уравнение с четырьмя известными точками, чтобы получить пятую неизвестную точку? Как разместить перевод и вращение в уравнении?

Ответы [ 3 ]

2 голосов
/ 25 февраля 2012

Поскольку у вас есть больше точек, чем необходимо, вы можете использовать все точки и решить проблему переполненности системы, чтобы получить потенциально более точную матрицу преобразования (это полезно, если вы не уверены в точности преобразованных координат).

Более подробно, вы можете представить матрицу преобразования как

 a    b    c
-b    a    d
 0    0    1

для некоторых параметров a, b и c (если вам действительно нужно, вы можете разработатьугол и XY-переводы из этих а, б и в).Затем у нас есть эти два уравнения из каждой из четырех точек (x_i, y_i) и результата (x_i ', y_i'):

 a x_i  +  b y_i  +  c  =  x_i'
 a y_i  + -b x_i  +  d  =  y_i'

Затем вы можете переписать восемь уравнений как систему линейных уравненийпеременные (a, b, c, d) следующим образом (в матричной форме):

 x_1    y_1   1   0                   x_1'
 y_1   -x_1   0   1         a         y_1'
 x_2    y_2   1   0         b         x_2'
 y_2   -x_2   0   1    *    c    =    y_2'
 x_3    y_3   1   0         d         x_3'
 y_3   -x_3   0   1                   y_3'
 x_4    y_4   1   0                   x_4'
 y_4   -x_4   0   1                   y_4'

или Ax = B, где A - матрица слева, x = [abcd] 'и B= вектор справа.

Теперь разложите A, используя SVD, чтобы получить UDV '.Тогда x можно найти как VD -1 U'B, где D -1 - обратная диагональная матрица D. Для получения дополнительной информации о SVD см. SingularЦенность Разложения (СВД) .

2 голосов
/ 24 февраля 2012

Любая комбинация поворота на θ относительно точки p и перевода t ' может быть представлена ​​как поворот на θ о происхождение сопровождается подходящим переводом t . Таким образом, проблема становится отработки значения θ и t из известных точек. Тогда преобразование можно применить к неизвестной точке.

Самый простой способ работать, я думаю, в однородных координатах. В случае векторов столбцов поворот вокруг начала координат на θ представлен матрицей M ( θ ):

 cos(θ)    sin(θ)    0  
-sin(θ)    cos(θ)    0  
   0         0       1

Перевод t = ( tx , ty , 1) T представлен матрицей T ( t ):

1    0    tx
0    1    ty
0    0    1

Общее преобразование представляет собой произведение T ( t ) M ( θ ). Это необходимо решить для трех неизвестных θ , tx и ty . С четырьмя известными точками существует восемь уравнений (по два на каждую точку, соответствующие координатам x и y ), поэтому информации для неизвестных более чем достаточно. Это просто вопрос вставки значений для известных точек.

0 голосов
/ 24 февраля 2012

Возьмем две старые точки A, B (Линия) без потери общности, предположим, что A является источникомПосмотрите на A 'и B'.переведите A 'в A и соответствующий перевод в B' => b ''.Найдите угол, и вы получите эффективный поворот и поворот.

...