|
2 / 2 / 0
Регистрация: 10.09.2023
Сообщений: 70
|
||||||
Пересечение трехмерной сетки точек движущейся сферой29.02.2024, 16:47. Показов 3254. Ответов 46
Дана трехмерная сетка из точек, выровненных по осям X, Y, Z с равномерным шагом ∆s начиная с заданной опорной точки O. Любая точка P в этой сетке может быть определена как: P = O + (ix, iy, iz)∆s, де ix, iy и iz - целочисленные индексы, принадлежащие открытым диапазонам [0, nx), [0, ny) и [0, nz) соответственно. Сетка пересекается движущейся сферой радиуса R. Движение центра сферы определяется 3d-кривой f(t), t ∈ [0, 1]. Для упрощения реализации дана выборка f(t) с шагом ∆t (0 < ∆t ≪ 1) и получаем последовательность 3d-точек f(0), f(∆t), ... , f(1). Каждая пара последовательных точек в этой последовательности может рассматриваться как начальная и конечная точки линейного движения сферы. Точки, пересекающиеся с движущейся сферой, считаются удаленными.
Задание: Реализовать функцию, которая принимает входные параметры (∆s, O, nx, ny, nz, R, f(t), ∆t), моделирует удаление точек сетки, которые пересекаются с линейными перемещениями сферы, и выводит все оставшиеся точки, видимые сверху. Я пока мало знаю о компьютерной графике и алгоритмах, которые в ней используются. Вот что я пытался сделать:
Направьте на путь истинный, если можно, как это сделать получше?
0
|
||||||
| 29.02.2024, 16:47 | |
|
Ответы с готовыми решениями:
46
Аппроксимация точек сферой Смоделировать движение трехмерной рыбацкой сетки на экране (MFC) Отрисовать набор точек в трехмерной системе координат (с возможностью вращения) |
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||||||
| 01.03.2024, 12:12 | |||||||||
|
Во-вторых, в два последовательных момента времени сфера может и не пересекать точку сетки, а вот в промежутке между ними по ходу двежения вполне может. Т.е. работать нужно не с точками кривой пути, а с отрезками. 1) Все вычисления делал бы в системе координат сетки, чтоб координаты точек сетки были целочисленными с началом в опорной точке. Перевёл бы в эту систему радиус сферы и координаты кривой пути. 2) Состояние сетки(наличие/отсутствие) моделировал бы массивом флагов (можно даже битовым массивом, если размеры большие), типа:
4) В конце останется только пройтись по "столбцам сетки сверху вниз", чтоб сформировать массив точек, видимых сверху.
1
|
|||||||||
|
2 / 2 / 0
Регистрация: 10.09.2023
Сообщений: 70
|
|
| 01.03.2024, 18:52 [ТС] | |
|
Та да, я понял, что не пойми что придумал, и что надо с отрезками работать, а не с точками.
То есть, если я правильно понял, вы предлагаете проходиться вообще по всем (неудаленным) точкам сетки на каждом шаге и определять расстояние от каждой из них до отрезка, пройденного сферой. Это то, что я в самом начале и думал сделать, но это должно быть очень затратно, наверно. Может есть какой-то лучше способ? Октодеревья это в ту сторону?
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 01.03.2024, 21:08 | ||
|
0
|
||
|
2 / 2 / 0
Регистрация: 10.09.2023
Сообщений: 70
|
|
| 03.03.2024, 11:53 [ТС] | |
|
Извините, я что-то запутался, что вы подразумеваете под AABB?
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 03.03.2024, 12:19 | |
|
0
|
|
|
2 / 2 / 0
Регистрация: 10.09.2023
Сообщений: 70
|
||||||
| 03.03.2024, 14:38 [ТС] | ||||||
|
Что я не так делаю?
0
|
||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||||
| 03.03.2024, 15:11 | |||||||
|
2) Ваша функция нахождения расстояния от точки до отрезка некорректная, псевдокод:
0
|
|||||||
|
2 / 2 / 0
Регистрация: 10.09.2023
Сообщений: 70
|
||||||
| 03.03.2024, 19:35 [ТС] | ||||||
|
Уже все стало лучше
0
|
||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||
| 03.03.2024, 21:00 | |||
Сообщение было отмечено MeXaL как решение
РешениеПопробуйте ассертов наставить в коде. Кликните здесь для просмотра всего текста
А еще мне не нравиться, как вы по "диапазону" AABB итерируете, лучше преобразовать min и max в int перед циклом, причем для min использовать ceil, а для max floor, так будет точнее.
Добавлено через 2 минуты И еще вопрос, а какие значения nx, ny и nz? Переполнения в выражении
0
|
|||
|
2 / 2 / 0
Регистрация: 10.09.2023
Сообщений: 70
|
|
| 03.03.2024, 21:25 [ТС] | |
|
Спасибо вам большое за оказанную помощь!! Дело было действительно в переполнении.
1
|
|
| 04.03.2024, 14:33 | |
|
Не стоит связываться с 3-мерным массивом (иногда называют lattice) без необходимости. Здесь можно обойтись 2-мерным. И удаляются все точки внутри (хотя бы одной) сферы - а они могут быть и не видны сверху. В общем, слишком прямолинейно
Не по теме: Зато как владеет "современным С++" :)
1
|
|
|
2 / 2 / 0
Регистрация: 10.09.2023
Сообщений: 70
|
|
| 04.03.2024, 15:12 [ТС] | |
|
Спасибо за замечание. Изучил C++, теперь буду изучать векторную алгебру и компьютерную графику. Планирую пойти в геймдев или разработку CAD-, CAM- систем.
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 04.03.2024, 15:20 | ||
|
0
|
||
| 04.03.2024, 16:53 | |||
|
0
|
|||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 04.03.2024, 17:02 | ||
|
В этом случае мы игнорируем "дырки" под этим слоем, но при самопересечении траетории эти дырки могут "вскрыться", а чтобы их "увидеть", придется повторить расчет. Поэтому рассчет придеться повторять до тех пор, пока видимый слой не перестанет меняться.
0
|
||
| 04.03.2024, 18:52 | ||
|
0
|
||
|
2 / 2 / 0
Регистрация: 10.09.2023
Сообщений: 70
|
||||||
| 07.03.2024, 13:18 [ТС] | ||||||
|
Друзья, помогите еще раз, времени мало осталось, а у меня не выходит. Мне сказали оптимизировать решение по памяти. Я подумал, что можно по-другому делать: хранить массив 2x2 z-координат видимых сверху точек. И тогда для каждого отрезка пути нужно находить часть bounding-box'а, которая 'вылазит' выше чем сетка, и для каждой попадающей внутрь сферы точки искать симметричную ей.
Вот это я написал. Подскажите где тут что не так, на тестах не все точки попадают. Тут я для каждой точки ищу где в этот момент был центр сферы на отрезке, нахожу z-координату симметричную относительно центра и говорю, что ее сверху будет видно.
0
|
||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||||||
| 07.03.2024, 14:22 | ||||||||
|
Добавлено через 17 минут MeXaL, псевдокод(может так будет понятнее)
0
|
||||||||
|
2 / 2 / 0
Регистрация: 10.09.2023
Сообщений: 70
|
|||||||||||
| 07.03.2024, 14:46 [ТС] | |||||||||||
|
А чем плохо проходиться по точкам AABB, которые выше сетки, и для тех из них, что лежат в сфере (определять по расстоянию до отрезка) находить симметричную относительно центра сферы?
Ну вот например, вместо того что бы искать просто расстояние от точки до отрезка, можно искать еще и ближайшую точку на отрезке:
Вот это вот в целом почти работает, но кое-где дырки остаются
0
|
|||||||||||
| 07.03.2024, 14:46 | |
|
Помогаю со студенческими работами здесь
20
Нахождение прямоугольников, задаваемых множеством точек, расположенных в узлах сетки Рассчитать количество all всех точек сетки лежащий внутри этого круга Найти пересечение точек
Определение точек пересечение окружностей Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
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 .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|