Re: Си - Решение задачи про многоугольник и точку.
Добавлено: 28 май 2008, 16:21
Видимость определяется по такому же примерно принципу.
Точка с координатами (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) додумай сам.
Точка с координатами (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) додумай сам.