直線じゃなくて線分が交差しているかどうか。

LineAは[x1,y1]-[x2,y2]、LineBは[x3,y3]-[x4,y4]とします。
直線の交差ではなく線分の交差を調べるのは媒介変数を利用して判定します。
r =((y4-y3)(x3-x1)-(x4-x3)(y3-y1))/((x2-x1)(y4-y3)-(y2-y1)(x4-x3))
s =((y2-y1)(x3-x1)-(x2-x1)(y3-y1))/((x2-x1)(y4-y3)-(y2-y1)(x4-x3))

判定
・分母が0になるときは平行。
・0<r≦1 & 0<s≦1 なら交差する。
・その他は線分を延長すれば交差するけれど線分自体は交差しない。

2つの線分が交わるかどうかを調べる方法が知りたいです。 線分は2つの頂点を結ん... - Yahoo!知恵袋

いままで自分のプログラムで使ってた式がいけないのか実装がまずかったのかわからないけど、これにかえたらうまく動いているっぽい。

Webにはいろいろな数式やらアルゴリズムやらが紹介されているけど、信頼性がわからないのが難点。
数式やアルゴリズムってのはちゃんと書籍とかにあたったほうがいいんだろうけど、探すのに時間がかかりすぎたり、読んでもわかりにくかったりしてそれはそれで難点がある。

tags: math

Posted by NI-Lab. (@nilab)