2017-03-19 70 views
1

私は数学ではあまりよくありません。そのためジェネリックアルゴリズムは他の質問でも見つかるかもしれませんが、私はJSでそれらを実装する方法を考え出すのは難しいです。JavaScriptで2つの線分が交差する点を見つけるにはどうすればよいですか?

var lineSegmentsIntersect = (x1, y1, x2, y2, x3, y3, x4, y4)=> { 
    var a_dx = x2 - x1; 
    var a_dy = y2 - y1; 
    var b_dx = x4 - x3; 
    var b_dy = y4 - y3; 
    var s = (-a_dy * (x1 - x3) + a_dx * (y1 - y3))/(-b_dx * a_dy + a_dx * b_dy); 
    var t = (+b_dx * (y1 - y3) - b_dy * (x1 - x3))/(-b_dx * a_dy + a_dx * b_dy); 
    return (s >= 0 && s <= 1 && t >= 0 && t <= 1); 
} 

しかし、私は本当に数学をよく理解していないので、私がいる:答えは線分が衝突している場合は、このように、チェックする方法を説明JSのための質問があります

この関数をどのように変更して交点が発生しているかの座標を明らかにする方法を見つけ出すのが難しい。

誰かが2つの線分間の正確な衝突点を検出する方法を説明できますか?

答えて

1

[x1 + t * a_dx, y1 + t * a_dy]で交点を計算できます。その後、自分の与えられた関数のreturn文を変更

が得られます。

// Returns intersection point if exists or false: 
 
var lineSegmentsIntersect = (x1, y1, x2, y2, x3, y3, x4, y4)=> { 
 
    var a_dx = x2 - x1; 
 
    var a_dy = y2 - y1; 
 
    var b_dx = x4 - x3; 
 
    var b_dy = y4 - y3; 
 
    var s = (-a_dy * (x1 - x3) + a_dx * (y1 - y3))/(-b_dx * a_dy + a_dx * b_dy); 
 
    var t = (+b_dx * (y1 - y3) - b_dy * (x1 - x3))/(-b_dx * a_dy + a_dx * b_dy); 
 
    return (s >= 0 && s <= 1 && t >= 0 && t <= 1) ? [x1 + t * a_dx, y1 + t * a_dy] : false; 
 
} 
 

 
// Example: 
 
console.log(lineSegmentsIntersect(0,0, 1,1, 0,1, 1,0)); // [0.5, 0.5] 
 
console.log(lineSegmentsIntersect(0,0, 1,1, 2,2, 2,0)); // false

関連する問題