簡単なcollision実装

物理シミュレーションを実装する際に物体の衝突を正確に表現するのは面倒なので、物体が重なったら斥力が生じるという実装を行います。
複数の物体が同時に衝突する場合も合力を求めれば良いだけなので簡単で、また物体同士の距離が近いほど斥力が大きくなるようにすれば弾性のような現象も再現できます。

// 疑似コード
// Object.position は vector
distance = object1.position.distance(object2.position)
minimumDistance = (object1.size + object2.size) / 2    // object1, 2 が円形の場合
isCollided = distance < minimumDistance

if isCollided {
  forceMagnitude = (minimumDistance - distance) / minimumDistance
  object1.forces.append(object1.position.sub(object2.position).sized(forceMagnitude))
  object2.forces.append(object2.position.sub(object1.position).sized(forceMagnitude))
}

画像1


この記事が気に入ったらサポートをしてみませんか?