把粒子按x坐标排序,i是序号,形成xorder(i,1)存x坐标,xorder(i,2)存粒子编号;
同理,把粒子按y、z坐标排序,形成yorder(i,1..2),zorder(i,1..2)
计算网格顶点的xmin,xmax,ymin,ymax,zmin,zmax
loop:循环网格{
找到xmin,xmax在xorder(i,1)中的位置
同理,处理ymin,ymax,zmin,zmax
new 一个数组 possible(i)
loop: 处理上面缩小的范围{
把以上范围内的粒子编号xorder(i,2),yorder(i,2),
zorder(i,2)插入排 序到possible(i)
}
loop: 确定真正在网格中的粒子{
possible(i)中有连续三个相同编号,判断是否真的在网格内,
如果真在,就存起来
}
}
至于每个网格里的粒子编号怎么存,搞一个数组叫data(i)一个接一个地存上面伪代码得到的编号,另一个数组叫position(j)存单元j在data(i)中的起始位置
不知道问题理解对不对,抛个砖试试看