问题陈述:使用Octree查找每个粒子的最近GRID ID。
图[1]:
图[2]:
我有一个粒子系统(约6k,可移动),我需要检查哪个网格点(刚性;图中)最接近。有人建议我选择Octree,因为3D Grids的速度很快(可能)。
这是递归八叉树的正确算法,以获取网格的最近网格点吗?
- 获取输入作为点P开始坐标C(第一次[0,0,0])
- 起始尺寸= [Sx,Sy,Sz]
- 获得全部8个中点Mi = {M1,..,M8}获得Mi和P的最小距离
假设M得到M的起始位置为Cn设定大小Sn = [Sx / 8,Sy / 8,Sz / 8]
如果M和P的距离小于2 *(网格空间G):
5.1。将所有网格点从Cn迭代到Sn
5.2。打印最少结果
- 醇>
否则
6.1。将开始坐标设置为Cn
6.2。将大小设置为Sn
6.3。转到1
问题:如果粒子在边界上或几乎在边界上,当它检查所有A x B x C时,最后一次迭代会吃掉所有速度。
请建议您是否有更好的方法来解决此问题。
答案 0 :(得分:5)
这里没有必要使用八叉树。八叉树对于反向问题很有用(给定一个网格点,找到最近的粒子)但在这里完全没用。
假设网格单元格的大小为(a, b, c)
,则距离(x, y, z)
最近的网格点为(a*floor(x/a+0.5), b*floor(y/b+0.5), c*floor(z/c+0.5))
。