ゲームで衝突検出を行っています。すべての面が直交しているため、移動するオブジェクトが障害物のどの面に衝突したかを判断するだけで済みます。2 つのオブジェクトの交点を定義する四角形と、動くオブジェクトの速度と移動方向を表すベクトルがあります。
交点が線になるまで、移動オブジェクトのベクトルに沿って交点の長方形を変換する必要があると思います。そうすれば、どの面が最初に衝突したかがわかります。
ただし、これを数学的にプログラム的に行う方法はわかりません
ゲームで衝突検出を行っています。すべての面が直交しているため、移動するオブジェクトが障害物のどの面に衝突したかを判断するだけで済みます。2 つのオブジェクトの交点を定義する四角形と、動くオブジェクトの速度と移動方向を表すベクトルがあります。
交点が線になるまで、移動オブジェクトのベクトルに沿って交点の長方形を変換する必要があると思います。そうすれば、どの面が最初に衝突したかがわかります。
ただし、これを数学的にプログラム的に行う方法はわかりません
(オブジェクトの内側にある障害物の角) から (障害物の内側にあるオブジェクトの角) へのベクトルを計算します。移動ベクトルがこのベクトルのどちらの「側」にあるかに関係なく、最初に触れた「側」が得られます。角度が同じ場合は、角が最初に接触します。
たとえば、ここでは移動ベクトルが約 260 度で、計算されたベクトルは約 240 度です。計算された動きから反時計回りで 20 度、時計回りで 340 度です。したがって、反時計回りの側 (下) が最初に衝突しました。
どちらの側が問題で、どちらが「時計回り」と「反時計回り」かを判断できる必要があります。これが簡単であることを願っています。
速度ベクトルの縦横比を交差長方形の縦横比と比較できます。
この特定の例では、速度ベクトルが交差長方形よりも急勾配である場合 (つまり、より高くて細い長方形を定義する場合)、衝突は底面で発生しました。
速度ベクトルが浅い場合、衝突は移動する長方形の左面にありました。
速度ベクトルが交差長方形と同じ縦横比である場合 (つまり、速度が交差長方形の対角線上にある場合)、それらはコーナーで衝突しました。
実はわかっていたのかもしれません…。
オブジェクトの長方形上にない交差長方形上の点を見つけます
そこからベクトル方向に線を引く