‘壹’ 怎么检测不规则图形的碰撞。求代码,如矩形与平行四边形的碰撞。
很简单啊!将平行四边形分成两个三角形或者两个三角形和一个矩形不久可以了
‘贰’ 游戏中,使用矩形碰撞如何判断碰撞具体位置急急急急!!!
我也碰到过这个问题,近期准备做个2D的ACT游戏,想到了一个方法。如图:在没碰撞之前,假设矩形B向上运动,碰撞后矩形B与矩形A相交,如果在游戏中记录下矩形B碰撞之前的位置,若发现满足这样的条件(这里用rectA代表“碰撞前”矩形A,rectB代表“碰撞前”矩形B),即rectB.bottom-rectA.bottom>(rectB.bottom-rectB.top),就说明矩形B是因为“向上”运动才碰到矩形A的,这样就可以判断出矩形B碰撞了矩形A的底部,其他情况同理。
‘叁’ 一个简单的多矩形碰撞算法,有快于N^2的方法吗
肯定有啊,一般这种东西都是具体情况具体分析的
一般处理碰撞可以用扫描线算法,也就是固定分辨率的长宽高扫描。这样的话最坏复杂度取决于图像分辨率大小。如果放在数值处理上,(也就是只判断相交与否)那么可以首先将矩形存储为四个顶点的坐标,然后对坐标离散化处理。之后再作扫描线。算法复杂度会较N^2有很大提高。特别是在处理非特定数据时,算法如果不退化的话会很快的。
‘肆’ 碰撞检测.矩形,圆,扇形 之间的有没有产生碰撞的算法
你可以吧地图分割成一小格一小格的(用数组表示),存在物体则该数组元素值为1,不存在则为0。移动时,检测碰到的格子的值,就可以知道是否发生碰撞了。
‘伍’ c++ 游戏碰撞检测怎么做
在游戏开发中,经常需要进行碰撞检测算法的实现,例如判断前面是否有障碍以及判断子弹是否击中飞机,都是检测两个物体是否发生碰撞,然后根据检测的结果通过碰撞检测算法做出不同的处理。
进行碰撞检测算法的物体可能有些的形状和复杂,这些需要进行组合碰撞检测,就是将复杂的物体处理成一个一个的基本形状的组合,然后分别进行不同的检测。
下面简单介绍一下两种最基本的形状进行碰撞的时候进行的处理。
1、矩形和矩形进行碰撞检测算法
一般规则的物体碰撞都可以处理成矩形碰撞,实现的原理就是检测两个矩形是否重叠。我们假设矩形1的参数是:左上角的坐标是(x1,y1),宽度是w1,高度是h1;矩形2的参数是:左上角的坐标是(x2,y2),宽度是w2,高度是h2。
在检测时,数学上可以处理成比较中心点的坐标在x和y方向上的距离和宽度的关系。即两个矩形中心点在x方向的距离的绝对值小于等于矩形宽度和的二分之一,同时y方向的距离的绝对值小于等于矩形高度和的二分之一。下面是数学表达式:
x方向:| (x1 + w1 / 2) – (x2 + w2/2) | < |(w1 + w2) / 2|
y方向:| (y1 + h1 / 2) – (y2 + h2/2) | < |(h1 + h2) / 2|
在Java ME程序中,只需要将上面的条件转换成代码就可以实现了。
但是矩形碰撞只是一种比较粗糙的碰撞检测算法,因为很多实际的物体可能不是一个规则的矩形。
下面介绍一下圆形碰撞。
2、圆形和圆形的碰撞检测算法
圆形和圆形的碰撞应该说是一种最简单的碰撞,因为在数学上对于两个圆形是否发生重叠,有计算两个圆心之间的距离的公式。那么条件就变为:计算两个圆心之间的距离是否小于两个圆的半径和。
假设圆形1的左上角坐标是(x1,y1),半径是r1,圆形2的左上角的坐标是(x2,y2),半径是r2。
因为MIDP1.0中没有浮点数,而且浮点数的运算比较慢,所以我们将条件做一个简单的变换:对于条件的两边都进行平方,这样就去掉了开方的运算步骤。
下面是数学表达式:
(x1 – x2)2 + (y1 – y2)2 < (r1 + r2)2
在Java ME程序中,只需要将上面的条件转换成代码就可以了。
上面介绍的只是最基本的碰撞检测算法的实现,而实际的编程过程中遇到的碰撞检测问题要比这些复杂很多,还需要其他形式的检测,还需要进行更加深入的学习。
‘陆’ pygame 可检测两矩形碰撞时,一矩形被碰撞的边的函数
pygame.sprite.collide_rect()
‘柒’ 请问有什么高效简便的矩形碰撞算法
那个时轴对称aabb的碰撞,你旋转后就不灵了,旋转后只能视为两个多边形求了,要么利用物理引擎求,要么自己写算法求。如果要求效率不高,直接迭代边求交最简单的方法