私はボールと長方形を持っています。ボールは移動できますが、長方形は固定されています (質量 = 無限)。
ボールには、位置、速度、半径、質量があります。
長方形には、位置、幅、高さがあります。
衝突時に衝突を検出して正しい応答を計算する関数は既にありますが、正しい応答を計算する前に交差を解決するのに問題があります。イメージでは:
http://i.stack.imgur.com/Xq5Vk.png
私はJavaを使用しています。
編集:このアルゴリズムを使用して解決:
- 長方形の境界とボールの間の最も近い点 (私は P と呼びます) を計算します (Clamp 関数で簡単に実行できます)。
- ボールの中心点 (C と呼びます) と P を結ぶベクトル (n と呼びます) を計算します (ベクトルの成分は (Px - Cx, Py - Cy) です)
- 交点の「長さ」を計算します (私はこれをオフセットと呼びます) (ball.radius - n.length)
- n を正規化し、オフセットを掛けます。
- ボール位置ベクトルから n を引きます。
Java コードで:
private void resolveIntersectionWith(Ball ball){
double closestX = clamp(ball.position.x, left(), right());
double closestY = clamp(ball.position.y, top(), bottom());
Vector n = new Vector(closestX - ball.position.x, closestY - ball.position.y);
double offset = ball.radius - n.length;
n.normalize().multiply(offset);
ball.position.subtract(n);
}