Короткий ответ - да, но поскольку у вас есть только плоскость, ориентация нового базиса будет произвольной.
Допустим, у вас есть точка 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.Примечания:
- . Выше - векторное произведение
- Выше X - векторное произведение
HTH