【问题标题】:Algorithm for Octree for nearest neighbor search八叉树算法用于最近邻搜索
【发布时间】:2014-07-02 11:02:42
【问题描述】:

问题陈述:使用八叉树找到每个粒子最近的 GRID ID。

图[1]:

图[2]:

我有一个粒子系统(~6k,可移动),我需要检查哪个网格点(刚性;在图片中)最接近。有人建议我选择 Octree,因为它对于 3D 网格来说速度很快。

这是递归八叉树获取网格最近网格点的正确算法吗?

  1. 获取一个输入作为点 P 起始坐标 C(第一次是 [0,0,0])
  2. 起始尺寸 = [Sx, Sy, Sz]
  3. 获取所有 8 个中点 Mi = {M1,..,M8} 得到 Mi 和 P 的最小距离
  4. 说 M 得到 M 的起始位置为 Cn 设置大小 Sn = [Sx/8, Sy/8, Sz/8]

  5. 如果 M 和 P 的距离小于 2 * (Grid Space G):

    5.1。迭代从Cn到Sn的所有网格点

    5.2。打印最少作为结果

  6. 其他

    6.1。设置起始坐标为Cn

    6.2。设置大小为 Sn

    6.3。转到 1

问题:如果粒子在边界外或接近边界,最后一次迭代会耗尽所有速度,因为它会检查所有 A x B x C。

如果您有更好的方法来解决这个问题,请提出建议。

【问题讨论】:

    标签: algorithm optimization nearest-neighbor octree


    【解决方案1】:

    这里不需要使用八叉树。八叉树对于反向问题很有用(给定一个网格点,找到最近的粒子)但在这里完全没用。

    假设一个网格单元的大小是(a, b, c),那么离(x, y, z)最近的网格点就是(a*floor(x/a+0.5), b*floor(y/b+0.5), c*floor(z/c+0.5))

    【讨论】:

    • 你能解释一下吗。
    猜你喜欢
    • 1970-01-01
    • 2014-01-17
    • 2012-11-10
    • 2012-06-27
    • 2015-03-17
    • 1970-01-01
    • 2020-09-03
    • 2011-05-24
    • 1970-01-01
    相关资源
    最近更新 更多