2017-03-19 4 views
1

저는 수학에별로 좋지 않습니다. 그래서 다른 질문에서 일반적인 알고리즘을 찾을 수는 있지만, JS로 구현하는 방법을 찾는 데는 어려움이 있습니다.JavaScript에서 두 선분이 교차하는 지점은 어떻게 찾습니까?

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에 대한 질문이 있습니다

이 func을 변경하여 교점이 발생하는 좌표를 표시하는 방법을 알아내는 데 어려움이 있습니다.

누군가 두 선분 사이의 정확한 충돌 지점을 감지하는 방법을 설명 할 수 있습니까?

답변

1

[x1 + t * a_dx, y1 + t * a_dy]을 통해 교점을 계산할 수 있습니다. 다음 주어진 함수의 반환 문을 수정

는 산출 :

// 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

관련 문제