假设我有一个由不重叠的三角形组成的二维网格, 和一组点. 确定每个点位于哪个三角形的最佳方法是什么?
例如,在下图中,我们有,,,所以我想要一个函数返回列表.
Matlab 具有功能点定位,它可以为 Delaunay 网格做我想要的,但它对于一般网格失败。
我的第一个(愚蠢的)想法是,对于所有节点, 遍历所有三角形以找出哪个三角形但是,这是非常低效的 - 您可能必须为每个点循环遍历每个三角形,因此可能需要工作。
我的下一个想法是,对于所有要点,通过最近邻搜索找到最近的网格节点,然后查看连接到该最近节点的三角形。在这种情况下,工作将是, 在哪里是附加到网格中任何节点的最大三角形数。这种方法有几个可以解决但令人讨厌的问题,
- 它需要实现有效的最近邻搜索(或找到拥有它的库),这可能是一项不平凡的任务。
- 它需要存储一个列表,其中列出了哪些三角形连接到每个节点,我的代码目前没有设置 - 现在只有一个节点坐标列表和一个元素列表。
总而言之,它似乎不优雅,我认为应该有更好的方法。这一定是一个经常出现的问题,所以我想知道是否有人可以推荐找到节点所在三角形的最佳方法,无论是理论上还是可用库。
谢谢!