Преобразование из глобальной системы координат в локальную

У меня есть самолет в р 3 , заданный вектором направления

н "=" н Икс , н у , н г
и точка С ( Икс 1 , Д 1 , Z 1 ) . Направление единичного вектора нормали н описывается по высоте и азимутальному углу самолета α , А соответственно как:
н "=" потому что ( α ) грех ( А ) , потому что ( α ) потому что ( А ) , грех ( α ) .
Предположим, точка п ( Икс п , Д п , Z п ) которая лежит на плоскости (например, точка пересечения прямой и плоскости).

Как я могу конвертировать точку п ( Икс п , Д п , Z п ) из глобальной системы координат в локальную систему координат плоскости и, наконец, получить п ( Икс п , у п , 0 ) ?

Все прописные Икс , Д , Z относятся к глобальной системе координат.

В Нижнем регистре Икс , у , г в локальную систему координат плоскости.

Если для вас это имеет значение, формулы в моем ответе дают набор плоских координат, а не набор плоских координат. (Единственного выбора плоских координат не существует.) Эти формулы численно неустойчивы для плоскостей, вектор нормали которых близок к ± ( 0 , 0 , 1 ) ; по топологическим причинам полностью избежать этой проблемы невозможно.
@ user86418 Спасибо за разъяснение.

Ответы (1)

Если н "=" ± 0 , 0 , 1 , затем Z п "=" 0 и ваша точка уже в желаемом виде.

В противном случае, ты 1 "=" потому что ( А ) , грех ( А ) , 0 и ты 2 "=" н × ты 1 "=" грех ( α ) грех ( А ) , грех ( α ) потому что ( А ) , потому что ( α ) являются ортонормированным базисом для вашей плоскости, и

Икс п "=" ( п С ) ты 1 "=" ( Икс п Икс 1 ) потому что ( А ) + ( Д п Д 1 ) грех ( А ) , у п "=" ( п С ) ты 2 "=" ( Икс п Икс 1 ) грех ( α ) грех ( А ) ( Д п Д 1 ) грех ( α ) потому что ( А ) + ( Z п Z 1 ) потому что ( α ) .

Большое спасибо! Пробую случай: tube.geogebra.org/student/m1110279 Самолет из: Точка: С "=" ( 4 , 2 , 1 ) Нормальный вектор: ЧАС "=" 0,12 , 0,24 , 0,86 Точка А на плоскости: А "=" ( 2,67 , 1,51 , 0,95 ) Я вычисляю: а "=" а р с с я н ( ЧАС 2 ) "=" 1,03 А "=" { 2 π ЧАС 1 с о с ( а ) , если  <  0 ЧАС 1 с о с ( а ) , если   0 "=" 4.22 ты 1 "=" 0,47 , 0,88 , 0 , ты 2 "=" 0,76 , 0,4 , 0,22 И наконец: Икс е "=" 6.12 , у е "=" 3,63 Но е "=" 7.22 С Е "=" 7,54 Я что-то не так понял?
@T81: Похоже, твой ЧАС не является единичным вектором. (Чтобы исправить это, разделите ЧАС к ЧАС . :) Возможно в результате, ты 1 и ты 2 не являются единичными векторами. (С ты 1 проблема может быть в ошибке округления, но ты 2 0,8866 .) Собственно, ваш ты 1 и ты 2 тоже не ортогональны....
Я предполагал, что вы знаете высоту и азимут вашего самолета. :) Вместо использования обратных триггерных функций: если н "=" ( а , б , с ) является единичным вектором, то
ты 1 "=" ( б , а , 0 ) а 2 + б 2 , ты 2 "=" н × ты 1 "=" ( с а , с б , а 2 + б 2 ) а 2 + б 2 .
Затем используйте Икс п "=" ( п С ) ты 1 и у п "=" ( п С ) ты 2 .
Большой! Действительно ЧАС не был единичным вектором. При преобразовании и продолжении работы либо с инвертирующими триггерными функциями, либо с использованием приведенной выше рекомендации я получил Икс е "=" 7,54 , у е "=" 0,16 и е "=" 7,54 . На самом деле я предпочитаю избегать обратных триггерных функций. Еще раз спасибо! :)
В случае, если я хочу результат Икс е "=" 7,54 , у е "=" + 0,16 я могу идти: ты 1 "=" ( б , а , 0 ) а 2 + б 2 ?
@T81: "Да". :) (Более подробно, умножая ты 1 к 1 также умножает ты 2 "=" н × ты 1 к 1 , что меняет знаки обеих координат.)