![]() |
|
|
![]()
|
|
| Eustace |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
Суть проблемы такова: имеется некая среда, наполненная разными эллипсоидными частицами с показателем преломления отличным от среды. Частицы достаточно крупные, их число - порядка 20-30. Через среду проходит световой луч (далее Луч). Луч пересекает, преломляясь, одну из частиц и выходит из неё в другой точке.
Далее, по идее, надо просчитывать возможность пересечения луча со всеми частицами, отбрасывать случаи с отрицательным дискриминантом в уравнении, из вариантов с действительными корнями выбирать минимальный и т.д. Но так как Лучей может быть пара десятков, всё это грозит обернуться огромными потерями во времени. (Каждый Луч может иметь порядка 20-30 преломлений - в самом плохом случае - на каждом преломлении нужно считать 20-30 дискриминантов, да ещё и самих Лучей много). Вопрос: как на каждом преломлении отбросить те частицы, с которыми луч заведомо не сможет пересечься? Собственно, я прошу даже не о помощи в решении проблемы, а о квалификации её - в какой области копать? |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
хм... если в общем, то в головуприходит такое:
1. делим область на части, для которых можно просто проверить, попадёт ли туда луч 2. проверяем каждую и убираем неподходящие в качестве примера: когда луч выходит из частицы, смотрим его x-координату если она положительная, убираем все частицы, которые лежат полностью слева от точки выхода (предполагается, что положительное направление - направо) так же можно сделать и по y -------------------- qqq |
|||
|
||||
| Eustace |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
Спасибо.
У меня даже сложилось такое решение - организовать из частиц дерево по x-координате, дерево по у-координате и дерево по z-координате. При выходе Луча рассматривать только те частицы, которые имеют координату большую, чем у точки выхода (или меньшую, смотря по направлению). Пересечение множеств трех ветвей дерева даст нужные частицы. Теперь внимание, вопрос номер два - а не будет ли это дольше? Где посмотреть алгоритмы функции, которая позволяет сказать, что элемент принадлежит множеству? И повторю свой изначальный вопрос, может, кто ответит - моя задача - это вообще какая область? Куда смотреть? |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
в общем-то отсечения "далёких" объектов ещё делаются при анализе столкновений (например, когда частицы летают и сталкиваются)
эта задача, в общем-то отличается, но вполне возможно, что какие-то подходы можно будет перенести... -------------------- qqq |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
Посмотри тут http://graphics.cs.uni-sb.de/Courses/ws0607/cg/Termine.html насчет kd-trees и подобного... Во втором и третьем pdf'ах точно есть полезная информация. -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| Eustace |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
Спасибо. Теперь более-менее понятно, где копать. Буду разбираться.
|
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |