Как рассчитать угол отражения света в трехмерном пространстве

У меня следующая ситуация:

Одна точка на поверхности Земли с 3D-координатами (X, Y, Z) и одна камера внутри самолета, делающая снимок с поверхности. Для камеры у меня также есть 3D-координаты (X, Y, Z) именно для того момента, когда было снято изображение.

Для этого сценария мне нужно рассчитать угол отражения света между точкой на поверхности Земли и камерой внутри самолета.

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

Я рассчитал угол падения солнца на точку поверхности с помощью библиотеки PVLIB, но не могу найти на pvlib функцию для определения угла отражения света.

Спасибо за помощь!!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
218
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что вы использовали высоту солнца и угол азимута для расчета вектора падения солнца по некоторой формуле, такой как (предположим, что азимут как [N = 0 / E = 90 / S = 180 / W = 270]):

Vx_s = sin(sun_azim) * cos(sun_elev)
Vy_s = cos(sun_azim) * cos(sun_elev)
Vz_s = sin(sun_elev)

С учетом отражения света от плоской поверхности (горизонтальной с вектором нормали к зениту) вектор отраженного света (прямой свет, без учета рассеяния/рассеивания лучей, например, зеркальной поверхности) будет

Vx_r = sin(sun_azim + 180) * cos(sun_elev)
Vy_r = cos(sun_azim + 180) * cos(sun_elev)
Vz_r = sin(sun_elev)

Вектор плоской камеры:

Vx_p = X_plane - X_surface
Vy_p = Y_plane - Y_surface
Vz_p = Z_plane - Z_surface

Тогда угол между отраженным лучом и камерой самолета равен (учтите, что вектор плоскости-сайта не является единичным вектором в этом примере):

alpha = arccos( (Vx_p*Vx_r + Vy_p*Vy_r + Vz_p*Vz_r) / sqrt(Vx_p**2 + Vy_p**2 + Vz_p**2) )

Другие вопросы по теме