2013-05-17 2 views
1

이것은 JS 문제보다 수학적이지만 더 도움이되기를 바랍니다.JS로 폴리곤에 웨이 포인트 만들기

다각형 주위에 경유지를 만들려고합니다.에 을 걸어 줄 수 있어야합니다. 나는 다음과 같은 경우를 (사실이 방법이 불가능 의미) 관찰해야합니다

내 스크립트에서

polygon   , 나는 동시에 사례 2와 사례 (7)을 관찰하는 문제가있다. 다각형은 5 개의 객체 (점)가있는 배열입니다. A와 B는 빨간색 선의 점입니다. 여기 내 jsFiddle을 찾을 수 있습니다.  

// check if point is in polygon 
var intersectLinePolygon = function(A, B, poly){ 
    var result = false; 
    for (var i = 0; i < poly.length; i++){ 
    var C = { 'x':poly[i].x, 'y':poly[i].y }; 
    var D = {}; 
    // if it's not the last point, take the next 
    if (i != poly.length-1){ D.x = poly[i+1].x; D.y = poly[i+1].y; } 
    // if it's the last point, take the first 
    else { D.x = poly[0].x; D.y = poly[0].y; } 
    if (intersectLineLine(A, B, C, D)){ result = true; } 
    } 
    return result; 
}; 

// check if there is an intersection between two lines 
var intersectLineLine = function(A, B, C, D){ 
    if (
    (B.x == C.x && B.y == C.y) || 
    (B.x == D.x && B.y == D.y) || 
    (A.x == C.x && A.y == C.y) || 
    (A.x == D.x && A.y == D.y) 
){ return false; } 
    else { return (ccw(A,C,D) != ccw(B,C,D) && ccw(A,B,C) != ccw(A,B,D)); } 
}; 

// helper function for intersectLineLine 
var ccw = function(A, B, C){ return ((C.y-A.y)*(B.x-A.x) > (B.y-A.y)*(C.x-A.x)); }; 
+1

, 당신은 세그먼트가 아닌 볼록 다각형 교차할지 어떨지를 테스트하는 알고리즘을해야합니까? – leonbloy

답변

관련 문제