我认为这个问题会产生一组可能的解决方案,至少在2D中是如此。对于2D情况:
|
-----------+-----------
/|\
/ | \
/ | \
/---+---\VP
/ | \
/ | \
/ | \
/ | \
/ | -- \
/ | | \
/ | | \
在上图中,垂直线段和水平线段将投影到视图平面(VP)上的同一条线。如果按比例绘制出来,您会看到从眼睛通过未投影线的每个端点传递的两条射线。该线可以处于许多位置和旋转状态 - 想象一根棍子掉进一个锥体中,它可以卡在任意数量的位置。
因此,在2D空间中,有无限数量的解决方案在一个明确定义的集合内。
这是否适用于3D?
算法大致如下:
1. 反转投影矩阵
2. 计算通过矩形顶点的四条射线,有效地创建了一个倾斜的金字塔
3. 尝试将矩形放入金字塔中。这是棘手的部分,我正在尝试在金字塔中心想象矩形,以查看它们是否可以以多种方式适合其中之一。
编辑:如果您知道物体的距离,它将变得微不足道。
编辑V2:
好的,让Rn成为世界空间中的四条射线,即通过反转矩阵变换,以m.Rn表示,其中|Rn|为1。因此,矩形的四个点为:
P1 = aR1
P2 = bR2
P3 = cR3
P4 = dR4
其中P1..P4是矩形周围的点。通过一些向量数学,我们可以推导出四个方程式:
|aR1 - bR2| = d1
|cR3 - dR4| = d1
|aR1 - cR3| = d2
|bR2 - dR4| = d2
其中d1和d2是矩形的边长,a、b、c和d是未知数。
现在,可能没有解决上述问题的方法,这种情况下您需要将d1与d2交换。您可以将每行扩展为:
(a.R1x - b.R2x)2 + (a.R1y - b.R2y)2 + (a.R1z - b.R2z)2 = d12
其中R1?和R2?是射线1和2的x/y/z分量。请注意,您正在解决上述问题中的a和b,而不是x、y、z。