Видимость определяется по такому же примерно принципу.
Точка с координатами (X,Y).
Находим вершину для которой значение (yj-Y)/(xj-X) минимально. (Если таких несколько, берем ближнюю).
Это первая вершина, которая видна. Вычисленное значение запоминаем как 'K'. Начинаем обход многоугольника по часовой стрелке.
Для каждой следующе вершины вычисляем то же значение - (yj-Y)/(xj-X).
Если оно больше 'K', то вершина видна. 'K' делаем равным новому значению.
Если меньше - вершина не видна, ничего не делаем, идем дальше.
Вообщем все.
Важное примечание: вышенаписанное справедливо если точка лежит левее самой левой вершины многоугольника или правее самой правой - X < min(xj) | X > max(xj).
Если min(xj) < X < max(xj), но при этом Y < min(yj) | Y > max(yj), то делаем тоже самое, но с выражением: -(xj-X)/(yj-Y)
Случай когда min(xj) < X < max(xj) и min(yj) < Y < max(yj) додумай сам.
Си - Решение задачи про многоугольник и точку.
Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill
Я прикитывал на бумажке для четырехугольника с самопересечением, т.е. вида:somewhere писал(а):Ну почему же, в этом случае внутренний угол получается больше 180, берется внешний
Код: Выделить всё
----
\ /
\/
/\
/ \
----
Я вот тоже прикинул, и понял что нужно брать сумму углов образованных фигур. В примере выше это два треугольника
It's a long way to the top if you wanna rock'n'roll
Тем не менее, я не исключаю, что, может быть, существует и формула для суммы углов многоугольника с самопересечениями, в которую входит количество этих пересечений. И которая при (количество самопересечений = 0) вырождается в 180 * (N-2).somewhere писал(а):Я вот тоже прикинул, и понял что нужно брать сумму углов образованных фигур. В примере выше это два треугольника
Увы, сам уже не помню
