在平面上进行三维正交投影

3

我有一个在三维空间中的点P(x,y,z),还有一个视图平面Ax+By+Cz+d=0,平面上的一个点为E。现在我想将这个三维点投影到该平面上,并得到相对于点E的投影点的二维坐标。

P(x,y,z) = 3d point which i want to project on the plane.
Plane Ax + By + Cz  + d  = 0 , so normal n = (A,B,C)
E(ex,ey,ez) = A point in plane ( eye pos of camera )

我现在正在做的是从点P中获取平面上最近的点,然后将该点减去E。我怀疑这样是否正确?请帮助我。谢谢。

2个回答

2
离平面最近的点位于法线上。因此,定义一个点Q,在该法线方向上与P有一定的偏移量。
Q = P - n*t

然后解出使Q在平面上的t:

dot(Q,n) + d = 0
dot(P-n*t,n) + d = 0
dot(P,n) - t*dot(n,n) = -d
t = (dot(P,n)+d)/dot(n,n)

dot((x1,y1,z1),(x2,y2,z2)) = x1*x2 + y1*y2 + z1*z2 是一个计算两个三维向量点积的公式。


谢谢 Vaughn,好的,现在我得到了最近的点,但我想将该点相对于 E 进行翻译(所以,现在 E 是原点)。我从 E 中减去了最近点的坐标。这样正确吗?如果您没有正确理解我的问题,请让我知道? - YAHOOOOO
在你的问题中,你提到想要2D坐标。这需要在平面上建立一个2D坐标系。你说E应该是原点,但是轴呢? - Vaughn Cato
我实际上想将原始点移动到E,并使该平面成为新的XY平面,以便E和新点具有相同的Z。也许我忽略了什么?如何创建2D坐标系? - YAHOOOOO
你需要定义一个位于平面上的X轴和Y轴。你可以任意选择其中一个轴,并选择另一个轴使其垂直于第一个轴。 - Vaughn Cato

0

在平面上,您可以得到一个点,如p0 =(0,0,-d / C)。我假设法线的长度为单位长度。

与n方向相同的p部分是dot(p-n0,n)* n + p0,因此投影是p - dot(p-p0,n)* n

如果您想要平面上的某些坐标,则必须提供基础/坐标系。例如,两个线性独立的向量跨越平面。这些基向量决定了坐标。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接