判定に使用する情報
点A, 点B, 点C, 点D の座標(x,y)は全て数値で分かっていることにする。
それらの座標から交差しているかを判定するプログラムをjavascriptで書く。
考え方
前回の記事(ベクトル)を基礎として使用します。
ベクトルCA + ベクトルCB の第一象限に点Dが存在し、
かつ、三角形CABの外側に点Dがある場合に、線分ABと線分CDが交差していると言える。
と、思う。
javascript で判定
// 判定に使う点A B C D
var A = [0, 0],
B = [5, 0],
C = [1, 0.1],
D = [12, 1];
// 4つの頂点を与えると、そこから判定をし、trueかfalseを返してくれる関数。
function check(params){
var OPx = params.d[0] - params.c[0],
OPy = params.d[1] - params.c[1],
OAx = params.a[0] - params.c[0],
OAy = params.a[1] - params.c[1],
OBx = params.b[0] - params.c[0],
OBy = params.b[1] - params.c[1];
// 連立方程式を計算。
s = ( (OPx * OBy) - (OBx * OPy) ) / ( (OAx * OBy) - (OBx * OAy) );
t = ( (OPy * OAx) - (OPx * OAy) ) / ( (OAx * OBy) - (OAy * OBx) );
// 交差していたら trueを返す。
if( s>0 && t>0 && s+t>=1) return true;
// 交差していなければ falseを返す。
else return false;
}
// チェック開始
var test = check({
a: A,
b: B,
c: C,
d: D
});
console.log(test); // true or false が出力される。
まとめ
自分で考えた方法なので、間違っているかもしれません。。
他にも方法があると思うので、メモ的な感じで投稿です。