Я пишу симуляцию трассировки лучей на python.Существуют источники света, которые излучают световые лучи, которые затем отражаются, поглощаются и передаются на / через поверхности.Я использую vpython в качестве визуализации, но модель данных за ней независима.
Я использую симуляцию для вычисления
- статистики длины пути (среднее значение, распределение)
- количество отражений
- некоторая статистика по углам падения на определенных поверхностях
- позже я хочу добавить коэффициенты / функции отражательной способности, чтобы рассчитать потерю интенсивности на пройденном пути
Пока передача еще не реализована, но я хочу подготовить для нее структуру данных.Наиболее очевидным решением будет использование составного шаблона, например:
- есть источники света, их дочерние элементы представляют собой набор сегментов лучей
- , каждый сегмент лучей имеет начальную и конечную точки и можетиметь 0 (полное поглощение), 1 (отражение) или 2 (передача + отражение) детей.
Когда я реализовал этот шаблон, я понял, что python не «любит» рекурсии - это самый очевидный способ пройтись по моему дереву лучевых сегментов и отобразить их или вычислить новые.
Хранение сегментов в виде списков представляется неправильным из-за случая, когда есть 2 дочерних элемента.
Я вижу, что есть некоторые библиотеки графов для python, но они не кажутся очень простыми в использовании, и я ожидаю, что вычисление вышеуказанной статистики с этими библиотеками будетнеоправданно громоздким.
Есть ли простой, питонный способ представить и пройти эти сегменты лучей?