题目
模型假设
- 假设地球为标准球体
- 假设太阳光线为平行光线
- 假设地球自转角速度为常量
- 假设摄像机的摆放与地平线平行
- 假设忽略折射现象的影响
- 在不特别说明的情况下,经度指东经的经度,纬度指北纬的纬度
第一问
第一问思路
各个参数的含义:
- 日期(准确的说叫日期序号,即一年当中的第几天)
- 时间(9点钟对应9,9点10分对应9+10/60)
- 经度
- 纬度
- 直杆高度
查阅资料,找到太阳影子长度和这些参数的关系式,模型即建立完毕。
第一问模型
影子长度 l l l,太阳影子顶点横坐标 x x x,太阳影子顶点纵坐标 y y y,满足关系:
l = x 2 + y 2 l=\sqrt{x^2+y^2} l=x2+y2
而太阳影子横纵坐标满足关系式:
{ x = h 2 tan 2 ( A − π ) tan 2 α ( 1 + t a n 2 ( A − π ) ) y = h 2 tan 2 α ( 1 + t a n 2 ( A − π ) ) \begin{cases} x=\sqrt{\frac{h^2\tan^2(A-\pi)}{\tan^2\alpha(1+tan^2(A-\pi))}}\\ y=\sqrt{\frac{h^2}{\tan^2\alpha(1+tan^2(A-\pi))}} \end{cases} ⎩
⎨
⎧x=tan2α(1+tan2(A−π))h2tan2(A−π)y=tan2α(1+tan2(A−π))h2
其中
{ α = arcsin ( sin ϕ sin δ + cos ϕ cos δ cos ω ) A = arcsin ( − sin ω cos δ cos α ) ω = 15 ( t s + σ − 120 15 − 12 ) δ = 23.45 sin ( 2 π ( 284 + n ) 365 ) \begin{cases} \alpha = \arcsin(\sin\phi \sin \delta+\cos\phi \cos\delta \cos \omega )\\ A = \arcsin\left(\frac{-\sin\omega \cos\delta}{\cos \alpha}\right)\\ \omega = 15\left(t_s+\frac{\sigma-120}{15}-12\right)\\ \delta =23.45\sin\left(\frac{2\pi(284+n)}{365}\right) \end{cases} ⎩
⎨
⎧α=arcsin(sinϕsinδ+cosϕcosδcosω)A=arcsin(cosα−sinωcosδ)ω=15(ts+15σ−120−12)δ=23.45sin(3652π(284+n))
主要参数: ϕ \phi ϕ:北纬度数 、 σ \sigma σ: 东经度数、 t s t_s ts:标准时、 n n n:一年当中的第几天、 h h h:直杆高度
中间参数: δ \delta δ:太阳赤纬角(仅与n有关)、 ω \omega ω:太阳时角(与标准时,所在地区东经度数有关)、 α \alpha α:太阳高度角(与前两个中间参数和北纬度数有关)、 A A A:太阳高度角(与前三个中间参数有关)
第一问求解的python代码
from numpy import *
import matplotlib.pyplot as plt
#防作图中文乱码
plt.rc("font",family='SimHei')
#防作图负号乱码
plt.rc("axes",unicode_minus=False)
#定义变量
# l存储影长
# x存储影子顶点横坐标
# y存储影子顶点纵坐标
# h存储直杆高度
# n存储一年中的第几天
# t存储标准时
# bei_wei存储北纬度数
# dong_jing存储东经度数
# chi_wei_jiao存储太阳赤纬角(仅与n有关)
# shi_jiao存储太阳时角(与标准时和东经度数有关)
# gao_du_jiao存储太阳高度角(与北纬度数,东经度数和太阳时角有关)
# fang_wei_jiao存储太阳方位角(与东经度数,太阳时角和太阳高度角有关)
def f(h=3,n=295,t=12,bei_wei=(39+54/60+26/3600),dong_jing=116+23/60+29/3600):
#将北纬的角度转弧度
bei_wei = bei_wei * pi/180
#由n确定太阳赤纬角(弧度制)
chi_wei_jiao = (23.45*sin(2*pi*(284+n)/365))*pi/180
#由标准时和东经度数确定太阳时角(弧度制)
shi_jiao = (15*(t+(dong_jing-120)/15-12))*pi/180
#太阳高度角的确定(弧度制)
gao_du_jiao = arcsin(sin(bei_wei)*sin(chi_wei_jiao)+cos(bei_wei)*cos(chi_wei_jiao)*cos(shi_jiao))
if gao_du_jiao < 0 or gao_du_jiao > pi/2:
l = 300
else:
l = h/tan(gao_du_jiao)
return l
# 作影子长度与杆高的关系图
# h = linspace(2,4,100000)
# y1 = empty((100000,1))
# for i in range(100000):
# y1[i] = f(h=h[i])
# plt.plot(h,y1)
# plt.xlabel('杆高(m)')
# plt.ylabel('影子长度(m)')
# 作影子长度与日期的关系图
# n = linspace(0,365,100000)
# y2 = empty((100000,1))
# for i in range(100000):
# y2[i] = f(n=n[i])
# plt.plot(n,y2)
# plt.xlabel('日期(天)')
# plt.ylabel('影子长度(m)')
# 作影子长度与时间的关系图
# t = linspace(0,24,100000)
# y3 = empty((100000,1))
# for i in range(100000):
# y3[i] = f(t=t[i])
# plt.plot(t,y3)
# plt.ylim(0,301)
# plt.xlabel('时间(h)')
# plt.ylabel('影子长度(m)')
# 作影子长度与北纬度数的关系图
# bei_wei = linspace(-90,90,100000)
# y4 = empty((100000,1))
# for i in range(100000):
# y4[i] = f(bei_wei=bei_wei[i])
# plt.plot(bei_wei,y4)
# plt.ylim(0,301)
# plt.xlabel('北纬度数(°)')
# plt.ylabel('影子长度(m)')
#作影子长度与东经度数的关系图
# dong_jing= linspace(-180,180,100000)
# y5 = empty((100000,1))
# for i in range(100000):
# y5[i] = f(dong_jing=dong_jing[i])
# plt.plot(dong_jing,y5)
# plt.ylim(0,301)
# plt.xlabel('东经度数(°)')
# plt.ylabel('影子长度(m)')
# 模型应用
# t = linspace(9,15,100000)
# y6 = empty((100000,1))
# for i in range(100000):
# y6[i] = f(t=t[i])
# plt.plot(t,y6)
# plt.xlabel('时间')
# plt.ylabel('影子长度(m)')
# 计算影子最短的时候和这个时候的影子长度
# x0 = t[0]
# for i in range(99999):
# if f(t=t[i+1]) < f(t=t[i]):
# x0 = t[i+1]
# fen_zhong = (x0 - x0//1)*60
# miao_zhong = (fen_zhong-fen_zhong//1)*60
# print("%d:%d:%d"%(x0//1,fen_zhong,miao_zhong))
# print("%.4f"%f(t=x0))
#显示图像
plt.show()
今天的文章2015年数学建模A题——太阳影子定位问题(思路&代码)待更分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/83952.html