Algorithm 两条多段线之间面积最小的网格

Algorithm 两条多段线之间面积最小的网格,algorithm,3d,geometry,mesh,Algorithm,3d,Geometry,Mesh,我有两条多段线v和u,分别在3D中具有n和m顶点。我想将v[0]连接到u[0],v[n-1]连接到u[m-1]以及内部顶点,以某种方式获得具有最小表面积的三角形网格条 我的naỉve解决方案是通过随后添加最小对角线来获得接近最优的初始网格,然后在每个四边形中切换对角线,如果它产生更小的面积,直到这不再可能 但我恐怕只能以局部最小值结束,而不能以全局最小值结束。实现最小网格的更好选项是什么?这可以通过动态程序解决 让我们将问题可视化为一个表,其中列表示第一条多段线的顶点,行表示第二条多段线的顶

我有两条多段线
v
u
,分别在3D中具有
n
m
顶点。我想将
v[0]
连接到
u[0]
v[n-1]
连接到
u[m-1]
以及内部顶点,以某种方式获得具有最小表面积的三角形网格条

我的naỉve解决方案是通过随后添加最小对角线来获得接近最优的初始网格,然后在每个四边形中切换对角线,如果它产生更小的面积,直到这不再可能


但我恐怕只能以局部最小值结束,而不能以全局最小值结束。实现最小网格的更好选项是什么?

这可以通过动态程序解决

让我们将问题可视化为一个表,其中列表示第一条多段线的顶点,行表示第二条多段线的顶点:

    0  1  2  3  ... n-1   -> v
 0 
 1
 2
...
m-1
每个单元格表示多段线之间的边。您从
(0,0)
开始,希望通过执行
(+1,0)
(0,+1)
步骤来找到
(n-1,m-1)
的路径。您所做的每一步都有一个成本(结果三角形的面积),您希望找到成本最小的路径

因此,您可以迭代(以动态编程的方式)计算到达任何单元格所需的成本(通过比较两个可能的传入方向的结果成本)。记住你选择的方向,你最终将拥有一条成本最低的完整路径。整个运行时将是
O(n*m)

如果您知道您的顶点或多或少分布得很好,则可以将表的计算限制为对角线附近的几个条目。这可以将运行时间降低到
O(k*max(n,m))
,其中
k
是对角线周围的可变半径。但是如果一个好的顶点分布的假设不成立,你可能会错过最优解


您也可以采用类似A*的策略,仅当您认为某个单元格可能属于最小路径时才计算该单元格(借助一些启发式)。

顺便说一句,确保最小面积实际上是您想要的。我不知道你们需要它做什么,但这个区域可能并不像你们想要的那个样直观。特别是,当两条线位于同一平面上时,所有细分将具有相同的总面积。对角线之和可能更适合某些应用。问题有点不同(因为成本现在在单元上,而不是在单元之间的边缘),但可以用类似的方法解决。谢谢你给我一个*的提示!也许我应该使用面积和对角线的叠加。