【发布时间】:2009-07-02 11:41:54
【问题描述】:
我有一个似乎无法解决的 3D 数学问题。
我有 3 个点的数据。数据是平面上的(2D)坐标,漂浮在 3D 空间的某个位置。我也知道投影的(2D)坐标。这会产生以下数据数组:
[[[x1,y1], [px1,py1],
[[x2,y2], [px2,py2],
[[x3,y3], [px3,py3]]
其中法线(x1 等)坐标代表平面上的坐标,另一个(px1 等)代表投影坐标。
我想做的是投影一个 新 2D 坐标 ([x4,y4])。
.
到目前为止我尝试了什么:
当然,你需要一只眼睛来进行投影,所以我将它设置为 [xe,ye,-1]。 xe 和 ye 是已知的。 (这是图片参考,所以我只是把眼睛放在了照片的中心。)
在眼睛下方,我放置了投影面 (z=0)。这给出了以下投影坐标:
[[[x1,y1], [px1,py1,0],
[[x2,y2], [px2,py2,0],
[[x3,y3], [px3,py3,0]]
我不能对飞机上的坐标做同样的事情,因为我对那架飞机一无所知。
我还认为我可以对从眼睛穿过投影坐标的线条进行参数化公式。对于第 1 行,这将是:
line1x = xe+(px1-xe)*t1
line1y = ye+(py1-ye)*t1
line1z = -1+t1 // = -1+(0--1)*t1
我也知道 3D 中点之间的距离。这与 2D 中的相同。这意味着 point1 和 point2 之间的距离将是 sqrt((x1-x2)^2+(y1-y2)^2)。
我也随时知道线路(line1 和 line2)之间的距离。即 sqrt((line1x-line2x)^2+(line1y-line2y)^2+(line1z-line2z)^2)。
但是,我真的不知道从这里怎么走……甚至不知道这是否是正确的路线。
.
我希望你明白我想要做什么,并且你能帮助我。
提前致谢!
【问题讨论】:
-
你是说你得到了三个点 (xn,yn),它们在点 (pxn, pyn) 处投影到平面上 - 你想弄清楚如何映射一个新点 (x4 , y4) 上飞机?
-
是的,goodgai,这就是我要说的。但是,当我在我的问题中使用“平面”一词时,我指的是 (xn,yn) 点所在的平面(我认为这在尝试绘制第四个点时很重要)。很抱歉造成混乱。
-
您在平面 (xn,yn) 上有三个点,它们被投影到投影平面 (pxn,pyn) 上。这也是一个中心(透视)投影,因此所有点都通过来自单个点的光线进行投影。你想知道如何反转投影:也就是说,如果给你一个投影点 (px4,py4) 如何得到 (x4,y4)?我没有得到的是你的原始点没有任何 z 坐标。为什么它们只有 x/y - 你知道 z 坐标还是这些 x/y 坐标在飞机自己的坐标系内......?
-
"我也知道 3D 中点之间的距离。这和 2D 中的一样。" --> 吓到我了,你怎么知道的?
-
@goodgai (xn,yn) 坐标确实是平面自身坐标系上的坐标。我得到 (x4,y4),我想产生 (px4,py4)。
标签: math 3d projection reverseprojection