Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418

Определение с какой стороны от ломаной находится точка

01.06.2021, 10:22. Показов 1429. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я написал несколько вариантов кода и пытался решить задачу с помощью векторной алгебры, однако существуют крайние условия, при которых это не работает. Я нашёл также несколько вариантов в гугле, но они либо не точные, либо сводятся к моему решению и имеют те же недостатки. Код не могу предоставить из-за корпоративной политики.

В общем, дано: кривая на плоскости (можно использовать трёхмерное пространство), заданая набором точек.
Существует точка (вообще, регулярная сетка из точек).

Требуется - определить с какой стороны от кривой находится точка.
Сторона определяется порядком следования точек. Первый и последний сегменты ломаной образуют прямые, уходящие в бесконечность.

Собственно, нет проблем определить ближайший к точке отрезок и найти с какой стороны от отрезка находится точка.
У меня возникают артефакты, когда между двумя ближайшими (у них общая точка ближе всего к заданной) отрезками находится острый угол. Тогда точка может быть по одну сторону от первого отрезка, но по другую сторону от второго отрезка. Как обработать эти случаи, чтобы они корректно отсчитывались?
В конечном итоге я хочу получить два набора точек из сетки, которые разделены произвольной кривой (без самопересечений, лучи из концов кривой не пересекаются)

Добавлено через 29 минут
Простите за безграмотность, поторопился, не успел отредактировать вопрос.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.06.2021, 10:22
Ответы с готовыми решениями:

Найти ошибку: нужно вывести в какой четверти находится точка, если на оси, то указать на какой
Нужно вывести в какой четверти находится точка, если на оси, то указать на какой. Написала код, но дальше ввода значений х и у программа не...

Класс "Точка". Функция - определение в каком координатном угле находится точка
1. Определить в глобальной области видимости функцию в соответствии с вариантом. Доступ к полям класса осуществить с помощью...

Как однозначно определить с какой стороны точка?
Есть линия определенная точками P1 и P2 (начало всегда P1), линия может находится под любым углом 0 - 180, 0 - (-180), есть точка P3. ...

8
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
01.06.2021, 10:32
без рисунка не совсем понятна проблема. Ты-то в ней варишься, небось, уже не одну неделю, а нам сходу тяжело вникнуть
0
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
01.06.2021, 11:05  [ТС]
Вот моё решение. На рисунке видно два артефакта сверху и одно маленькое пятно снизу возле острых углов. В холодной палитре точки "слева" от кривой, в тёплой "справа". Палитра зависит от расстояния точек до ближайшего сегмента кривой, простите за красное пятно возле неё. На серый прямоугольник не обращайте внимание - часть поверхности отсутствует.
Миниатюры
Определение с какой стороны от ломаной находится точка  
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
01.06.2021, 11:25
Честно говоря, понятнее не стало. . Как я понял у тебя так получается: точка О лежит справа от AC, но слева от AB если идти по пути CAB.
я не силён в топологии, но тут задача о контуре и о нахождении точки внутри контура или снаружи. Нужно рассматривать не один отрезок, а часть контура.
Миниатюры
Определение с какой стороны от ломаной находится точка  
0
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
01.06.2021, 15:15  [ТС]
Да, проблема именно в этом.
Предположим, у меня всегда известны два отрезка СА и АВ.

Добавлено через 3 часа 47 минут
К сожалению, я её так и не решил. Я пишу, вдруг кто из комьюнити зайдёт в ветку..
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
01.06.2021, 15:26
Aycon, может быть я ошибаюсь, но у тебя перперндикуляры из этой точки на отрезки должны быть одного знака, если точка лежит по одну сторону
0
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
02.06.2021, 14:26  [ТС]
Решил. Если кому нужно будет - напишу. Спасибо за помощь.
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
02.06.2021, 14:37
Aycon, пиши, кому-нибудь точно пригодится
0
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
02.06.2021, 15:23  [ТС]
Псевдокод:

Если точка P ближе всего к прямой, на которой лежит один из сегментов (проекция точки Р лежит на сегменте и это наикратчайшее расстояние до кривой), то точка лежит слева от кривой если она лежит слева от этого сегмента.
Иначе:

АВ и ВС это ближайшие отрезки (из искомой линии) к точке P. Точка В общая и является ближайшей из кривой к Р.

Если катчайший угол между векторами ВА и АС больше 90 градусов, то точка Р слева от кривой, если она слева от АВ и слева от ВС.
Иначе:

Если z координата векторного произведения ВА на ВС больше нуля (острый угол смотрит влево от кривой), то точка Р лежит слева от кривой, если она слева от АВ и слева от ВС.
Иначе:

Если z координата векторного произведения ВА на ВС меньше нуля (острый угол смотрит вправо от кривой), то точка Р лежит слева от кривой, если она слева от АВ или слева от ВС.

Во всех остальных случаях точка лежит справа от кривой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.06.2021, 15:23
Помогаю со студенческими работами здесь

Составить программу, которая по заданным координатам точки (x,y) определяет на какой линии или внутри какой области находится эта точка
Построить чертеж. Обозначить получившиеся области плоскости. Составить программу, которая по заданным координатам точки (x,y) определяет на...

Найти наименьший элемент матрицы и указать, с какой стороны диагонали он находится
Дано массив B (0 ... 5,0 ... 5). Найдите наименьший элемент массива и покажите с какой стороны оно расположено на диагонали С++

Даны координаты вершин треугольника и точка, что находится внутри его. найти расстояние от точки до ближайшей стороны.
Даны координаты вершин треугольника и точка, что находится внутри его. найти расстояние от точки до ближайшей стороны.

Определение номера кругов между которыми находится точка
Помогите разработать алгоритм и программу для определения номера кругов между которыми находится точка с координатами (х, у), n кругов с...

Определить, в какой четверти находится точка
Даны два целых числа - координаты точки в декартовой системе координат. Определить, в какой четверти находится точка. Входные данные: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru