|
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 726
|
|
Определить принадлежность точки замкнутой 3D области26.09.2017, 20:28. Показов 2806. Ответов 9
Метки нет (Все метки)
Здравствуйте. Как определить находится ли точка внутри замкнутой односвязной 3D области? Поверхность задана треугольными площадками с внешней нормалью.
Была идея интегрировать потенциальную функцию (r - центр треугольника, p - исследуемая точка) Предполагалось, что снаружи интеграл равен нулю. Но, видимо, погрешность все же велика (r по площадке в реальности меняется) - определить принадлежность точки, если она очень близко к поверхности, как минимум, не получилось. Либо я не так делаю. Что можете посоветовать?
0
|
|
| 26.09.2017, 20:28 | |
|
Ответы с готовыми решениями:
9
|
|
Айлурофил
|
|
| 26.09.2017, 21:32 | |
|
Если я правильно понял условие, то алгоритм должен быть таким:
1. Выбирается точка, которая находится заведомо внутри области. 2. Проводится прямая, соединяющая эту точку с искомой. 3. Организуется цикл по всем треугольникам на предмет пересечения каждого из этих треугольников с прямой линией. 4. Если общее число пересечений чётное, то точка внутри области, если нечетное - то снаружи.
1
|
|
|
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 726
|
|
| 26.09.2017, 21:45 [ТС] | |
|
Спасибо. Что-то типа того пробовал, но как-то не очень надежно получилось. Пытался с помощью интегральных характеристик сделать, а то вычисления пересечений требуют аккуратного обращения из-за возможной потери точности.
0
|
|
|
Айлурофил
|
|
| 26.09.2017, 22:16 | |
|
Какая там может быть потеря точности на пересечениях, если использовать double или extended? Там только линейные операции. Скорее, где-то в реализации ошиблись. У меня схожий алгоритм работает без сбоев.
Добавлено через 4 минуты На интегрировании, кстати, ошибка накопления гораздо быстрее и больше набегает.
0
|
|
|
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 726
|
|
| 26.09.2017, 23:02 [ТС] | |
|
В общем случае ошибка при пересечении, когда нормаль площадки и линия почти перпендикулярны. Хотя у меня было более вычурно сделано - так, думаю, будет понадежнее, буду пробовать.
0
|
|
|
Айлурофил
|
|
| 26.09.2017, 23:21 | |
|
Это я понимаю. Но, во-первых, надо задать эпсилон, достаточно малый, чтобы число таких случаев было минимально.
Во-вторых, эти случаи нужно рассматривать, как особые, и обрабатывать их соответственно. Добавлено через 1 минуту И ещё учесть прохождение по граням и вершинам, тоже рассматривая их как особые случаи. Это всё решается.
0
|
|
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
|
||
| 26.09.2017, 23:58 | ||
|
Например, пускаем луч параллельно оси X. Для каждого треугольника сначала находим пересечение с плоскостью z = z0. Если это отрезок, то ищем его пересечение с лучом. Если луч проходит через конец отрезка, то учитываем только если у другого конца отрезка координата Y выше. Я мог не учесть какую-то ситуацию (сложно в голове всё представить). Так что тестируйте.
1
|
||
|
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
|
|
| 27.09.2017, 04:09 | |
|
AndrSlav, перебираете треугольники, ищите ближайшую к заданной точку на поверхности области, угол между направлением от нее на вашу точку и внешней нормалью больше девяноста градусов для внутренних точек, о чем легко судить по знаку скалярного произведения.
Добавлено через 10 минут Способ с пересечением лучом сложней в реализации, поскольку там нужно учитывать пересечения на ребрах треугольников, чтобы считать их однократно. Это легко осуществляется если треугольная сетка имеет топологическую информацию, типа "крылатых ребер", обеспечивающую простой переход между соседними треугольниками - с треугольника на ребро и обратно. А способ приведенный мною выше, мне кажется надежнее, но там есть свои нюансы типа усреднения нормалей, если есть несколько одинаковых ближайших точек и т.д.
1
|
|
|
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 726
|
||
| 27.09.2017, 11:47 [ТС] | ||
|
0
|
||
|
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
|
|||
| 27.09.2017, 12:20 | |||
|
Нахождение ближайшей точки до площадки - это сначала система из двух линейных уравнений относительно параметров разложения ближайшей точки по векторам сторон треугольника, матрица там - попарные скалярные произведения (вроде это матрица Грамма называется) - это точка плоскости треугольника, далее по значению параметров определяется принадлежность точки треугольнику, если нет - ищется ближайшая до сторон треугольника. Там не сложные вычисления - все уравнения линейные.
0
|
|||
| 27.09.2017, 12:20 | |
|
Помогаю со студенческими работами здесь
10
Определить принадлежность точки к области
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|