假设我有一个由非重叠三角形组成的2D网格,以及一组点。确定每个点位于哪个三角形的最佳方法是什么? { p 我} 中号我= 1 ⊂ ∪ Ñ ķ = 1 Ť ķ
例如,下面的图像中,我们有,,,所以我想的函数该返回列表。p 2 ∈ Ť 4 p 3 ∈ Ť 2 ˚F ˚F (p 1,p 2,p 3)= [ 2 ,4 ,2 ]
Matlab具有功能Pointlocation,它可以为Delaunay网格实现我想要的功能,但对于普通网格却无法实现。
我的第一个(愚蠢的)想法是,对于所有节点,遍历所有三角形以找出哪个三角形在其中。但是,这种方法效率极低-您可能必须遍历每个点的每个三角形,所以它可以承担工作。
我的下一个想法是,对于所有点,通过最近邻居搜索找到最近的网格节点,然后通过附加到该最近节点的三角形查看。在这种情况下,工作将是,其中是连接到网格中任何节点的三角形的最大数量。这种方法有几个可解决但令人讨厌的问题,
- 它要求实现有效的最近邻居搜索(或查找具有该功能的库),这可能是一项不平凡的任务。
- 它需要存储一个三角形列表,每个三角形都附加到每个节点上,而我的代码当前尚未设置该列表-现在只有一个节点坐标列表和一个元素列表。
总体而言,这似乎不太雅致,我认为应该有更好的方法。这肯定是一个经常出现的问题,所以我想知道是否有人可以推荐最佳的方法来找到节点在理论上或在可用库方面的三角形。
谢谢!