2010-03-05 3 views
0

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

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

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

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

    перевод (-P) * поворот (В) * перевод (р)

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

+0

Эти линии всегда пересекаются? – tafa

+0

@tafa: нет, спасибо, что указали это. Я не могу гарантировать, что, на самом деле, очень вероятно, подумайте об этом, что при некоторых обстоятельствах они будут параллельны. –

ответ

2

Вместо того, чтобы найти пересечение, переходящее A в A ', было бы достаточно, я думаю. Тогда вам, вероятно, понадобится 2 оборота, один из которых сделает обе линии на одной плоскости, а другой - для их выравнивания.

+0

Да, это должно работать и думать об этом, возможно, безопаснее: мой исходный алгоритм попадет в проблемы, если LS и LS 'параллельны. –