PhysObject
物理オブジェクト
物理的な「物体」を表現するクラスです。
2次元的な位置を変数として持ち、Phystemのループの中で位置変数を(運動方程式に従って)変えていきます。 運動方程式を出すためには「力」が要りますが、各オブジェクトが他の物体にどのような力を及ぼしているかを決めるのが関数interactionForce(to)です。これを定義することで物体の間にどんな力が働くかをプログラムできます。
計算するときに二つの物体間の距離が必要になることが多いので、displacementFrom(from)という関数が用意してあります。
class PhysObject
メンバー変数
col :色
r :半径
touchPoint Vector:マウスなどで触れられた場所 メンバー関数
constructor(ps, x, y, c, rr)
ps:自分の属する「系」
x,y:初期位置(省略可)
c:色(省略可)
rr:半径(省略可、円形じゃないときは意味がない)
draw() 描画:デフォルトでは、単に丸を描きます(継承先でオーバーライドすること)。
drawAndTrace() 描画した後軌跡をログする。
interactionForce(to)
相互作用力。「to」へと及ぼす力を返す。デフォルトでは$ \vec 0を返す。
displacementFrom(from)
変位べクトル。「from」で示すオブジェクトから自分までのベクトルを返す。現在位置ではなく、△t後の位置で計算する。
ここから下は、軌跡の表示のためのメンバー関数。内部でTraceを作って呼んでいる。 enableTrace(c,i)
軌跡を保持できるようにする。
cは軌跡を描くときの色(デフォルトはrgba(0,80,80,0.3)。
iは保持できるステップ数(デフォルトは10000)
最初にenableTrace()を呼ぶと(内部で自動的にtraceON()も呼ばれるので)、自動的に画面に軌跡が見えるようになります。
traceON()
traceOFF()
traceToggle()
軌跡の表示をオン・オフ・トグルする。
traceClear()
ここまでの軌跡データをクリアする。
ここから下はドラッグ関係のルーチンで、最初のenableDrag()以外は、外から呼び出すことはないはず。
enableDrag()
ドラッグ可能にする。これが呼ばれてないとマウスで押されても反応しない。
inTouch(x,y)
マウスで(x,y)が押されたとして、自分が触られたかどうかを判定する。
startDrag(j,x,y)
j番目のドラッグポイントIDで(x,y)でタッチされたとして、ドラッグ開始。
pushDragP()
ドラッグされている場所を保存する。
getDragP(deltaT)
保存しておいたドラッグ点を取り出す。deltaTは現在使っている時間間隔(Δt)
adjustPoint(pp)
ドラッグされている場所が「ドラッグできない場所」だったときは、それを補正する。
補正の結果を返す。
resetDrag()
ドラッグ終了