Преобразование 3D точек в 2D - PullRequest
7 голосов
/ 07 июня 2011

У меня есть набор точек (x1, x2, .. xn), которые лежат на плоскости, определяемой как Ax + By + Cz + d = 0.Я хотел бы найти матрицу преобразования для перевода и поворота в плоскость XY.Таким образом, координата новой точки будет x1 '= (xnew, ynew, 0).

Много ответов дают матрицу кватернионов, точек или перекрестных произведений.Я не уверен, какой путь правильный.

Спасибо

1 Ответ

8 голосов
/ 08 июня 2011

Прежде всего, если в вашем уравнении плоскости, d = 0, нет линейного преобразования , которое вы можете применить. Вместо этого вам нужно выполнить аффинное преобразование .

Один из способов сделать это - определить угол и вектор, вокруг которого вращаться, чтобы ваша точка лежала в плоскости, параллельной плоскости XY (т. Е. Компонент Z вашего преобразованного набора точек для всех имеет одинаковые значения). Затем вы просто отбрасываете компонент Z.

Для этого пусть V будет нормализованной плоскостью, нормальной для плоскости, содержащей ваши точки. Для удобства определите из вашей плоскости уравнение выше Ax + By + Cz + d = 0:

<B>V</b> = (A, B, C)
<B>V'</b> = <B>V</b> / ||<B>V</b>|| = (A', B', C')
<B>Z</b> = (0, 0, 1)

, где

A' = A / ||<B>V</B>||
B' = B / ||<B>V</B>||
C' = C / ||<B>V</B>||
||<B>V</B>|| = (A<sup>2</sup>+B<sup>2</sup>+C<sup>2</sup>)<sup>1/2</sup>

Угол будет просто:

&theta; = cos<sup>-1</sup>(<B>Z</B>∙<B>V</B> / ||<B>V</B>||)
  = cos<sup>-1</sup>(<B>Z</B>∙<B>V'</B>)
  = cos<sup>-1</sup>(C')

Ось R , вокруг которой вращается, является просто перекрестным произведением нормализованной плоскости, нормальной V ' и Z . Это

<b>R</b> = <b>V'</b>×<b>Z</b>
  = (B', -A', 0)

Теперь вы можете использовать эту пару угол / ось, чтобы построить кватернионное вращение , необходимое для поворота всех точек в вашем наборе данных в плоскость, параллельную плоскости XY. Затем, как я сказал ранее, просто опустите компонент Z, чтобы выполнить ортогональную проекцию на плоскость XY.

Обновление: antonakos дает хороший совет о нормализации R перед использованием API с учетом пар ось / угол.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...