万有引力で引き合う二つの物体のサンプル
二つの物体に反発力が働くようにするには、
まず、以下のように「Massive」というクラスを作ります。
code:js
class Massive extends DynamicalObject {
constructor(ps, x, y, vx, vy, m, c, r){
super(ps, x, y, vx, vy, m, c, r);
this.isMassive=true;
}
interactionForce(to) {
if( to.isMassive == true ) {
var r=to.displacementFrom(this);
var rlen2=r.lengthSquare();
var rlen=Math.sqrt(rlen2);
var rr=this.r+to.r;
if( rlen > rr ) {
return new Force(r.prod(-10*this.mass*to.mass/(rlen*rlen2)));
} else {
return new Force(r.prod(-10*this.mass*to.mass/(rr*rr*rr));
}
}
return new Force(new Vector(0,0));
}
}
なお、距離が0で逆自乗則に従っていると力が無限大になってしまうので、二つの球が接するところより近づくと距離に比例する力になるおうに切り替えています。
後はこのMassiveに属する物体を
code:js
M=new Massive(psystem,0,2,1,0,1,"rgba(255,0,0,0.5)");
m=new Massive(psystem,0,-2,-1,0,1,"rgba(0,0,255,0.5)");
M.enableDrag();
m.enableDrag();
のように二つ作って、ともにドラッグ可能にしたのち、psystem.start();してます。