|
9 / 9 / 8
Регистрация: 24.10.2013
Сообщений: 215
|
|
Где проведён отрезок: внутри или снаружи многоугольника20.02.2016, 23:13. Показов 2346. Ответов 10
Метки нет (Все метки)
Здравствуйте!
Есть многоугольник, заданный последовательностью точек его контура, которые идут в порядке против часовой стрелки. Две любые точки контура соединяются отрезком. Как можно определить, где проведён отрезок: внутри многоугольника, снаружи или пересекает (проблему пересечения решил, но, в основном, это просто перебор всех линий контура с проведённой линией)? Заранее благодарю
0
|
|
| 20.02.2016, 23:13 | |
|
Ответы с готовыми решениями:
10
Для данной точки определить где она находится:внутри, вне или на границе многоугольника Begin Transaction снаружи или внутри TRY CATCH? И почему
|
| 21.02.2016, 12:54 | |
|
Сводится к базовой задаче "точка внутри/снаружи". Для этого часто используют odd/even - подсчет числа пересечений луча (напр по x) из точки. Классический код (с учетом проблем точности) был в джемсах. Дальше разгуглите
Добавлено через 10 минут Наверное в данном случае проще найти все пересечения контура с прямой заданной отрезком. А дальше посчитать odd/even. Там правда есть одна бяка: прямая может пересекать точку(и) контура
1
|
|
|
9 / 9 / 8
Регистрация: 24.10.2013
Сообщений: 215
|
|
| 21.02.2016, 16:18 [ТС] | |
|
Простите, забыл уточнить. Точки всегда находятся на контуре, то есть это и есть точки, которые задают контур. И между ними проводится отрезок. Вот как бы узнать, как он находится относительно полигона?
0
|
|
| 21.02.2016, 16:46 | |||||||
|
Пусть есть 3 точки контура в порядке p0, p1, p2. И есть отрезок из точки p1 в pn. Тогда
1
|
|||||||
|
9 / 9 / 8
Регистрация: 24.10.2013
Сообщений: 215
|
||||||
| 23.02.2016, 01:19 [ТС] | ||||||
|
Да, спасибо большое))) Конечно, чутка громоздко, да и хотелось бы избежать мат.функций, но всё же работает. Кстати, как мне кажется, взять арккосинус от скалярного произведения не получится, так как оно может быть много больше единицы. Скорее всего, верный вариант:
0
|
||||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 23.02.2016, 03:11 | ||
|
Для того чтобы определить где именно: Если многоугольник выпуклый, то просто необходимо выбрать при построении нормали так чтобы они все смотрели внутрь. если концы отрезка при подстановке в выпуклый многоугольник имеют все знаки + то отрезок полностью внутри. Если - то снаружи. В общем случае - многоугольник не выпуклый - строится логическая формула контура, из пересечений и сумм отсекаемых ребрами полуплоскостей, и расчиитывается для точек отрезка. Дальше тоже самое - плюс внутри, минус - снаружи. Подобнее про построение контура - гугли на тему "метод R-функций". Для данной задачи опреаторы R-функций(которые в результате дают не просто факт вхождения а расстояние до ближайшей границы) можно упростить заменив булевыми операторами над знаком (имеется в виду + true - false, 0- в зависимости от того считается ли линия ребра входящей в многоугольник или нет)
0
|
||
|
9 / 9 / 8
Регистрация: 24.10.2013
Сообщений: 215
|
|
| 23.02.2016, 03:22 [ТС] | |
|
По поводу пересечений есть функция, уже написал. Про R-функции слышал и гуглил, но что-то это сложно довольно мне даётся, так что пока я их просто тихонечко читаю
Добавлено через 2 минуты Да уж, проверка линии тогда будет намного проще)) и это будет одно из наиудобнейших решений. Надо только научится строить эти r-функции
0
|
|
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||||
| 23.02.2016, 03:43 | |||||
|
Добавлено через 8 минут Добавлено через 6 минут Добавлено через 6 минут
1
|
|||||
|
Заблокирован
|
|
| 26.02.2016, 17:47 | |
|
Ryder95
Эту задачу можно решить иначе без всяких функций. Многоугольник разбивается на треугольники. И для каждого треугольника проверяется: лежат ли концы отрезка в треугольнике или нет? Проверка простая. Если точка лежит в треугольнике, то в этом случае Сумма площадей трех маленьких треугольников равна площади данного треугольника. В противном случае точка лежит вне треугольника. Площадь треугольников находится по формуле: S = 0,5|(x2 - x1)(y3 - y1) - (x3 - x1)(y2 - y1)| Где x1, y1, x2, y2, x3, y3 - координаты вершин треугольника
0
|
|
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 27.02.2016, 03:15 | ||
|
Добавлено через 1 час 7 минут простенький способ на основе r-функций http://oaji.net/articles/2014/1126-1407819638.pdf
0
|
||
| 27.02.2016, 03:15 | |
|
Помогаю со студенческими работами здесь
11
Определить, находится ли точка внутри заштрихованной области, на границе или снаружи Как определять обрабатываются ли исключения внутри метода или их надо отлавливать снаружи
проброс порта снаружи на 2 внутренних ресурса или где косяк Для заданной т. z(x,y) определить, принадлежит ли она стороне многоугольника или лежит внутри или вне его Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|