У меня следующая ситуация:
Одна точка на поверхности Земли с 3D-координатами (X, Y, Z) и одна камера внутри самолета, делающая снимок с поверхности. Для камеры у меня также есть 3D-координаты (X, Y, Z) именно для того момента, когда было снято изображение.
Для этого сценария мне нужно рассчитать угол отражения света между точкой на поверхности Земли и камерой внутри самолета.
Я хотел бы предложения или идеи для расчета этого угла. Я знаю, что возможное решение будет использовать аналитическую геометрию.
Я рассчитал угол падения солнца на точку поверхности с помощью библиотеки PVLIB, но не могу найти на pvlib функцию для определения угла отражения света.
Спасибо за помощь!!






Я предполагаю, что вы использовали высоту солнца и угол азимута для расчета вектора падения солнца по некоторой формуле, такой как (предположим, что азимут как [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) )