過去3回、質点の運動(等速直線運動、等加速度運動、放物運動)を微少時間刻みで考えたが、今回は衝突を考えてみようと思う。衝突のモデルとしてKelvin–Voigtモデルというものを導入する。
出典:Wikipedia
今回はひとまず壁との衝突を考えるが、要素と壁が衝突したときに、上図のモデルが接触箇所に存在すると仮定して計算する。接触の判断は要素中心と壁との距離が、要素半径より小さければ接触していることになる。つまり、
これを満たすとき、要素と壁は衝突している。ここで、は要素の座標、
は壁の座標、
は要素の半径。
とし、をモデルバネの縮みと見なす。このとき、ばね定数を
とすると、バネによる力
は
と表せる。また、ダッシュポッドの粘性係数をとすると、ダッシュポッドによる力
は速度に比例し、速度と逆方向に働くので、
と表せる。ここで、は現在の速度である。
と
をあわせたものが、要素に働く力
になるので、
と
の向きは考える必要がある。
現在の力がわかったので、要素の質量をとすると、要素の現在の加速度
は
となる。
ここまでできれば、後は等加速度運動の時と同じ処理になる。この部分をコードにすると以下のような具合。
- if(wp1 - xc < r){ // 右壁
- double dx = r - (wp1 - xc); // 壁と要素の重なり
- fc = -dx * k - c * vc;
- }
- if(xc - wp2 < r){ // 左壁
- double dx = r - (xc - wp2); // 壁と要素の重なり
- fc = dx * k - c * vc;
- }
- ac = (fc + fp) / (2 * m);
ばね定数k=10000、粘性係数d=20としたときの結果は次のようになる。
コメント