当前位置:首页 > 技术心得 > 正文内容

穆斯林朝拜方向计算Qibla Direction

xjtudll13年前 (2013-10-31)技术心得68720

穆斯林礼拜都是朝向麦加的“克尔白”(Kaaba)。在中国,大家都知道是向西。但是,很多人并不清楚到底是向“正”西,还是向朝西的某个角度。精确的方向该如何计算?这个问题就等同于:已知两地(其中一地是麦加)的经度,纬度,如何求方位角。学术的讲法就是大地主题算法。

大地主题算法有好几种,例如贝塞尔大地主题算法,高斯平均引数等。

在球面上有两点P1和P2,其中P1点的大地纬度φ1,大地经度λ1,P2点的大地纬度φ2,大地经度λ2;P1和P2点间的大圆弧长为σ,P1和P2的方位角为α1,其反方位角为α2。

球面上大地主题正解是已知φ1,α1,σ,要求φ2, α2及经差λ(λ=λ2-λ1);反解是已知φ1,φ2及经差λ,要求σ,α1及α2。

未命名  

  大地主题  P是真北

对于朝拜方向的计算,是大地主题的反解。

其中P2点是麦加,经纬度是:λ2=39.82°,φ2=21.42°

当然我们不需要计算弧长σ,只需要计算方位角α1。计算公式如下:

sshot-6    

注:λ2,φ2是麦加的经纬度:λ2=39.82°,φ2=21.42°

这里算出来的是方位角的正切值,还要将其转换成0~360的角度值。

(1) p>0,q>0

α1=arctan(|p/q|)

(2) p>0,q<0

α1=180-arctan(|p/q|)

(3) p<0,q>0

α1=180+arctan(|p/q|)

(4) p<0,q<0

α1=360- arctan(|p/q|)

(5) p=0,q>0

    α1=0

(6) p=0,q<0

    α1=180

(7) p>0,q=0

    α1=90

(8) p<0,q=0

    α1=270  

很明显,朝拜方向是相对于正北来的。那么,首先要知道正北在哪里。配合指南针来使用是个好办法。需要注意的是,指南针是指向磁北的,磁北和真北不是重合的,有个磁偏角。  

参考文献:

1、贝塞尔大地主题反解的改进算法   史国友等

2、Qibla Direction

http://moonsighting.com/qibla.html  

可从网页查看源代码,内有计算的过程 

3、白塞尔大地主题解算方法ppt(从百度文库下载)

4、islamicfinder

http://www.islamicfinder.org/  

    该网站提供穆斯林软件下载,软件功能包括祈祷时间,祈祷方位角等等。

扫描二维码推送至手机访问。

版权声明:本文由鸟的天空发布,如需转载请注明出处。

本文链接:http://www.xjtudll.cn/Exp/289/

标签: 穆斯林算法
分享给朋友:

“穆斯林朝拜方向计算Qibla Direction” 的相关文章

Win7 64bit安装keyshot 0xc000007b 错误解决

 先放出keysho 3.2.36的下载地址: 32bit:http://download.keyshot.com/keyshot_w32_3.2.36.exe 64bit:http://download.keyshot.com/keyshot_w64_3.2.36.exe 和谐包下载:...

C# 获取文件的修改时间、访问时间、创建时间

C# 获取文件的各个时间如下:<ccid_nobr>属性功能和用途Attributes返回和文件相关的属性值,运用了FileAttributes枚举类型值CreationTime返回文件的创建时间Exists检查文件是否存在于给定的目录中Extension返回文件的扩展名LastAcce...

金蝶K3:自定义的万能报表位置

金蝶K3:自定义的万能报表位置

场景:客户再【会计总账管理系统】开发了一个万能报表【AAA】 后来因工作交接或者某些原因忘记这个AAA报表放在哪个子系统下了,由于K3子系统非常多,要逐个切换子系统来找自己建立的万能报表再哪里;非常麻烦:使用下面这段脚本查询:select b.FName,* from t_UserDefineRpt...

运放芯片不用的输入端的处理

本文转载自21IC论坛。 对于数字器件,尤其是CMOS器件,不用的输入端不能悬空,这个道理好像已经尽人皆知了。至少在21IC,时不时就会有人发帖让大家“温习”这个问题。但对于模拟器件,好像认识还有些模糊。 就以运放为例。多运放芯片中不用的运放怎么处理,好像是新手们的一个共同疑问。(有这个疑问是好...

双击打开exe程序和Process.Start区别

问题:使用Process.Start打开.exe程序的时候发现在使用时无法加载启动路径的配置文件。启动代码:Process process = new Process();          &nbs...

IOS获取应用程序的名称和版本号

应用程序的名称和版本号等信息都保存在mainBundle的一个字典中,用下面代码可以取出来。 NSDictionary* infoDict =[[NSBundle mainBundle] infoDictionary]; NSString* versionNum =[infoDict object...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。