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

ответ

Смежные вопросы