Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Collision detection 碰撞检测_Collision Detection - Fatal编程技术网

Collision detection 碰撞检测

Collision detection 碰撞检测,collision-detection,Collision Detection,我正在做一个项目,那里有一个房间,里面摆满了不同形状的物体 我正在用油漆画房间,画的全是白色,所有的墙壁/障碍物都是红色 我在不同的文件中绘制每个可移动对象,也使用绘画 现在,我将房间的地图和对象作为1和0的矩阵加载到我的程序中。我有一个矩阵用于第一个,另一个矩阵用于我加载到房间中的每个对象 物体将能够在房间内自由移动,以任何距离、任何角度移动,并允许自身旋转。我应该如何着手设计一种方法,使我能够将物体旋转任意角度,并且仍然能够检测碰撞?我的意思是,如果物体可以上下左右移动,我可以检查两个矩阵,

我正在做一个项目,那里有一个房间,里面摆满了不同形状的物体

我正在用油漆画房间,画的全是白色,所有的墙壁/障碍物都是红色

我在不同的文件中绘制每个可移动对象,也使用绘画

现在,我将房间的地图和对象作为1和0的矩阵加载到我的程序中。我有一个矩阵用于第一个,另一个矩阵用于我加载到房间中的每个对象

物体将能够在房间内自由移动,以任何距离、任何角度移动,并允许自身旋转。我应该如何着手设计一种方法,使我能够将物体旋转任意角度,并且仍然能够检测碰撞?我的意思是,如果物体可以上下左右移动,我可以检查两个矩阵,看看它们是否“重叠”了1中的任何一个。但是如果我想旋转物体,比方说,旋转10º,我看不出如何将其转换为矩阵,并对照墙的矩阵进行检查

我是否应该放弃矩阵表示,创建数学区域,并在IR^2演算中使用一些库来处理它?从计算角度来说,这不是很昂贵吗


做这件事的简单方法是什么?它不需要是一流的方法,但我将它用于一个复杂的算法,我不想在每次迭代中损失太多的计算时间。

这可能不会完全回答您的问题,但它可能会有所帮助。当我在写的一个小游戏中进行碰撞检测时,我会在物体周围有一个碰撞“命中框”,还有一个更复杂的检测方法。在两个命中框重叠之前,不必使用复杂方法,然后只需计算两个对象的碰撞,而不是空间中每个对象与其他对象的碰撞

几年前我也做过类似的事情。我的3D场景中的每个对象都由基本的墙/地板/天花板对象图案组成。每个对象都是一个具有自己边界球体的网格。然后,我首先测试我的相机的束球与每个对象的边界球以检测碰撞,如果它们发生碰撞,我会执行更精确的碰撞测试(网格/球体)

它足够快(Duron 600 MHz),而且非常容易实现


对于您的场景,您似乎有很多动态对象(我的项目中只有相机,作为一个移动对象),因此使用诸如四叉树的BSP树之类的空间分割技术可能会有所帮助。

我建议将两个实体近似为半径为R1和R2的球体(碰撞胶囊)

如果是这种情况,您需要考虑:

1-两个物体的半径。在这种情况下,敌人将是一个半径为0的点,子弹的半径为getBulletSize()


2-动画帧中子弹和敌人的速度在0到0之间。根据更精确的方法,我在不同的位图上绘制了我的对象和障碍物。然后,当我的点击框重叠时,我会扫描每个位图中的重叠像素,当我发现在障碍物地图和对象地图中都绘制了一个像素时,发生了一个错误。这只有在你不担心物体相互碰撞的情况下才有效。发生了*碰撞,是的,但如果你仔细阅读我写的内容,问题是我不能这样做,因为位图所包含的细节水平不足以旋转或任意角度的物体。啊,对,我的意思是,在你旋转你的对象并将其绘制到你的缓冲区(对象的位图)之后,你可以扫描碰撞。是的,但是你没有抓住要点。如果对象是一个2x2块,您将其旋转10º,如果您尝试绘制它,它将与您预期的不一致。实际上,我将有墙和障碍物,但可能只有一个移动的对象。因此,第二个文件中的每个对象实际上都是静态的?不,它们是移动的。但是一次只有一个移动的对象。