2015年数学建模A题——太阳影子定位问题(思路&代码)待更

题目

在这里插入图片描述

模型假设

  • 假设地球为标准球体
  • 假设太阳光线为平行光线
  • 假设地球自转角速度为常量
  • 假设摄像机的摆放与地平线平行
  • 假设忽略折射现象的影响
  • 在不特别说明的情况下,经度指东经的经度,纬度指北纬的纬度

第一问

第一问思路

各个参数的含义:

  1. 日期(准确的说叫日期序号,即一年当中的第几天)
  2. 时间(9点钟对应9,9点10分对应9+10/60)
  3. 经度
  4. 纬度
  5. 直杆高度

查阅资料,找到太阳影子长度和这些参数的关系式,模型即建立完毕。

第一问模型

影子长度 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σ12012)δ=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()


  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值