如何计算三维空间上的光反射角

时间:2019-07-12 14:24:02

标签: python angle pvlib

我有以下情况:

飞机上的一个点具有3D坐标(X,Y,Z),飞机内部有一个摄像头,用于从地表拍照。对于相机,我在拍摄图像的那一刻也拥有3D坐标(X,Y,Z)。

在这种情况下,我需要计算地球表面上的点与飞机内部摄像头之间的光反射角。

我想要一些建议或想法来计算这个角度。我知道可能的解决方案将使用解析几何。

我已经使用PVLIB库计算了太阳到表面点的入射角,但是在pvlib上找不到确定光反射角的函数。

谢谢我!

1 个答案:

答案 0 :(得分:2)

我假设您使用太阳仰角和方位角通过某些公式来计算太阳入射矢量,例如(假设方位角为[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) )