Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/47: Рейтинг темы: голосов - 47, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 9

Трассировка лучей в Python3

04.01.2019, 14:14. Показов 8996. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый!

Есть задача: в двухмерном пространстве (например в помещении) расположены две точки - источник и получатель. От источника исходит луч. Если идти по прямой линии от источника к получателю, то луч конечно сразу попадет. Но вот если луч выходит от источника в другом направлении, то он будет сколько-то раз отражен от стен, пока не дойдет до точки получателя. Необходимо просчитать длину все переотраженных путей и сложить. Подскажите какой лучше библиотекой можно решить эту задачу в Python 3?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.01.2019, 14:14
Ответы с готовыми решениями:

Трассировка лучей
Здравствуйте ! Кто нибудь уже работал с этим, сможет помочь ?

трассировка лучей
Помогите, пожалуйста. Есть готовая программа, нужно переделать её на простой си. Сферу достаточно построить одну. Что-то...

Трассировка лучей на GTX
Всем привет! Заветный драйвер от Nvidia таки вышел. Как счастливый обладатель GTX 1080, я уже решил покуситься на лучи, но не тут-то...

15
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
04.01.2019, 16:09
Вряд ли есть такая библиотека.
Можно смоделировать отражённые пути через перебор всех возможных отражений.
1
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 9
04.01.2019, 16:23  [ТС]
Как это сделать? С чего начать, я даже не знаю
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
04.01.2019, 16:36
Идея такова.
От каждой стены можно "отзеркалить" вашу комнату. То есть "нарисовать" её по ту сторону стены. Точка приёмника тоже туда отобразится. Проводите луч к отражению, измеряете.
Назовём эти отражения отражениями 1-го порядка. В каждом из отражений 1-го порядка также можно отзеркалить комнату от каждой стены. Вместе с комнатой - точка приёмник. Получаем отражения 2-го порядка.
Ну и так пока не надоест. Теоретически, число отражений до "зацикливания" очень велико, но конечно. Конечным условием может быть совпадение позиций пересечения лучом двух стен подряд. То есть, если луч пересёк две стены в одних и тех же точках - значит, такое уже было, пора завязывать.
1
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 9
04.01.2019, 18:31  [ТС]
dondublon, ответ конечно заинтриговал меня. Но пока не могу вьехать. Можете ссылку какую подсказать, если есть таковая?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
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
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,307
08.01.2019, 22:27
Rashid_s, еще рассмотрите вариант того что угол отражения равен углу падения. тут уже простая геометрия для прямоугольной комнаты. луч из источника с стеной в которую направлен и стеной перпендикулярно ей образуют прямоугольный треугольник, так же отраженный луч с двумя другими стенами образуют прямоугольный треугольник. зная координаты старта и размер комнаты можно вычислять точку попадания, направление отражения,длину луча и так по кругу пока луч не пройдет через приемник или совпадет с первым лучом от источника.
1
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
09.01.2019, 09:38
Semen-Semenich, имхо, это не то, что ему нужно.
Угол падения равен углу отражения, это не "вариант", это железное правило
Но ему ж нужно перебрать все варианты (в смысле, возможные траектории луча), чтобы луч из источника дошёл в приёмник. И что ему перебирать? Углы, по которым луч выходит из источника? Но это, строго говоря, невозможно. Множество мощности R. Для приближённого решения может проканать, но вряд ли оно будет сильно проще строгого, с отражениями.
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,307
09.01.2019, 12:52
Цитата Сообщение от Rashid_s Посмотреть сообщение
Необходимо просчитать длину все переотраженных путей и сложить
помоему ему надо найти длину всех лучей до приемника. я не сказал что это просто - это как предложенный вариант. зная угол падения мы найдем точку куда отразится луч то есть луч и две стены образуют треугольник так что можно узнать длину луча. вообщем это сложно описать но если сесть нарисовать то возможно будет наглядней и понятней.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
09.01.2019, 13:19
Лучший ответ Сообщение было отмечено Rashid_s как решение

Решение

Цитата Сообщение от Semen-Semenich Посмотреть сообщение
помоему ему надо найти длину всех лучей до приемника.
Ну так для этого необходимо перебрать, а как иначе?
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
зная угол падения
Да, но мы его не знаем - вот незадача.
1
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 9
10.01.2019, 20:00  [ТС]
есть такое дело, согласен. Но этот вариант подходит для луча, угол падения которого равен углу отражения луча, попадающего в приемник. А мне надо для любого варианта просчитать - например когда луч выходит от источника совсем в другом направлении.

Добавлено через 1 час 18 минут
dondublon, а вот в Python есть еще такая библиотека - geomath. Можете что сказать по ней?
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,307
10.01.2019, 20:59
Цитата Сообщение от Rashid_s Посмотреть сообщение
например когда луч выходит от источника совсем в другом направлении.
да хоть в каком направлении,луч то все равно попадает в стену от которой отразиться. вопрос в том как указано направление луча. допустим луч выходит из точки а (3,2) и как он направлен? влево, вправо или вверх? относительно какой стены? верхней? левой или правой? или все таки есть точка направления с координатами ?
Цитата Сообщение от dondublon Посмотреть сообщение
Да, но мы его не знаем - вот незадача.
ну тогда мы и не знаем в какую стену направлен луч и какую начинать зеркалить. это все равно что задача - машина едет быстро. вопрос за сколько она проедет 100км?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
11.01.2019, 10:07
Лучший ответ Сообщение было отмечено Rashid_s как решение

