• 締切済み

レイの交差判定の式

http://hakuhin.hp.infoseek.co.jp/main/as/collision.html#COLLISION_00 上のサイトのレイの交差判定のところで、 『とりあえず下の式で t が求まります var d = -(ax * nx + ay * ny); var t = -(nx * x + ny * y + d) / (nx * dx + ny * dy);』 という式があるのですが、dがなにを表していて、 どうしてtがそういう計算式になるのかがわかりません どういう理由でそうなるのか教えてください

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

これ, 「点と直線の距離」だと思います. 直線 ax + by + c = 0 と 点 (p, q) との距離は |ap + bq + c|/√(a^2+b^2) であらわされます. この直線の場合, ベクトル (a, b) が法線です. 今の図の例だと法線ベクトルが (nx, ny) なので直線AB は nx x + ny y + c = 0 と表すことができます. c の値は「この直線が点 A を通る」ことで c = -(nx ax + ny ay) と求まります. つまり, そこの d です. そして, 「レイの発射点から直線AB までの距離」は正規化された法線ベクトルを使っていることから |nx x + ny y + c| と書けます. 問題のパラメータ t は, 本質的には「この距離が, レイの移動ベクトル (dx, dy) を法線方向に射影したときの長さの何倍か」ということを表しているので, (dx, dy) を射影した長さが求まればいいということになります. ここでも法線ベクトルが正規化されているので, 射影した長さが |nx dx + ny dy| で求まることはそれほど難しくありません. 元の式では絶対値が付いていませんが, これは方向を「じ~っと」眺めればわかります. 発射点から直線に垂線を下し, レイの移動ベクトルをその垂線に射影してみるとイメージできると思う.

関連するQ&A