太阳时角、太阳高度角、天顶角、太阳方位角和剖面角计算的Python程序

基本概念

经度,Longitude

L,经度(longitude)是地球上一个地点离一根被称为本初子午线的南北方向走线以东或以西的度数。本初子午线的经度是0°,地球上其它地点的经度是向东到180°或向西到180°。在本初子午线以东的经度叫东经,在本初子午线以西的叫西经。东经用"E"表示,西经用"W"表示。

维度,Latitude

在这里插入图片描述
φ(phi),维度 , 赤道以北或以南的角位置,北正;−90°≤φ≤90°。

赤纬角,Declination

在这里插入图片描述
δ,赤纬,太阳正午(即,当太阳位于本初子午线时)太阳相对于赤道平面的角位置,北正;−23.45°≤δ≤23.45°。
在这里插入图片描述
有三种方法求赤纬角δ
方法一
赤纬角δ可由Cooper(1969)的近似方程求得,
在这里插入图片描述
方法二
在这里插入图片描述
方法三
在这里插入图片描述
或根据更精确的方程(误差<0.035°)[来自斯宾塞(1971),如伊克巴尔(1983)所引用]
在这里插入图片描述
B可以看我的上一篇博客太阳时的计算的Python程序
在这里插入图片描述

from sympy import *
month = 3
day = 16

#n()是一年里的第几天
def n():
    d_num = 0
    for m in range(1, month):
        if m in [1, 3, 5, 7, 8, 10, 12]:
            d_num += 31
        elif m in [2]:
            d_num += 28
        else:
            d_num += 30
    d_num += day
    return d_num

#赤纬角δ的计算
Delta_1 = (23.45*sin(360*(284+n())/365*pi/180)).evalf()
B = (n()-1)*360/365
Delta_2 = (180/pi * (0.006918-0.399912*cos(B*pi/180)+0.070257*sin(B*pi/180)-0.006758*cos(2*B*pi/180)+0.000907*sin(2*B*pi/180)-0.002697*cos(3*B*pi/180)+0.00148*sin(3*B*pi/180))).evalf()
print(Delta_1)
print(Delta_2)

结果:

-2.41773480514234
-2.04197625870849

倾角,Slope

在这里插入图片描述
β,坡度,所述表面平面与水平面的夹角;0°≤β≤180°。(β>90°表示表面有向下的部分。)
水平时,β=0°;垂直时,β=90°。

表面方位角,Surface azimuth angle

在这里插入图片描述
γ,表面方位角,垂直于地面的水平面上的投影与当地子午线的偏差,正南为零、东负、西正;−180°≤γ≤180°。
如果表面有特指的方位角,就按特指的表面方位角来计算。
如果没有特指,表面方位角的计算,按下式计算:
在这里插入图片描述

时角,Hour angle

在这里插入图片描述
ω,时角,由于地球以每小时15°的速度绕地轴自转,太阳在当地子午线以东或以西的角位移;上午为负,下午为正。
时角ω的计算:
以太阳时12:00为0,上午的为负,下午的为正。
例如:
太阳时11:00AM,那么时角ω=(11-12)×15° = -15°
太阳时16:30PM,那么时角ω=(16.5-12)×15° = 67.5°

入射角,Angle of incidence

在这里插入图片描述
θ,入射角,一个表面上的直射辐射与该表面法线之间的夹角。
在这里插入图片描述
将太阳直射辐射在一个表面上的入射角θ与其他角度联系起来的方程如下:
在这里插入图片描述
角度θ可能超过90°,这意味着太阳在表面后面。此外,当使用公式1.6.2时,必须确保地球没有阻挡太阳(即,时角在日出和日落之间)。

天顶角,Zenith angle

