【发布时间】:2012-08-14 07:39:51
【问题描述】:
我有一个应用程序,它通过细分二十面体来创建球体的近似值。将笛卡尔顶点坐标转换为球坐标,使所有顶点都位于单位球面上。
接下来我需要做的是找到离球体表面任意点最近的顶点。我想出了两个简单的算法...
蛮力搜索 - 对于少量顶点可以,但对于更精细的细分会过度。
排序/索引搜索 - 按方位角和倾角将顶点排序为某种形式的顺序,然后创建粗略索引以通过限制其范围来加速蛮力搜索。
我想知道是否有一种更微妙、希望性能更高的算法可以用来代替上述两种算法中的一种。
更新 1: 我刚刚回忆起,对于应用程序的另一部分,顶点存储有关其邻居的信息。我的新算法是
- 选择任意起始顶点。找出它的哪个邻居与要定位的点的距离更小。使用这个邻居作为新的开始顶点。重复直到没有一个顶点的邻居与该点的距离更小。该顶点距离该点最近。
【问题讨论】:
-
找到一个好的起始顶点的一种不太难的方法:在你的球体上覆盖一个 100x100x100 的网格,并且对于每个网格单元,预先计算最接近单元中心的顶点。现在,给定一个任意点,查找该点所在的单元格,并使用预先计算的最近顶点作为起点。