我在3d P(x,y,z)中有一个点,并且视图平面Ax + By + Cz + d = 0。平面上的一个点是E.现在我想将该3d投影到该平面并获得相对于点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.我怀疑这是对的???
请帮助我。谢谢。
答案 0 :(得分:2)
最近的点是沿着飞机的法线。因此,定义一个沿着该法线偏离P的点Q.
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
答案 1 :(得分:0)
你在飞机上得到p0 = (0, 0, -d/C)
点。我假设法线具有单位长度。
与n在同一方向上的p部分为dot(p-n0, n) * n + p0
,因此投影为p - dot(p-p0,n)*n
。
如果您想在平面上使用某些坐标,则必须提供基础/坐标系。例如,两个线性独立向量跨越平面。坐标取决于这些基础向量。