在这里插入图片描述
θz,天顶角,垂直线与太阳的夹角,即太阳直射辐射在水平面上的入射角。

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
为了计算太阳时太阳高度顶角太阳方位角剖面,我们需要使用一些数学公式和常数。以下是用Python编写的程序。 import math # 常数 DEG_TO_RAD = math.pi / 180.0 RAD_TO_DEG = 180.0 / math.pi DAYS_IN_YEAR = 365 # 输入 latitude = float(input("请输入纬度(单位:度):")) longitude = float(input("请输入经度(单位:度):")) date = input("请输入日期(格式:YYYY-MM-DD):") time = input("请输入时间(格式:HH:MM:SS):") # 计算儒略日 date_parts = date.split("-") time_parts = time.split(":") year, month, day = int(date_parts[0]), int(date_parts[1]), int(date_parts[2]) hour, minute, second = int(time_parts[0]), int(time_parts[1]), int(time_parts[2]) if month <= 2: year -= 1 month += 12 a = year // 100 b = 2 - a + a // 4 jd_day = int(365.25 * (year + 4716)) + int(30.6001 * (month + 1)) + day + b - 1524.5 jd_hour = hour + minute / 60.0 + second / 3600.0 jd = jd_day + jd_hour / 24.0 # 计算黄赤交 n = jd - 2451545.0 L = 280.460 + 0.9856474 * n g = 357.528 + 0.9856003 * n lamda = L + 1.915 * math.sin(g * DEG_TO_RAD) + 0.020 * math.sin(2 * g * DEG_TO_RAD) epsilon = 23.439 - 0.0000004 * n alpha = math.atan2(math.cos(epsilon * DEG_TO_RAD) * math.sin(lamda * DEG_TO_RAD), math.cos(lamda * DEG_TO_RAD)) * RAD_TO_DEG delta = math.asin(math.sin(epsilon * DEG_TO_RAD) * math.sin(lamda * DEG_TO_RAD)) * RAD_TO_DEG # 计算 time_offset = longitude / 15.0 solar_noon = 12.0 - time_offset hour_angle = (jd_hour - solar_noon) * 15.0 if hour_angle > 180.0: hour_angle -= 360.0 elif hour_angle < -180.0: hour_angle += 360.0 # 计算太阳高度顶角 latitude_rad = latitude * DEG_TO_RAD delta_rad = delta * DEG_TO_RAD hour_angle_rad = hour_angle * DEG_TO_RAD cos_theta = math.sin(latitude_rad) * math.sin(delta_rad) + math.cos(latitude_rad) * math.cos(delta_rad) * math.cos(hour_angle_rad) theta = math.acos(cos_theta) * RAD_TO_DEG zenith = 90.0 - theta # 计算方位角 azimuth_cos = (math.sin(delta_rad) - math.sin(latitude_rad) * cos_theta) / (math.cos(latitude_rad) * math.sin(theta * DEG_TO_RAD)) azimuth_sin = math.sin(hour_angle_rad) * math.cos(delta_rad) / math.sin(theta * DEG_TO_RAD) azimuth = math.atan2(azimuth_cos, azimuth_sin) * RAD_TO_DEG if azimuth < 0.0: azimuth += 360.0 # 计算剖面 declination_cos = math.cos(delta_rad) latitude_cos = math.cos(latitude_rad) cos_alpha = math.sin(theta * DEG_TO_RAD) * math.sin((90.0 - zenith) * DEG_TO_RAD) / (declination_cos * latitude_cos) alpha = math.asin(cos_alpha) * RAD_TO_DEG # 输出结果 print("太阳时:{:.4f} 度".format(hour_angle)) print("太阳高度:{:.4f} 度".format(theta)) print("顶角:{:.4f} 度".format(zenith)) print("太阳方位角:{:.4f} 度".format(azimuth)) print("剖面:{:.4f} 度".format(alpha)) 这个程序的输入包括纬度、经度、日期和时间。程序用输入的参数计算儒略日,并计算出黄赤交太阳的赤纬和赤经。然后程序计算出时太阳高度顶角太阳方位角剖面,最后输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值