|
6 / 2 / 1
Регистрация: 15.10.2020
Сообщений: 62
|
|
Алгоритм сканирующей прямой (Бентли-Оттманна)10.12.2022, 23:44. Показов 1492. Ответов 10
Есть некая точка A, вокруг неё располагается n окружностей у каждой из которых известны координаты центра (x,y) и радиус r. Окружности могут пересекаться и быть полностью вложенными в друг друга. Нужно узнать, найдется ли отрезок, выходящий из точки A, такой, что не пересечёт ни одну из n окружностей. На схеме пример. В этом случае отрезка, удовлетворяющего условию не найти.
Как я понял здесь нужно применить алгоритм сканирующей прямой (Бентли-Оттманна), но не понимаю, как именно это сделать. Если же есть другое решение со схожей эффективностью, тоже будет интересно посмотреть.
0
|
|
| 10.12.2022, 23:44 | |
|
Ответы с готовыми решениями:
10
Используя метод сканирующей прямой определить, сколько треугольников пересекутся, если поедут вправо метод Бентли-Макилроя Горит проект по СЕО для странички Бентли |
|
Модератор
|
||
| 11.12.2022, 10:31 | ||
|
В данном случае, если взять длину отрезка > 2, то любой такой отрезок будет удовлетворять условию. Может вам нужно определять для прямой или луча?
0
|
||
|
6 / 2 / 1
Регистрация: 15.10.2020
Сообщений: 62
|
|
| 11.12.2022, 12:33 [ТС] | |
|
Да, речь идёт о луче из точки А.
0
|
|
|
Модератор
|
||
| 11.12.2022, 14:01 | ||
Сообщение было отмечено SlaTH как решение
Решениеалгоритм сканирующей прямой (Бентли-Оттманна).Чисто из моих математических представлений, я бы для каждого круга определял перекрываемый им сектор и проверял остался ли не перекрытый сектор. Определение сектора это не сложно: 1) Луч (вектор) центра сектора по точке и центру окружности; 2) Ширина сектора двойной угол прямоугольного треугольника по гипотенузе (расстояние до центра окружности) и противолежащему катету (радиус окружности). А вот с накоплением секторов каких-то простых, предусмотренных методов в .Net не знаю. Придётся реализовывать какой-то кастомный DoubleRange от 0 до +2*пи и какую-то коллекцию вычетов из него.
1
|
||
|
Модератор
|
|||||||||||
| 11.12.2022, 14:44 | |||||||||||
|
SlaTH, для затравки.
Структура точки (из личной библиотеки):
1
|
|||||||||||
|
6 / 2 / 1
Регистрация: 15.10.2020
Сообщений: 62
|
|
| 11.12.2022, 14:49 [ТС] | |
|
А как, теоретически, можно найти не перекрытые сектора? Единственное, что приходит в голову - проброс лучей из точки А по кругу, но это неэффективно.
0
|
|
|
Модератор
|
||
| 11.12.2022, 15:05 | ||
|
Что-то с таким алгоритмом. 1) Простой диапазон это нижняя и верхняя граница; 2) Фрагментированный диапазон это коллекция простых диапазонов: 3) Коллекция диапазонов упорядочена по нижней границе; 4) При добавлении диапазона в коллекцию, если a ней уже есть диапазоны входящие в его границы, то вместо них всех создаётся один общий диапазон который включает в себя все; 5) При вычитании диапазона, если есть диапазоны полностью входящие в него - они удаляются. Те которые входят частично - заменяются на диапазоны не входящие в вычитаемый. Потом эта реализация используется так: 1) Создаётся диапазон +-пи; 2) Цикл по всем окружностям; 3) Для каждой окружности создаётся сектор; 4) Сектор вычитается из диапазона. Перед вычетом сектора которые пересекают границы +-пи, надо разбивать на два входящих в границы; 5) После вычитания сектора из диапазона, проверяется есть ли ещё что в его коллекции. Если нет - значит весь диапазон перекрыт; 6) Если диапазон ещё не пуст, значит цикл к следующей окружности. 7) Если цикл закончился нормальным выходом - значит остался какой-то не перекрытый диапазон.
1
|
||
|
6 / 2 / 1
Регистрация: 15.10.2020
Сообщений: 62
|
|
| 11.12.2022, 15:21 [ТС] | |
|
Спасибо за интересную идею, попробую реализовать.
0
|
|
|
Модератор
|
||||||||||||
| 11.12.2022, 17:04 | ||||||||||||
SlaTH, я код чуть поправил в методе Add нужна была проверка пересечения с предыдущим диапазоном.Если код копировали, то замените текущей версией.
1
|
||||||||||||
|
6 / 2 / 1
Регистрация: 15.10.2020
Сообщений: 62
|
|
| 16.12.2022, 15:35 [ТС] | |
|
К сожалению на время пришлось отложить. Форм-мажор с компьютером. Постараюсь сообщить здесь о результате, когда закончу и отметить вас.
0
|
|
| 16.12.2022, 15:35 | |
|
Помогаю со студенческими работами здесь
11
Заливка сканирующей строкой в Borland C++ Алгоритм рисования прямой Ву Нарисовать фигуру и закрасить ее сканирующей строкой Заливка фигуры методом сканирующей строки Алгоритм поиска (прямой метод) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|