Сап, как найти точку, которая гарантированно принадлежит многоугольнику? Нужен простой способ без дальнейших перепроверок.
Пробовал юзать среднее число от внутреннего угла <180 , однако оказывается это не всегда верно (если одна нога длинная, то там в общем все не ок). В общем-то теперь дополнительно проверяю пересечение еще.
Естественно такой способ полная хрень.
Возможно, вы знаете какую-нибудь простую внятную формулу, находящую какую-то стопудово внутреннюю точку (играющую определенную роль мб в каком-то другом алгоритме). В общем любое решение, любая точка гарантировано внутри прямоугольника, которую можно найти быстро без проверки линий на пересечение. Ваши варианты?
точки на гранях в оборот не берем
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
27
alexprey, очень часто. Я потому и прошу максимально дешевое решение для гарантированного поиска точки. Наверняка ведь что-то такое есть. Может что-то минимаксное.
29
Devion, часто строятся произвольные многоугольники и нужно найти точку вхождения... хмм как то странно. А мб правило какое нибудь простое для построения? так проще будет сориентироваться

хммм, пробовал находить проекцию?
есть ли вероятность перекрученного многоугольника?
ох, короче засада(
27
Ну окей, объясню задачу
Есть многоугольник, полученный как часть взаимодействия двух других многоугольников.
Нужно найти, к каким многоугольникам причастен текущий и для этого я ищу внутреннюю точку (так как грани сами часто взаимодействуют и с тем и с другим и это не вариант). Найти принадлежность точки внутреннего многоугольника к внешнему многоугольнику достаточное условие и к тому же довольно простое.
есть ли вероятность перекрученного многоугольника?
есть, но перекрученный многоугольник я деформирую чуть раньше (так, чтобы отсеклась часть, наложенная на самого себя). Если же перекручивание порождает несколько фигур, то я разбиваю многоугольник на них. То есть в итоге мы так или иначе работаем с обычным многоугольником.
Загруженные файлы
9
А как ты будешь проверять это условие, взяв точку внутри наугад?
27
GeneralElConsul, ну просто
  1. Берем любую точку внутреннего многоугольника
  2. Находим, принадлежит ли эта точка указанному внешнему многоугольнику методом трассировки луча
  3. Если точка принадлежит указанному внешнему многоугольнику, значит внутренний многоугольник находится в этом внешнем.
20
Ой. Я, кажется, решил :)
Находим крайнюю точку(min|max координата), берем её соседние две. Имеем три точки, треугольник. Его центр масс - искомая точка.
27
берем её соседние две
Вот тут не понял. Типа (min.x, max.y)?
20
Я фигню написал. Прошу прощения, прошу забыть :)
Точнее не фигню, эта идея выше - всего лишь часть правильного метода.

Devion, я имел ввиду две смежные точки. Есть крайняя вершина А, а есть её смежные вершины В и С.
Я думал центр масс треугольника АВС подойдёт.
Контрпример легко придумать: вогнутый четырёхугольник.
Модифицировал слегка.
Рассуждения вообще вот такие: единственный быстрый способ не оказаться за многоугольником - выбрать крайнюю точку А и две смежных с ней В и С. Тогда внутри полученного угла ищем ближайшую к А точку D(которая может совпадать с В и С), проводим окружность с центром в А и радиусом AD. Любая точка внутри полученного сектора круга(серая область на рисунке) - подходит.
Хотя мб попробовать брать треугольник АPQ, где P и Q - точки на смежных А рёбрах, лежащие очень близко к А..? Ну, чтобы не тратиться на поиск ближайшей точки.
Загруженные файлы
14
Devion, в чем проблема хранить породившие многоугольники?
27
хм, надо подумать могу ли я их заранее "узнать". Хороший совет.
Mihahail, хорошее решение. Если не получится заранее определить многоугольник (там, где я их формировал) то наверное так и сделаю.
20
Хм, если брать задачу в комментах, а не сабжевую, то я ничего не буду рекомендовать, ибо не знаю, что именно разрабатывается. Полную бы задачу услышать, но уповаю на то, что иного выхода, кроме того, что в посте - нет :)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.