OSGEarth简单实现根据坐标调整太阳位置

该代码段展示了一个根据经度和纬度调整太阳光照位置的简单算法。它限制太阳在回归线之间移动,并基于给定的地理位置和当前时间计算太阳的位置。通过设定日期时间和使用Sky对象,该方法可以用于模拟不同时间的日照效果。

项目上需要根据坐标来调整太阳光照,搜了下都是根据时间的,简单实现了一下,这里做个记录,算法不是绝对准确。

void setSunPosition(double lon, double lat)
{
	double _lon = lon;
	double _lat = lat;
	if(mSky)
	{
		//太阳只会在回归线之间移动
		if(_lat > 23.4333333)_lat = 23.4333333;
		if(_lat < -23.4333333)_lat = -23.4333333;
		
		double hours = 12.0 - _lon / 180.0*12.0;

		//计算一天移动多少纬度,23.4333333*4/365.0,理论上不是匀速是个正弦函数,但是这里当匀速算
		double dD = 23.4333333 / 91.25;

		//春分时太阳在赤道,即3月21日左右,80天
		double days = _lat / dD;
		int years = 2023;

		days += 80.0
		int months;
		if(days > 0.0)
		{
			months = days / 30;
			days -= months * 30;
		}
		else
		{
			days += 365;
			months = days / 30;
			days -= months * 30;
			years = 2022; 
		}

		DateTime dt(years, months, days, hours);
		mSky->setDateTime(dt);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值