我正在做一个项目,其中有一个房间充满了不同形状的物体。
我正在用油漆画房间,画面全是白色,并将所有墙壁/障碍物涂成红色。
我正在使用绘画将每个可移动对象绘制在不同的文件中。
现在,我将房间的地图和对象作为1和0的矩阵加载到我的程序中。我有一个矩阵用于第一个矩阵,另一个矩阵用于我在房间里加载的每个对象。
物体可以在房间内自由移动,移动任何距离,任何角度,并允许自己旋转。我该如何设计一种方法,允许我以任何角度旋转物体并仍然能够检测到碰撞?我的意思是,如果物体可以向上,向下,向左和向右移动,我可以检查矩阵以查看它们是否与1中的任何一个“重叠”。但是如果我想旋转物体,让我们说,10度,我无法看到如何将其转换为矩阵并将其与墙的矩阵进行对比。
我是否应该删除矩阵表示并创建数学区域并处理这个问题,因为我们在IR ^ 2演算中使用某些库来处理它?在计算方面它不是很昂贵吗?
这样做的简单方法是什么?它不需要是一流的方法,但我将它用于复杂的算法,我不希望在每次迭代时都失去太多的计算时间。
答案 0 :(得分:1)
这可能无法完全回答您的问题,但可能有所帮助。当我在一个我正在写的小游戏中进行碰撞检测时,我会在物体周围碰撞“碰撞盒子”以及更复杂的检测方法。在两个命中框重叠之前,您不必使用复杂方法,然后您只需计算两个对象的碰撞,而不是每个对象与空间中的每个其他对象。
答案 1 :(得分:1)
它足够快(Duron 600 MHz)并且它非常容易实现。
对于你的场景,你似乎有很多动态对象(我的项目中只有摄像头,作为一个移动对象)所以它可能有助于拥有某种空间分区技术,如四叉树的BSP树。
答案 2 :(得分:0)
我建议将两个物体近似为半径为R1和R2的球体(碰撞舱)。
如果是这种情况,您需要考虑:
1 - 两个身体的半径。在这种情况下,敌人将是半径为0的点,子弹将具有半径getBulletSize();
2 - 动画帧期间子弹和敌人的速度在0< = t< = 1之间。
当| r1 + r2 |发生碰撞时< d,其中d是两个物体质心之间的距离。
d为P(t)-Q(t),Q和P为两个物体的质心。 P(t)= P0 + Vp t。 Q(t)= Q0 + Vq t。
Vp = P1 - P0; Vq = Q1 - Q0;
=> d = P(t) - Q(t)
求解情况(R1 + R2)^ 2 =(P(t) - Q(t))^ 2将产生碰撞时间。不要害怕这个公式!它解决了一个简单的二阶多项式,其二次方程式将解决t。如果B ^ 2>公式中为0,当时间最小时,第一次发生表面碰撞!
碰撞案例:
在以下情况下发生:
1)0 <= t <= 1。
初步检查:
2)最小d(半径条件的导数= 0)必须<1。 R1 + R2
您还可以通过使用叶密度(每个单元格的基元数)条件创建对象网格的边界体积层次来增强此功能。然后,由于胶囊顺序,初始碰撞测试将从根向下迭代以处理过度近似。