太阳直射点经纬度计算方法

在一个三维系统中,要根据时间确定太阳位置,并将此位置设置为具体的光源

以产生真实光照及阴影效果

太阳的直射点经纬度计算方法如下:

根据基础的地理知识,

纬度:太阳高度角为90度的地方的纬度

经度:当地时间为正午12点的地方的经度

经度比较好算,一天24小时,地球360度,

经度每差一度,时间差4分钟

经度几乎是每分钟都会变化的,纬度则是每天变化

先来看看经度的计算方法

EXPORT double CALLBACK CalcLongitude(double currLong,double currTime) { double res = 0.0; if(currLong>=0) { res = (12.0 - currTime)*15.0+currLong; if(res>180.0) { res -= 360.0; } } else { res = currLong - (currTime - 12.0)*15.0; if(res<-180.0) res += 360.0; } return res; }

纬度的计算方法,参考网上的python代码改编过来的

具体的参数也是不懂,不过实际测试了一下,与实际情况一致

int CalcDay(int year,int month,int day) { int leap=0; if((year%4==0 && year%100 !=0) || year%400 ==0) { leap = 1; } else { leap = 0; } int mm[12]= {0,31,leap+59,leap+90,leap+120,leap+151,leap+181,leap+212,leap+243,leap+273,leap+304,leap+334}; return mm[month-1]+day; } EXPORT double CALLBACK CalcLatitude(int year,int month,int day) { double tick = CalcDay(year,month,day) - 79.6764-0.2422*(year-1985)+int((year-1985)/4); double sita = 2*3.14159265*tick/365.2422; double delta = 0.3723+23.2567*sin(sita) +0.1149*sin(2*sita)-0.1712*sin(3*sita) -0.758*cos(sita)+0.3656*cos(2*sita) +0.0201*cos(3*sita); return delta; }

参考:http://blog.chinaunix.net/u/21370/showart_390554.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值