反発力が働く二つの物体のサンプル
二つの物体に反発力が働くようにするには、
変えたところは、実は一箇所だけ。
code:js
M=new DynamicalObject(psystem,0,1,0,0,1,"rgba(255,0,0,0.5)");
m=new DynamicalObject(psystem,0,-1,0,0.5,1,"rgba(0,0,255,0.5)");
を
code:js
M=new Ball(psystem,0,1,0,0,1,"rgba(255,0,0,0.5)");
m=new Ball(psystem,0,-1,0,0.5,1,"rgba(0,0,255,0.5)");
Ballは、Ball同士の間で$ \vec r \mathrm e^{-r^2}という形の力が働くようになってます。 この力はBallどうしが所謂ガウス関数型$ \mathrm e^{-x^2}のポテンシャルを持っているとして、近づくと反発するように(遠いところではほぼ力が0になるように)しています。
ちょっとめり込んでしまうことが多いので、実際の運動とは違う感じになりますが(ボールが柔らかくて凹んでいるんだという眼で見てください)。
相互作用力を作っている部分のコードは
code:js
interactionForce(to) {
if( to.isBall == true ) {
var r=to.displacementFrom(this);
var rlen=r.lengthSquare();
var rr=this.r + to.r
return new Force(r.prod(1000*Math.exp(-9*rlen/(rr*rr))));
}
return new Force(new Vector(0,0));
}
です。