まず、球(2Dの円)と線の間の衝突検出を計算するには、移動するボールの中心と線の間の垂直ベクトルを計算する必要があります。この距離を計算するには、次のことを行う必要があります。
したがって、上の図でdを計算するには、いくつかの手順を実行する必要があります。
- 線がパラメトリック方程式P(t)= S + t Vを使用していると仮定します。V は線の方向であり、(P2-P1)を減算することで得られることに注意してください。
- ピタゴラスから:
d ^ 2 = len(Q - S)^ 2-len(proj(Q - S))^ 2
次に、方程式を展開して次のようにします。少し複雑に見えますが、実際はそうではありません。
d = sqrt(len(Q - S)^ 2-len((Q - S)dot V)^ 2 / V ^ 2)
ここで、Qは円の中心であり、Sは線上の任意の点です。距離が円/球の半径よりも小さくなると、次のポイントで説明する衝突応答をトリガーする必要があります。
ボールをバウンスするために常にxまたはyコンポーネントを反転することは正しくありません。実行する必要があるのは、表面の法線ベクトルを計算し、その法線を反射の計算に使用する必要があるためです。次の方程式を使用したベクトル
R = 2 *(VドットN)* N - V
ここで、Rは反射ベクトル、Nは表面の法線、Vは速度ベクトルです。
45度の場合、表面の法線はN =(1,1,0)となり、法線の向き(位置または負)に応じて符号が異なります。