Страница 1 из 2
Си - Решение задачи про многоугольник и точку.
Добавлено: 27 май 2008, 02:03
2fed
Помогите, пожалуйста, решить типовую задачу повышенной сложности на Си:
На плоскости координатами своих упорядоченных вершин заданы произвольный многоугольник без самопересечения и точка а, находящаяся вне многоугольника. Определить число вершин, видимых из точки а.
Re: Си - Решение задачи про многоугольник и точку.
Добавлено: 27 май 2008, 08:26
un4-funeral
эм...соединяешь эту точку с вершинами
если какая-то прямая пересекает сторону(до этой вершины) многоугольника, то не видна точка
Re: Си - Решение задачи про многоугольник и точку.
Добавлено: 27 май 2008, 11:31
Хыиуду
un4-funeral писал(а):эм...соединяешь эту точку с вершинами
если какая-то прямая пересекает сторону(до этой вершины) многоугольника, то не видна точка
Тут весь вопрос, как определить пересечение. Можно, конечно, по формулам аналитической геометрии, но, думается, есть какой-то способ поизящнее
Re: Си - Решение задачи про многоугольник и точку.
Добавлено: 27 май 2008, 15:34
2fed
А как задать многоугольник без самопересечения?
Re: Си - Решение задачи про многоугольник и точку.
Добавлено: 28 май 2008, 11:34
Хыиуду
Тривиальный пример - любой треугольник
Re: Си - Решение задачи про многоугольник и точку.
Добавлено: 28 май 2008, 12:09
2fed
нет, это слишком просто. в своей проге я делаю запрос на количество вершин. затем у меня рандомно генерируются вершины. Для начала мне нужно, чтобы эти вершины образовали многоугольник без самопересечений. может быть это как-нибудь через площадь можно сделать?
Re: Си - Решение задачи про многоугольник и точку.
Добавлено: 28 май 2008, 13:17
Albor
2fed писал(а):нет, это слишком просто. в своей проге я делаю запрос на количество вершин. затем у меня рандомно генерируются вершины. Для начала мне нужно, чтобы эти вершины образовали многоугольник без самопересечений. может быть это как-нибудь через площадь можно сделать?
Можно применить алгоритм пересечения отрезков см.
здесь, но задача усложнится при количестве точек больше 3х, так как соединить их можно по разному, а значит, нужен перебор вершин и нахождение того варианта, который не даст самопересечений, либо не забракует данный набор вершин.
Re: Си - Решение задачи про многоугольник и точку.
Добавлено: 28 май 2008, 13:19
BBB
2fed писал(а):Для начала мне нужно, чтобы эти вершины образовали многоугольник без самопересечений. может быть это как-нибудь через площадь можно сделать?
Смутно всплывает из подсознания, что можно через подсчет суммы величин внутренних углов.
Сумма величин внутренних углов N-угольника равна 180°(N-2).
Видимо, в многоугольнике, где стороны пересекаются, эта формула не работает.
Re: Си - Решение задачи про многоугольник и точку.
Добавлено: 28 май 2008, 14:29
somewhere
Ну почему же, в этом случае внутренний угол получается больше 180, берется внешний
Re: Си - Решение задачи про многоугольник и точку.
Добавлено: 28 май 2008, 15:30
chur
Многоугольник строим так.
Вершины заданы их координатами (x,y). Соответсвенно, имеем массив M[j]=(xj, yj).
Находим нижнюю точку - min(y) (если их несколько, то берем любую)
Её координаты - (x0,y0)
Остальной массив сортируем по возрастанию значения (xj-x0)/(yj-y0). Геометрически, это выглядит как обход лучом из точки (x0,y0) слева направо. Всё. В отсортированном массиве точки расположены по порядку по часовой стрелке начиная с нулевой.
(Возможные нюансы: вырождения какого-либо угла в 180 градусов и проверка деления на ноль)
По видимости - ща додумаю