【问题标题】:Subdivided icosahedron - how to find the nearest vertex to an arbitrary point细分二十面体 - 如何找到离任意点最近的顶点
【发布时间】:2012-08-14 07:39:51
【问题描述】:

我有一个应用程序,它通过细分二十面体来创建球体的近似值。将笛卡尔顶点坐标转换为球坐标,使所有顶点都位于单位球面上。

接下来我需要做的是找到离球体表面任意点最近的顶点。我想出了两个简单的算法...

  1. 蛮力搜索 - 对于少量顶点可以,但对于更精细的细分会过度。

  2. 排序/索引搜索 - 按方位角和倾角将顶点排序为某种形式的顺序,然后创建粗略索引以通过限制其范围来加速蛮力搜索。

我想知道是否有一种更微妙、希望性能更高的算法可以用来代替上述两种算法中的一种。

更新 1: 我刚刚回忆起,对于应用程序的另一部分,顶点存储有关其邻居的信息。我的新算法是

  1. 选择任意起始顶点。找出它的哪个邻居与要定位的点的距离更小。使用这个邻居作为新的开始顶点。重复直到没有一个顶点的邻居与该点的距离更小。该顶点距离该点最近。

【问题讨论】:

  • 找到一个好的起始顶点的一种不太难的方法:在你的球体上覆盖一个 100x100x100 的网格,并且对于每个网格单元,预先计算最接近单元中心的顶点。现在,给定一个任意点,查找该点所在的单元格,并使用预先计算的最近顶点作为起点。

标签: algorithm geometry


【解决方案1】:

浏览回复,我想我可能有点离谱,但你所追求的很简单。我想。

由于您只处理球体上的点,因此您可以只从顶点到球体中心画一条线,从任意点到中心画另一条线,然后求解两者之间的夹角他们。越小越好。我认为最简单和最便宜的方法是点积。角度基本上掉出来了。这是一个关于它的链接:http://www.kynd.info/library/mathandphysics/dotProduct_01/ 为了测试它们,我建议选择一个顶点,测试它,然后测试它的邻居。它应该总是在最小邻居的方向上(角度应该总是随着你接近你所追求的顶点而减小)

无论如何,我希望这就是你所追求的。 哦,我在寻找您的细分算法时遇到了这个页面。很难找到;如果您可以发布指向它的链接,我认为这将比我自己提供更多帮助。

【讨论】:

    【解决方案2】:

    一种可能的解决方案是为顶点构建 BSP 树:http://en.wikipedia.org/wiki/Binary_space_partitioning

    【讨论】:

      【解决方案3】:

      如果二十面体在北极有一个顶点,在南极有一个顶点,那么有 2 个组,每组 5 个顶点位于平行于赤道的平面内。通过一点几何,我认为这些平面位于 N/S 57.3056°(小数,而不是 dd.mmss)。这将您的二十面体分为 4 个纬度区域;

      • 28.6528° 的任何北(南)线都最靠近最近极点的顶点;
      • 赤道和北(南)28.6528° 之间的任何东西都更接近该区域中的 5 个顶点之一。

      我正在像导航员一样工作,弧线以度数测量并表示南北;如果您更喜欢数学惯例,您可以很容易地将这一切转换为您的球坐标版本。

      我怀疑,虽然我没有编码,但检查到 5 个顶点的距离并选择最近的将比基于将球体表面划分为二十面体面的投影的更复杂的方法更快,或将球体上的点投影回二十面体并在该坐标系中解决问题。

      例如,您在更新 1 中建议的方法至少需要计算到 6 个顶点(第一个,任意选择的一个及其 5 个邻居)的距离。

      用笛卡尔坐标还是球坐标计算距离都没有关系(如果您只想知道哪个顶点最近)。但是,笛卡尔坐标中的计算避免了对三角函数的大量调用。

      另一方面,如果你没有在你的球体的两极安排你的二十面体,那么,你应该有!

      【讨论】:

      • 我想我可能没有把问题说得足够清楚——二十面体被细分为近似球体。一旦我对我的算法感到满意,我计划将节点数量增加到 600000 以上,并将处理数字的工作卸载到 GPU。但是,我确实在两极有顶点!
      • 在这种情况下,请查看geog.ucsb.edu/~good/papers/162.pdf 并在 Google 上搜索类似的想法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 2014-09-07
      • 2013-06-15
      • 1970-01-01
      • 2013-07-17
      相关资源
      最近更新 更多