|
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 9
|
|
Трассировка лучей в Python304.01.2019, 14:14. Показов 8996. Ответов 15
Метки нет (Все метки)
День добрый!
Есть задача: в двухмерном пространстве (например в помещении) расположены две точки - источник и получатель. От источника исходит луч. Если идти по прямой линии от источника к получателю, то луч конечно сразу попадет. Но вот если луч выходит от источника в другом направлении, то он будет сколько-то раз отражен от стен, пока не дойдет до точки получателя. Необходимо просчитать длину все переотраженных путей и сложить. Подскажите какой лучше библиотекой можно решить эту задачу в Python 3?
0
|
|
| 04.01.2019, 14:14 | |
|
Ответы с готовыми решениями:
15
Трассировка лучей трассировка лучей
|
|
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 9
|
|
| 04.01.2019, 16:23 [ТС] | |
|
Как это сделать? С чего начать, я даже не знаю
0
|
|
|
|
|
| 04.01.2019, 16:36 | |
|
Идея такова.
От каждой стены можно "отзеркалить" вашу комнату. То есть "нарисовать" её по ту сторону стены. Точка приёмника тоже туда отобразится. Проводите луч к отражению, измеряете. Назовём эти отражения отражениями 1-го порядка. В каждом из отражений 1-го порядка также можно отзеркалить комнату от каждой стены. Вместе с комнатой - точка приёмник. Получаем отражения 2-го порядка. Ну и так пока не надоест. Теоретически, число отражений до "зацикливания" очень велико, но конечно. Конечным условием может быть совпадение позиций пересечения лучом двух стен подряд. То есть, если луч пересёк две стены в одних и тех же точках - значит, такое уже было, пора завязывать.
1
|
|
|
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 9
|
|
| 04.01.2019, 18:31 [ТС] | |
|
dondublon, ответ конечно заинтриговал меня. Но пока не могу вьехать. Можете ссылку какую подсказать, если есть таковая?
0
|
|
|
|
|
| 08.01.2019, 11:01 | |
Сообщение было отмечено Rashid_s как решение
Решение
Давайте так - я буду описывать элементарный шаг, вы будете его выполнять и затем обращаться за следующим.
Итак, шаг первый - вам надо создать класс комнаты с точкой-приёмником. Забегая вперёд. Пожалуй, имеет смысл воспользоваться библиотекой shapely, но тут придётся разбираться. Я с ней не работал. В частности, там есть афинные преобразования (https://shapely.readthedocs.io... anual.html), в частности, отражение (см. Negative scale factors will mirror or reflect coordinates.) См. также https://en.wikipedia.org/wiki/... athematics) . Шаг второй будет - создать отражённый полигон. Если ваша комната прямоугольник (а не произвольный полигон), тогда, конечно, этот этап гораздо проще.
1
|
|
|
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 9
|
|
| 08.01.2019, 18:55 [ТС] | |
|
dondublon, заранее благодарю
Я не обещаю быстро реагировать на Ваши предложения. По мере свободного времени буду потихоньку кодить. Еще раз заранее благодарен за помощь
0
|
|
|
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,307
|
|
| 08.01.2019, 22:27 | |
|
Rashid_s, еще рассмотрите вариант того что угол отражения равен углу падения. тут уже простая геометрия для прямоугольной комнаты. луч из источника с стеной в которую направлен и стеной перпендикулярно ей образуют прямоугольный треугольник, так же отраженный луч с двумя другими стенами образуют прямоугольный треугольник. зная координаты старта и размер комнаты можно вычислять точку попадания, направление отражения,длину луча и так по кругу пока луч не пройдет через приемник или совпадет с первым лучом от источника.
1
|
|
|
|
|
| 09.01.2019, 09:38 | |
|
Semen-Semenich, имхо, это не то, что ему нужно.
Угол падения равен углу отражения, это не "вариант", это железное правило Но ему ж нужно перебрать все варианты (в смысле, возможные траектории луча), чтобы луч из источника дошёл в приёмник. И что ему перебирать? Углы, по которым луч выходит из источника? Но это, строго говоря, невозможно. Множество мощности R. Для приближённого решения может проканать, но вряд ли оно будет сильно проще строгого, с отражениями.
0
|
|
|
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,307
|
||
| 09.01.2019, 12:52 | ||
|
0
|
||
|
|
|||
| 09.01.2019, 13:19 | |||
Сообщение было отмечено Rashid_s как решение
Решение
1
|
|||
|
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 9
|
|
| 10.01.2019, 20:00 [ТС] | |
|
есть такое дело, согласен. Но этот вариант подходит для луча, угол падения которого равен углу отражения луча, попадающего в приемник. А мне надо для любого варианта просчитать - например когда луч выходит от источника совсем в другом направлении.
Добавлено через 1 час 18 минут dondublon, а вот в Python есть еще такая библиотека - geomath. Можете что сказать по ней?
0
|
|
|
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,307
|
|||
| 10.01.2019, 20:59 | |||
|
0
|
|||
|
|
||||
| 11.01.2019, 10:07 | ||||
Сообщение было отмечено Rashid_s как решение
РешениеПотому я и упомянул, что надо 1) рекурсию и 2) подумать над условием остановки. А то тут реально можно отражать и отражать. Интуиция мне говорит, что число отражений до зацикливания луча будет конечно, хотя и очень велико. Может, я и ошибаюсь, тут уже надо думать, но, в любом случае, этот вопрос можно оставить на потом. Добавлено через 4 минуты Добавлено через 8 минут Хотя, я тут подумал и пришёл к выводу, что число возможных лучей всё-таки бесконечно. Объясняется довольно просто. Возьмём простой случай - комната прямоугольная. Очевидно, что "мостить" пространство отражениями этой комнаты можно до бесконечности, во все четыре стороны. И будет каждый раз новый угол луча (в общем случае). Так что, Rashid_s, вам надо серьёзно подумать над условием остановки. Добавлено через 1 минуту Rashid_s, комната-то прямоугольная или нет?
1
|
||||
|
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,307
|
||
| 11.01.2019, 12:57 | ||
Сообщение было отмечено Rashid_s как решение
Решение
dondublon, я к тому что если мы не знаем вторую точку куда направлен луч то нам оба варианта ничего не дадут, нам же нужно знать куда отразится луч в зеркальной части а для этого нужно знать его направление то есть координаты второй точки через которую луч проходит от источника
1
|
||
|
|
|||
| 11.01.2019, 14:24 | |||
Сообщение было отмечено Rashid_s как решение
РешениеВот я и предложил находить вторую точку через отражения комнаты. Отражение приёмника и есть наша вторая точка. Возьмём совсем простой случай. Поясняющая картинка: B - наш приёмник, B1 и далее - отражения. Отражать вправо мы можем до бесконечности. Луч просто будет "сжиматься", как изображение пружины в профиль.
1
|
|||
| 11.01.2019, 14:24 | |
|
Помогаю со студенческими работами здесь
16
Трассировка лучей, с чего начать? Трассировка лучей, исправить ошибку Трассировка лучей барицентрическим тестом на шейдере Трассировка лучей/путей для чайников Удаление невидимых граней (трассировка лучей) (без OpenGL, Direct3D etc.) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|