碰撞检测
既是物体之间的交互运动。这需要确定物体间何时发生了碰撞。原理:两个物体或几个物体是否有在同一时间内某个部分处在了同一位置上。
拿来一个物体,绕着它画一个矩形。用矩形包围物体就是我们所熟知的矩形边界
确认使两个物体分开的最小距离,再看看当前距离,比较两者的大小。
基本的多物体碰撞检测方法
var numObjects:uint = 10;for (var i:uint = 0; i < numObjects ‐ 1; i++) {
// 使用变量 i 提取引用
var objectA = objects[i];
for (var j:uint = i+1; j<numObjects; j++) {
//使用变量 j 提取引用
var objectB = objects[j];
//在 objectA 与 objectB 之间进行碰撞检测
}
}
坐标旋转
如果物体要绕着某一点旋转,并且以物体本身的位置作为旋转的起点,这个公式只需要给出物体距离中心点的相对 x,y 坐标和旋转的角度。它就会返回物体相对于中心点的新的坐标位置。
x1 = cos(angle) * x - sin(angle) * y;
y1 = cos(angle) * y + sin(angle) * x;
角度反弹
运动物体在碰撞到有角度的平面时,角度的变化。1.确实何时越过边界。
2.直接在边界上重置物体的位置。
3.改变碰撞轴上的速度。
先把斜面旋转成平面,然后执行反弹,最后再把它旋转回去。意味着旋转斜面,旋转物体坐标,再旋转物体速度向量
撞球物理
质量是物体所承受速度大小的测量单位。
物体的质量越大,这个物体就越难移动,也不易改变其本身的运动(减慢,加速或改变方向)。
质量也与加速度和力有关。物体质量越大,给它加速度的力就越大。
动量是由物体的质量和速度构成的,是质量与速度的乘积。动量通常用字母 p 表示,质量用 m 表示,速度用 v 表示。
p = m * v
完整地描述动量,可以说5 公斤 * 20 米/秒 角度为 23 度的方向运动。
动量守恒才是碰撞反应的实际原理。
在碰撞之前,一个物体以 A 速度运动,另一个
物体以 B 速度运动。碰撞之后,该物体以 C 速度运动,另一个物体以 D 速度运动。
在系统中,碰撞前的动量总合与碰撞后的动量总合相等。
系统是指一个封闭系统,也就是不受其它外力影响的系统。换句话讲,也就是可以忽略除实际碰撞以外的一切。
对于我们而言,只关注两个物体之间的反作用力,系统总是以物体 A 和物体 B 这样的形式出现。系统的总动量
就是由系统中所有物体的动量结合而成。
momentum0 + momentum1 = momentum0Final + momentum1Final
或者:
(m0 * v0) + (m1 * v1) = (m0 * v0Final) + (m1 * v1Final)
动能公式
KE = 0.5 * m * v2(2次幂)
碰撞前的动能刚好与碰撞后相同
(m0 * v02) + (m1 * v12) = (m0 * v0Final2) + (m1 * v1Final2)
所以,解方程组得:
(m0 – m1) * v0 + 2 * m1 * v1
v0Final = ----------------------------------------------
m0 + m1
v1Final = ---------------------------------------------
m0 + m1
两个轴上的动量守恒
两个物体之间的角度非常重要,这个角度称为碰撞角度。将速度按角度分解,对应速度应用动量守恒。