レイと線の交差判定

レイと線の交差判定

ces さんの書込 (2007/01/29(Mon) 01:50)

レイと線の交差判定という表現でいいのかわかりませんが, 数式の計算でわからないことがありまして質問させて頂きます.

まず

にアクセスして頂いてページの上にあるメニューのFlashゲーム講座という ボタンを押してそこの下にある, ■交差判定について レイと線分とで当たり判定を取る という場所のリンクをクリックするとその内容について書かれた記事が読めます.

そこのページの真ん中より少し上のところにある, レイと線の交差判定 という部分の記事の内容が分かりません・・・.

弾丸となるもののベクトルと当たり判定となる線のベクトルを求めて, その当たり判定の線の法線を求め,正規化するところまではわかるのですが, その次の,「とりあえず下の式で t が求まります.」コメント部分の var d = -(ax * nx + ay * ny); var t = -(nx * x + ny * y + d) / (nx * dx + ny * dy); この式が何を行っているのかわからない状況です.

一体この2つの式は何を行っているのでしょうか…. (最初の式は最初の-(ax*nx+ay*ny)というのは内積を求めてるような違うような…) もしこういう公式など何処かに載っている用でしたらその場所を教えて頂けるだけでもとても助かります.

プログラムが関係あるのでここで質問して良いのかわかりませんが, すみませんがよろしくお願いします

Re: レイと線の交差判定

CO さんのレス (2007/01/29(Mon) 11:43)

ces さん,こんにちは.

該当ページ,数学的なことは適当に端折っているようですね. 点 (x,y) を点 P とします. td に元の式を代入してやります.すると

t = -\frac{(x-a_x)n_x+(y-a_y)n_y}{\vec{v}\cdot\vec{n}} = \frac{\vec{PA}\cdot\vec{n}}{\vec{v}\cdot\vec{n}}

と書き直せます. 分子は P点と直線ABのあいだの距離,分母は直線に垂直な方向の速さです( \vec{v}=(dx,dy) ).

距離 ÷ 速さ = 時間

なので,t は線に交差するまでの時間を表しています. いま 1フレームを単位時間にとっているので, 0 < t < 1 ならば交差する, 1 < t ならば,まだ交差しないということだと思います.

Re: レイと線の交差判定

ces さんのレス (2007/01/29(Mon) 15:00)

COさん,返信ありがとうございます. おかげ様でなんとなく全体の流れがつかめた気がします.

まだ理解したわけじゃありませんが後は自分でなんとかしようと思います. ありがとうございました.