Как вычислить обратную ортогональную проекцию точки в плоскости просмотра на плоскость в сцене?
Предположим, у меня есть самолет просмотра vn
с ориентацией q1
и самолет в сцене un
с ориентацией q2
,
q1
а также q2
являются кватернионами.
Как бы я нашел неизвестную точку ux, uy, uz
такой, что proj_u_plane_vn
равно известной точке vx, vy, 0
?
Будет ли проблема проще, если найти относительную ориентацию q2-q1
?
Прямо сейчас я пытаюсь сделать это со значениями i, j и k, но это кажется излишним, и я не вижу, чтобы ответ выскакивал без выполнения обратного триггера, не то чтобы я возражал против этого, но я ищу более элегантное решение.
Заранее спасибо.:)
1 ответ
У вас есть следующие значения:
vx, vy, vz; //These are the points in the viewing plane, which you know.
q1, q2; //The vectors describing the viewing and scene planes.
Как вы и подозревали, хитрость проекции между плоскостями заключается в использовании относительных ориентаций.
Вы должны использовать свои смещения (когда вы находите относительные ориентации) между плоскостями, чтобы обрабатывать плоскость сцены, как если бы она была смещена относительно передней плоскости (плоскости просмотра). Это не только легче визуализировать, но и сделает ответы, которые вы искали, более актуальными.
Зная это, вы можете использовать свою относительную ориентацию, чтобы определить n в следующем уравнении:
q_proj = q - dot(q - p, n) * n
Проекция точки q = (x, y, z) на плоскость, заданную точкой p = (a, b, c) и нормалью n = (d, e, f).
Обратите внимание, что этот ответ был разорван отсюда: как найти ортогональную проекцию точки на плоскость.