/*
输入参数:
Longitude - 经度(单位"度")
Latitude - 纬度(单位"度")
Year - 年
Month - 月
Day - 日
Hour - 时
Minute - 分
Second - 秒 输出参数:
Height - 太阳高度角 (单位"弧度")
Direction - 太阳方位角 (单位"弧度")
*/
void SunPositionNR(double Longitude, double Latitude, int year, int month, int day, int hour, int minute, int second, double& height, double& direction)
{
double A = year/4;
double B = A-floor(A);
double C = 32.8;
if(month <= 2)
C = 30.6;
if(B==0 && month>2)
C = 31.8;
double G = floor(30.6*month-C+0.5)+day;
double L = Longitude/15.0; //经度修正
double H = hour-8 + minute/60.0; //时刻修正
double N = G+(H-L)/24.0; //计算积日
double theta, NO; //theta为日角
NO = 79.6764 + 0.2422*(year-1985) - floor((year-1985)/4.0);
theta = 2*PI*(N-NO)/365.2422; double lat;//赤纬角
lat = 0.3723+23.2567*sin(theta)+0.1149*sin(2*theta)-0.1712*sin(3*theta)-0.758*cos(theta)+0.3656*cos(2*theta)+0.0201*cos(3*theta);
lat = lat*3.14159265358979/180.0; double Et;//时差(以分钟为单位)
Et = 0.0028-1.9857*sin(theta)+9.9059*sin(2*theta)-7.0924*cos(theta)-0.6882*cos(2*theta); double timeAngle;//时角
timeAngle = ( (hour-12) + (minute - (120.0-Longitude) * 4.0 + Et)/60.0 ) * 15.0;
timeAngle = timeAngle * 3.14159265358979 / 180.0; // 将纬度由角度转换为弧度
Latitude = Latitude * 3.14159265358979 / 180.0; // 太阳高度角
height = sin(Latitude)*sin(lat)+cos(Latitude)*cos(lat)*cos(timeAngle);
height = asin(height); // 太阳方位角
direction = (sin(height)*sin(Latitude)-sin(lat))/(cos(height)*cos(Latitude));
direction = acos(direction); if (timeAngle<0) //(以正南方向为0度,顺时针为正)
direction *= -1.0;
}

以武汉某一天为例:

将日出时间代入得到:height = -0.015, 算是非常准确的了。

[c++] 计算太阳高度角的更多相关文章

  1. 前端极易被误导的css选择器权重计算及css内联样式的妙用技巧

    记得大学时候,专业课的网页设计书籍里面讲过css选择器权重的计算:id是100,class是10,html标签是5等等,然后全部加起来的和进行比较... 我只想说:真是误人子弟,害人不浅! 最近,在前 ...

  2. 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  3. C语言 · 薪水计算

    问题描述 编写一个程序,计算员工的周薪.薪水的计算是以小时为单位,如果在一周的时间内,员工工作的时间不超过40 个小时,那么他/她的总收入等于工作时间乘以每小时的薪水.如果员工工作的时间在40 到50 ...

  4. C语言 · 阶乘计算 · 基础练习

    问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*-*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个大整数a,A[0]表 ...

  5. C语言 · 最大值与最小值计算

    输入11个整数,计算它们的最大值和最小值. 样例输入 0 1 2 3 4 5 6 7 8 9 10 样例输出 10 0   #include<stdio.h> int main(){ ]; ...

  6. 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...

  7. SQL Server-聚焦计算列或计算列持久化查询性能(二十二)

    前言 上一节我们详细讲解了计算列以及计算列持久化的问题,本节我们依然如前面讲解来看看二者查询性能问题,简短的内容,深入的理解,Always to review the basics. 持久化计算列比非 ...

  8. SQL Server-聚焦计算列持久化(二十一)

    前言 上一节我们结束了Hash Match Aggregate和Stream Aggregate的讲解,本系列我们来讲讲关于SQL Server中的计算列问题,简短的内容,深入的理解,Always t ...

  9. javascript:逆波兰式表示法计算表达式结果

    逆波兰式表示法,是由栈做基础的表达式,举个例子: 5 1 2 + 4 * + 3 -  等价于   5 + ((1 + 2) * 4) - 3 原理:依次将5 1 2 压入栈中, 这时遇到了运算符 + ...

随机推荐

  1. mysql 导出导入数据库(Mysqldump)备份

    使用mysql不熟练啊!!! mysqldump导出数据库,必须以cmd命令行的形式,在Navicat中以新建查询形式使用Mysqldump不好使的.(本来使用Navicat转储SQL,再导入SQL, ...

  2. ZOJ 2967计算几何+单调栈

    ZOJ - 2967Colorful Rainbows 题目大意:给你道彩虹,每条彩虹有两个属性,a斜率和b截距,也就是彩虹描述为y=ax+b的直线,并且不存在垂直的彩虹以及一样的彩虹.然后就说明,如 ...

  3. 灰度图像--图像分割 Marr-Hildreth算子(LoG算子)

    学习DIP第49天 转载请标明本文出处:*http://blog.csdn.net/tonyshengtan *,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发: https:/ ...

  4. mysql清表时有外键关联处理办法

    可以忽视关联的情况下: 先取消主外键关系验证:SET FOREIGN_KEY_CHECKS = 0; 然后删除需要删除的数据:truncate table table_name; 最后恢复:SET F ...

  5. vue 甘特图简单制作

    甘特图(Gantt chart)又称为横道图.条状图(Bar chart).其通过条状图来显示项目,进度,和其他时间相关的系统进展的内在关系随着时间进展的情况.以提出者亨利·L·甘特(Henrry L ...

  6. Python基础之Python语言类型

    编程语言主要从以下几个角度进行分类: 编译型和解释型 静态语言和动态语言 强类型定义语言和弱类型定义语言 编译和解释的区别是什么? 编译器把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样 ...

  7. XOR Guessing

    ​ E. XOR Guessing 第一次做这种交互题,刚开始还看不懂,现在已经差不多可以理解了,清空缓存区用cout<<endl;即可,需要注意的是,如果用fflush(stdout)来 ...

  8. Codeforces 514 D R2D2 and Droid Army(Trie树)

    题目链接 大意是判断所给字符串组中是否存在与查询串仅一字符之差的字符串. 关于字符串查询的题,可以用字典树(Trie树)来解,第一次接触,做个小记.在查询时按题目要求进行查询. 代码: #define ...

  9. [c++] C++多态(虚函数和虚继承)

    转自:https://www.jianshu.com/p/02183498a2c2 面向对象的三大特性是封装.继承和多态.多态是非常重要的一个特性,C++多态基于虚函数和虚继承实现,本文将完整挖掘C+ ...

  10. 化学结构SDF文件

    参考博客 第一行:一般作为分子名字,如 Levetiracetam 第二行:注释,ChemDraw06111413562D 第三行:一般是空行 第四行:是原子个数 键的个数等的起始行. M END所在 ...