检查多边形是否是多面体投影的算法

时间:2015-09-07 00:49:51

标签: algorithm geometry computational-geometry

我正在尝试开发一种执行以下操作的算法:

给定2D多边形和3D多面体,确定2D多边形是否是3D多面体的投影(精确的透视投影),而不知道我们可能使用哪个变换矩阵进行投影。

输入

  • {2D Polygon}
  • {3D Polyhedron}

输出

  • {bool}是否是透视投影

我不是要求代码,但我只想知道这在多项式时间是否可行。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

3D到2D透视投影具有7个自由度(6个用于场景相对于相机的相对运动,1个用于焦距)。

在2D投影中选择四个顶点并考虑与多面体顶点的所有可能对应关系(存在这种关联的多项式数)。然后在7个未知参数中形成7个方程的系统(不幸的是非线性的;可能第8个方程可用于在多个解中进行选择)。

了解参数后,您可以通过重新投影多面体并与多边形进行比较来检查解决方案(进一步搜索与顶点和边缘的对应关系)。

所有这些都需要多项式时间(如果我是正确的话,则为四次),如果一个人承认求解器需要有限的时间(因此有限精度)。

如果焦距已知,则可以采用更好的方法。实际上,只有6个未知数,你可以从三个点的投影中找到投影参数。已知这个问题有一个分析解决方案(实际上最多4个),正如“透视三点问题的新算法”,高晓山&陈航飞,Vol .16 No.3 J. Comput.Sci。& Technol。“

这应该导致O(N³)确切的程序。

更一般地说,你在N对点之间形成假定的对应关系,解决相应的Perspective-N-point问题,并通过重新投影多面体并与已知投影进行比较来检验假设,以验证假设。

答案 1 :(得分:1)

只是一个算法的想法:

将由三个点组成的投影的三角形彼此相邻,而不是在同一条线上。迭代原始的所有相应三角形。对于解决这对三角形的所有可能投影,检查其余三角形是否匹配。

我必须承认我现在不确定是否可以有三角形的无限解(这很难迭代)?如果是这样,从四点开始。

答案 2 :(得分:-1)

我认为这是可能的,但你必须进行大量的逆向工程。表示3D对象的2D草图称为Orthographic Projection。该链接显示了您需要应用的转换矩阵,以将3D点转换为其2D投影。现在,你怎么走?反向矩阵混合了一些逆变换(平移,缩放,旋转......)?我认为这是一个很好的领导。