如何计算观察平面中的点在场景中的平面上的逆正交投影?
How to compute the inverse orthogonal projection of a point in the viewing plane onto a plane in the scene?
假设我有一个观察平面 vn
,方向为 q1
,场景中有一个平面 un
,方向为 q2
。
q1
和 q2
是四元数。
如何找到未知点 ux, uy, uz
使得 proj_u_plane_vn
等于已知点 vx, vy, 0
?
找到相对方向问题会不会更简单q2-q1
?
现在我正在尝试用 i、j 和 k 值来做这件事,但这似乎有点矫枉过正,而且我没有看到不做反三角就弹出答案,不是我会介意,但是我正在寻找更优雅的解决方案。
提前致谢。 :)
您有以下值:
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) 给出的平面上的投影。
请注意,此答案是从此处截取的:How do I find the orthogonal projection of a point onto a plane。
假设我有一个观察平面 vn
,方向为 q1
,场景中有一个平面 un
,方向为 q2
。
q1
和 q2
是四元数。
如何找到未知点 ux, uy, uz
使得 proj_u_plane_vn
等于已知点 vx, vy, 0
?
找到相对方向问题会不会更简单q2-q1
?
现在我正在尝试用 i、j 和 k 值来做这件事,但这似乎有点矫枉过正,而且我没有看到不做反三角就弹出答案,不是我会介意,但是我正在寻找更优雅的解决方案。
提前致谢。 :)
您有以下值:
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) 给出的平面上的投影。
请注意,此答案是从此处截取的:How do I find the orthogonal projection of a point onto a plane。