Решение

Цитата Сообщение от Rashid_s Посмотреть сообщение
dondublon, а вот в Python есть еще такая библиотека - geomath. Можете что сказать по ней?
Бегло посмотрел доку, афинных преобразований не нашёл.

Цитата Сообщение от Semen-Semenich Посмотреть сообщение
ну тогда мы и не знаем в какую стену направлен луч и какую начинать зеркалить. это все равно что задача - машина едет быстро. вопрос за сколько она проедет 100км?
Начинать зеркалить надо во все. У комнаты конечное число сторон, так что множество отражений счётно.
Потому я и упомянул, что надо 1) рекурсию и 2) подумать над условием остановки. А то тут реально можно отражать и отражать. Интуиция мне говорит, что число отражений до зацикливания луча будет конечно, хотя и очень велико. Может, я и ошибаюсь, тут уже надо думать, но, в любом случае, этот вопрос можно оставить на потом.

Добавлено через 4 минуты
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
ну тогда мы и не знаем в какую стену направлен луч и какую начинать зеркалить. это все равно что задача - машина едет быстро. вопрос за сколько она проедет 100км?
Считаю это замечание глупым троллингом. Да, не знаем, так найти этот угол (для одного случая) равносильно решению задачи (опять же, найдём один случай луча).

Добавлено через 8 минут
Хотя, я тут подумал и пришёл к выводу, что число возможных лучей всё-таки бесконечно.
Объясняется довольно просто. Возьмём простой случай - комната прямоугольная. Очевидно, что "мостить" пространство отражениями этой комнаты можно до бесконечности, во все четыре стороны. И будет каждый раз новый угол луча (в общем случае).
Так что, Rashid_s, вам надо серьёзно подумать над условием остановки.

Добавлено через 1 минуту
Rashid_s, комната-то прямоугольная или нет?
1
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,307
11.01.2019, 12:57
Лучший ответ Сообщение было отмечено Rashid_s как решение

Решение

dondublon, я к тому что если мы не знаем вторую точку куда направлен луч то нам оба варианта ничего не дадут, нам же нужно знать куда отразится луч в зеркальной части а для этого нужно знать его направление то есть координаты второй точки через которую луч проходит от источника
Цитата Сообщение от dondublon Посмотреть сообщение
Хотя, я тут подумал и пришёл к выводу, что число возможных лучей всё-таки бесконечно
ну это вряд ли. либо луч попадет в приемник либо совпадет с начальным лучом, это и есть варианты условия остановки. согласен в том что число отражений может быть очень велико.
1
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
11.01.2019, 14:24
Лучший ответ Сообщение было отмечено Rashid_s как решение

Решение

Цитата Сообщение от Semen-Semenich Посмотреть сообщение
dondublon, я к тому что если мы не знаем вторую точку куда направлен луч то нам оба варианта ничего не дадут, нам же нужно знать куда отразится луч в зеркальной части а для этого нужно знать его направление то есть координаты второй точки через которую луч проходит от источника
Ещё раз: угол - это то, что нужно найти. В смысле, ключевой момент, найдём угол - найдём и все остальное (типа длины ломаного луча). Знание второй точки равносильно знанию угла.
Вот я и предложил находить вторую точку через отражения комнаты. Отражение приёмника и есть наша вторая точка.

Цитата Сообщение от Semen-Semenich Посмотреть сообщение
ну это вряд ли. либо луч попадет в приемник либо совпадет с начальным лучом, это и есть варианты условия остановки. согласен в том что число отражений может быть очень велико.
Да ничего подобного.
Возьмём совсем простой случай. Поясняющая картинка:

B - наш приёмник, B1 и далее - отражения. Отражать вправо мы можем до бесконечности. Луч просто будет "сжиматься", как изображение пружины в профиль.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.01.2019, 14:24
Помогаю со студенческими работами здесь

Трассировка лучей, с чего начать?
Мне нужно придумать сцену, и для нее реализовать метод трассировки лучей. Приму любой совет, мнение, пример, код. Добавлено через 33...

Трассировка лучей, исправить ошибку
Помогите исправить ошибку. Пишу трассировку лучей, но застопорился на этом моменте. Сфера при удалении от левого верхнего угла...

Трассировка лучей барицентрическим тестом на шейдере
Помогите пожалуйста . Пытаюсь реализовать трассировку лучей с помощью вычислительных шейдеров, каждый запуск шейдера проверяет один луч...

Трассировка лучей/путей для чайников
Доброго времени суток. Теории начитался, но много вещей странные и не понятные их нужно практиковать и изучать путем экспериментов. Вот...

Удаление невидимых граней (трассировка лучей) (без OpenGL, Direct3D etc.)
День добрый! Попалась лабораторная, нужно сделать удаление невидимых граней методом трассировки лучей для бикубических поверхностей (в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
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, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru