需要关于四叉树java的帮助吗

需要关于四叉树java的帮助吗,java,2d,simulation,particles,quadtree,Java,2d,Simulation,Particles,Quadtree,我一直在寻找在2D模拟中实现四叉树的方法,以使碰撞检测速度更快,但我发现这个概念很难理解。 sim卡工作得很好,因为它现在只是,一旦我通过了160-180个粒子,它就会变得非常慢,因为碰撞检测毫无必要地通过了所有的粒子,这是非常愚蠢的。 现在它只是一堆或一圈在屏幕上相互碰撞,我可以通过点击和拖动鼠标,以新的速度和位置生成新的 edit1: 我想我现在可以创建树了,如图所示 我的四叉树图像: 所以现在的问题是如何使它对碰撞检测有用 每次检查时是否必须从零开始创建整个树 我等待的时候要做的事,希望在

我一直在寻找在2D模拟中实现四叉树的方法,以使碰撞检测速度更快,但我发现这个概念很难理解。 sim卡工作得很好,因为它现在只是,一旦我通过了160-180个粒子,它就会变得非常慢,因为碰撞检测毫无必要地通过了所有的粒子,这是非常愚蠢的。 现在它只是一堆或一圈在屏幕上相互碰撞,我可以通过点击和拖动鼠标,以新的速度和位置生成新的

edit1:

我想我现在可以创建树了,如图所示

我的四叉树图像:

所以现在的问题是如何使它对碰撞检测有用

每次检查时是否必须从零开始创建整个树

我等待的时候要做的事,希望在某种程度上是正确的:p

1\u检查每个节点中是否有球,如果没有球,则将该节点保留在外。 2_不断检查交叉点,直到我到达叶级并将这些交叉球添加到叶节点。 3_在我继续之前在叶节点中碰撞球

这是我的QuadTreeNode课程:

公共类四节点{
私有四叉树节点父节点;
私家四通[]儿童;
私有int-id;
私人双x;
私人双y;
私人双宽度;
私人双高;
公共四叉树节点(双x、双y、双宽、双高、整数id、四叉树节点父节点){
这个.x=x;
这个。y=y;
这个。宽度=宽度;
高度=高度;
this.children=新的四元三烯醇[4];
this.id=id;
this.parent=parent;
//System.out.println(“+x+”+y+“+宽度+”+高度);
if(this.width>=1000/12&&this!=null){
节点+=1;
this.children[0]=新的四边形节点(x,y,width/2,height/2,id+1,this);
this.children[1]=新的四边形节点(x+width/2,y,width/2,height/2,id+2,this);
this.children[2]=新的四边形节点(x,y+height/2,width/2,height/2,id+3,this);
this.children[3]=新的四边形节点(x+width/2,y+height/2,width/2,height/2,id+4,this);
}
}
我觉得这个概念很难理解

想法:

  • 单元格的递归分区,因为:

    • 该单元格包含固定数量的基元
    • 发生了最大分区计数
  • 从整个场景的边界框开始

  • 递归:如果单元中的基元太多,则分割单元
  • 如果房间是空的,则不分区(自适应分区)
  • 几何体所在的精细分区
提示:由于Hirachy中有许多上下移动,所以遍历相对昂贵

  • 将基本体保存在内部节点或叶中
遍历: -使用根的轴对齐边界框进行测试(第一个:整个场景)

提示:第一次命中不能是最近的

简言之,这就是四叉树或八叉树(3D)的原理。我这里有一张cg幻灯片,上面用图片描述了它,但我不想全部上传。我想这不是你问题的全部答案,但可能有点帮助