物理背景―――完全弹性碰撞的方程:
在AS中构造的collision 方程便是这样:
a)相对速度的写法:(计算更快)
function collision(mc1,mc2){
var v1temp=mc1.v;
var v2temp=mc2.v;
mc1.v=((mc1.m-mc2.m)/(mc1.m+mc2.m))*v1temp+(2*mc2.m/(mc1.m+mc2.m))*v2temp;
mc2.v=v1temp-v2temp+mc1.v;
}
b)完全的套用公式:
function collision(mc1,mc2){
var v1temp=mc1.v;
var v2temp=mc2.v;
mc1.v=((mc1.m-mc2.m)/(mc1.m+mc2.m))*v1temp+(2*mc2.m/(mc1.m+mc2.m))*v2temp;
mc2.v=(2*mc1.m/(mc1.m+mc2.m))*v1temp-((mc1.m-mc2.m)/(mc1.m+mc2.m))*v2temp;
}
c)加入了非弹性碰撞系数的碰撞函数:
function collision(mc1,mc2){//注意应用到程序中时看看是否要改成vx,vy等。
var e=1;//e的范围由0--1。
var v1temp=mc1.v;
var v2temp=mc2.v;
mc1.v=((mc1.m-e*mc2.m)/(mc1.m+mc2.m))*v1temp+((1+e)*mc2.m/(mc1.m+mc2.m))*v2temp;
mc2.v=((1+e)*mc1.m/(mc1.m+mc2.m))*v1temp-((e*mc1.m-mc2.m)/(mc1.m+mc2.m))*v2temp;
}
d)二维平面的内的动量守恒,把速度在x,y两个方向上分别进行动量守恒即可:
function collisionx(mc1, mc2) {
var e = 1; // e的范围由0--1。
var v1temp = mc1.vx;
var v2temp = mc2.vx;
mc1.vx=((mc1.m-e*mc2.m)/(mc1.m+mc2.m))*v1temp+((1+e)*mc2.m/(mc1.m+mc2.m))*v2temp;
mc2.vx = ((1+e)*mc1.m/(mc1.m+mc2.m))*v1temp-((e*mc1.m-mc2.m)/(mc1.m+mc2.m))*v2temp;
}
function collisiony(mc1, mc2) {
var e = 1; // e的范围由0--1。
var v1temp = mc1.vy;
var v2temp = mc2.vy;
mc1.vy= ((mc1.m-e*mc2.m)/(mc1.m+mc2.m))*v1temp+((1+e)*mc2.m/(mc1.m+mc2.m))*v2temp;
mc2.vy = ((1+e)*mc1.m/(mc1.m+mc2.m))*v1temp-((e*mc1.m-mc2.m)/(mc1.m+mc2.m))*v2temp;
}