Как найти матрицу преобразования, выравнивающую две строки?

Учитывая две точки в трехмерном пространстве, A и B, я получаю отрезок LS. Учитывая две новые точки A' и B', дающие отрезок LS', мне нужно найти матрицу преобразования, которая преобразует LS в LS'. Длина отрезков считается равной.

У меня есть теория о том, как рассчитать матрицу, но мне бы очень хотелось, чтобы вы, замечательные люди, высказали некоторые отзывы о том, хороша ли эта теория или существует ли какой-то лучший подход.

Вот мой алгоритм:

  1. Пусть L и L' — прямые, параллельные LS и LS'.
  2. Найдите точку P, где L пересекает L'
  3. Найдите угол V между L и L'
  4. Окончательная матрица преобразования будет иметь вид:

    перевести(-P) * повернуть(V) * перевести(p)

Немного предыстории для любопытных: я создаю это в XNA, хотя математическая задача должна быть довольно общей. Сегмент линии является частью более крупной структуры связанных сегментов. Для каждого сегмента я предварительно рассчитаю матрицу преобразования для каждого кадра анимации.


person Peter Lillevold    schedule 05.03.2010    source источник
comment
Всегда ли эти линии пересекаются?   -  person tafa    schedule 05.03.2010
comment
@tafa: нет, спасибо, что указали на это. Я не могу гарантировать, что на самом деле очень вероятно, если подумать, что они будут параллельны при некоторых обстоятельствах.   -  person Peter Lillevold    schedule 05.03.2010


Ответы (1)


Думаю, вместо того, чтобы находить пересечение, было бы достаточно перевести А в А'. Тогда вам, вероятно, потребуется 2 поворота: один, чтобы обе линии были в одной плоскости, а другой, чтобы фактически выровнять их.

person tafa    schedule 05.03.2010
comment
Да, это должно работать, и думать об этом, вероятно, безопаснее: мой первоначальный алгоритм столкнется с проблемами, если LS и LS' параллельны. - person Peter Lillevold; 05.03.2010