2016-12-05 12 views
-1

Каков правильный способ определения, являются ли обычные точки полигона внутри или снаружи многоугольника? У меня есть список строк (p1, p2, normalVec) в правильном порядке. Я думаю, что я должен сортировать их CW или CCW, а затем как-то вычислить нормальный вектор с направлением Vector моей линии. enter image description hereОпределите, являются ли полигоны нормали, точками внутри или снаружи полигона

Слева надо возвращаться Снаружи и справа внутри.

+1

Хорошо, и вы пытались сделать то, что вы объяснили выше? – nullpointer

ответ

0

Хорошо, я делаю это точно сейчас с помощью своего игрового движка. Что я делаю, чтобы определить, к какому пути обращен многоугольник, так это всегда вести треугольники одинаково. Для меня я всегда провожу их по часовой стрелке. Затем, используя эти треугольники, вычислите нормальный вектор. Вот мой код:

public static Point GetNormalVector(Point p1, Point p2, Point p3) 
{ 
    double diff_x = p3.GetExX() - p2.GetExX(); 
    double diff_y = p3.GetExY() - p2.GetExY(); 
    double diff_z = p3.GetExZ() - p2.GetExZ(); 
    double diff_x1 = p1.GetExX() - p2.GetExX(); 
    double diff_y1 = p1.GetExY() - p2.GetExY(); 
    double diff_z1 = p1.GetExZ() - p2.GetExZ(); 
    Point orig = new Point(0, 0, 0); 
    orig.SetX((diff_y * diff_z1) - (diff_y1 * diff_z)); 
    orig.SetY((diff_z * diff_x1) - (diff_z1 * diff_x)); 
    orig.SetZ((diff_x * diff_y1) - (diff_x1 * diff_y)); 
    NormalizeVector(orig); 
    return orig; 
} 

Теперь у нас есть нормальный вектор многоугольника. В зависимости от того, каким способом вы ведете свои треугольники, обычные векторы всегда будут указывать одинаково - в или из. Вы узнаете, в каком направлении они указывают, когда вы вычисляете нормальный вектор. Для меня, по часовой стрелке = вне, против часовой стрелки = в.

Ответит ли это на ваш вопрос?