LoginSignup
6
7

More than 5 years have passed since last update.

線分ABと線分CDが交差しているか判定する。

Last updated at Posted at 2015-05-18

判定に使用する情報

点A, 点B, 点C, 点D の座標(x,y)は全て数値で分かっていることにする。
それらの座標から交差しているかを判定するプログラムをjavascriptで書く。

考え方

前回の記事(ベクトル)を基礎として使用します。

IMG_1274.JPG

ベクトル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 が出力される。

まとめ

自分で考えた方法なので、間違っているかもしれません。。
他にも方法があると思うので、メモ的な感じで投稿です。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7