« タスクのプライオリティ | メイン | LAMPのライセンス »

2005年09月22日

System Sara 開発日誌:: 線の当たり判定と交点

    

斜めはないと思っていたけど、各フレームで敵の移動ベクトルと固定ラインが当たらないようにしないとまずいと思って線の当たり判定を探して見つけたが、その前に実際に移動後の位置が内側か外側かの判定のみで移動可不可を判定するようにして敵を動かしてみた。
細い領域を見事に突っ切っていく敵。。。
やっぱり、移動ベクトルが固定ラインと当たらないようにしないとダメか。
実際の処理方法は、線と線の当たり判定にあった。
久しぶりにベクトルの計算を思い出しながら式の変形を追った。
で、このソースをもらうことにした。

だけど、当たり判定だけでなく、交点が必要なときもある。
と言うことで今度は交点計算を思い出してみる。
y = ax + b (1)
y = cx + d (2)
と言う連立方程式を解けば交点が出てくるはず。
a = c の時は、平行なので交点は存在しない。
2点の座標値からy = ax + bの式の形にするには、yの差分 / xの差分で傾きを出し、b = y - axへどちらかの点を代入すれば出る。

連立方程式は、加減法か代入法で解けるはず。
加減法で解くと、(1)式から(2)式を引いて、yを消し、xの項を移項する。
すると、(c-a)x = (d-b) ってな感じになる。
で、x = (d-b) / (c-a) にして、初めのy = の式に代入、整理。
y = (bc - da) / (c - a)
を解けば、y値が出る。
xは、a=0なら x = (y - d) / cで、そうでない時は x = (y - b) / a
両方が0と言うことは平行でない限りないので、どちらかで解ける。
片方の式がx = bなどの時は、もう片方の式に直接代入すれば出る。
誤差を考えると割算は出来るだけ後でやった方がいいけど、そんな精度は必要ないかな。
ただ、これだけでは交差するかどうかわからない。
交点が両方の線分の中にあるかどうか判定しなければならないが、前述の当たり判定を先にやって当たったら交点を計算する方が楽そうだ。
ほとんどの場合は当たらないはずなので、その方が効率的のようにも思える。
と言うことで、そのような方法で実装することにした。



投稿者 Takenori : 2005年09月22日 23:50




comments powered by Disqus
Total : Today : Yesterday : なかのひと