Как вычислить новый базис (матрицу преобразования) из трехмерной плоскости и известного источника? - PullRequest
1 голос
/ 07 февраля 2012

Учитывая трехмерную плоскость и произвольную точку на ней, которую я хочу рассмотреть как источник (0,0,0) нового базиса, можно: (A) определить базис из этой информации?И (B) создать матрицу преобразования, которая позволяет мне преобразовывать между мировым пространством и новым базисом?

Я могу предположить, что преобразование является аффинным.

Большое спасибо!

1 Ответ

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

Короткий ответ - да, но поскольку у вас есть только плоскость, ориентация нового базиса будет произвольной.

Допустим, у вас есть точка k , лежащая на плоскости P и вы хотите указать k в качестве источника.У вас есть P = (N, d) , где N - нормализованная нормали плоскости, а d - расстояние до плоскости от начала координат.

Чтобы определить ортонормированный базис с произвольной ориентацией на этой плоскости, определим 3 вектора вправо R , вверх U и нормально N

Мы ужеиметь N , который является ничем иным, как нормалью плоскости

U = (0,1,0)
// If U is pointing in almost the same direction as N, change it
if (U.N > 0.7071) U = (0, 0, 1);
R = normalise (U x N)
U = normalise (N x R) // U was not orthonormal

Теперь определим матрицу преобразования 3x3 M , где 3 строки матрицы R, Uи N соответственно.

      R
M = ( U )
      N

Теперь допустим, что вы хотите преобразовать точку p в точку p ' на вашей плоскости.

p' = M ( p - k )

Если вы хотите сделать все это с одной матрицей, вы можете объединить M и вектор перевода -k в однородную матрицу 4x4.Примечания:

  1. . Выше - векторное произведение
  2. Выше X - векторное произведение

HTH

...