ピンボールバーの処理 ボールがバーの裏表どちら側に衝突したか外積を用いて調査
以前作成したピンボールバーのサンプルにまだもろもろバグがあるようで、そのバグの原因を解決するために、ボールがバーの裏表どちら側に衝突したかを調べる必要がでてきました。
ボールがバーの裏表どちら側に衝突したかを調べるには、ベクトルの外積の性質を利用します。
外積 参考ページ
ピンボールのバーの中心点からバー先端方向へのベクトル(ベクトル1)と、ボール軌道のベクトル(ベクトル2)との外積を調査します。ベクトル1と2の外積が 0 より大きい場合 ボールはバーの反時計回り方向から衝突しており、 0 より小さい場合 ボールはバーの時計回り方向から衝突しているものとします。
サンプル
青点 : ボール現在位置 紺点 : ボール移動予定位置 青点から紺点の線 : ボール軌道 : ベクトル2 緑点 : バー角度調整用 ピンク点 : バー中心点 赤点 : バー先端 ピンク点から赤点 : バーライン : ベクトル1
画面各点はドラッグ&ドロップが可能です。
ベクトル1とベクトル2から成すラインが交差している場合、各々のベクトルの外積を取得しています。左上の数値がベクトル1とベクトル2の外積で得られた値です。