计算重要天文坐标系之间的转换(C#)

来源:互联网 发布:现在流行的网络用词 编辑:程序博客网 时间:2024/05/17 02:28

用了一个多月的时间研究天文坐标系之间的坐标转换,虽然最终项目不得不砍掉与之相关的功能(因为某些原因),但是对于使用计算机模拟宇宙中天体坐标系的相互转换还是有一些非常重要的成果值得分享,希望对从事虚拟现实且开发与太阳系天体运动有关的工作人员有所帮助。微笑

1.天体坐标系基础知识(翻墙所得)







2.C#源码实现

using UnityEngine;using System.Collections;using UnityEngine.UI;/*该脚本实现从地平坐标系转换到赤道坐标系在转换到黄道坐标系【存在问题】 */public class CoordinatesTransform : MonoBehaviour {private float PI;//π值private float HCJJ = (float)(23 + 26 / 60 + (20.512 / 60)/60);//黄赤交角//***********************************************public float A=0;//代表方位角(不能用度数**需除以180度乘以PI)【0~360】public float α=0;//代表高度角(不能用度数**需除以180度乘以PI)【-90~+90】private float φ=39.62f;//代表观测者所在纬度(不能用度数**需除以180度乘以PI)private float H;//时角private float sinH=0;//时角正弦值private float cosH=0;//时角余弦值private float sinδ=0;//赤纬正弦值private float cosδ=0;//赤纬余弦值private float cosδcosH=0;private float cosδsinH=0;private float ChiJing=0;//赤经//***********************************************private float sinHuangWei=0;//黄纬正弦值private float cosHuangJingcosHuangWei=0;private float sinHuangJingcosHuangWei=0;private Vector3 HD_POS;//在黄道坐标系中摄像机方向向量void Start () {PI = Mathf.PI;}void Update () {//从地平坐标系转换到赤道坐标系sinδ = Mathf.Sin (φ / 180 * PI) * Mathf.Sin (α / 180 * PI)+ Mathf.Cos (φ / 180 * PI) * Mathf.Cos (α / 180 * PI) * Mathf.Cos (A / 180 * PI);cosδcosH = Mathf.Cos (φ / 180 * PI) * Mathf.Sin (α / 180 * PI)- Mathf.Sin (φ / 180 * PI) * Mathf.Cos (α / 180 * PI) * Mathf.Cos (A / 180 * PI);cosδsinH = -Mathf.Sin (A / 180 * PI) * Mathf.Cos (α / 180 * PI);//计算整理需要的变量值cosδ = Mathf.Sqrt(1 - sinδ * sinδ);//可以直接开根号cosH = cosδcosH / cosδ;sinH = cosδsinH / cosδ;H = Mathf.Atan2 (sinH, cosH);//返回一个值【时角】范围-pi~+pi,应该是0~2PIChiJing =9.30f - H;//求赤经(这里有一个值【地方恒星时】需要从网页中读取)//赤道坐标转到黄道坐标sinHuangWei = Mathf.Cos (HCJJ / 180 * PI) * sinδ - Mathf.Sin(ChiJing) * cosδ * Mathf.Sin (HCJJ / 180 * PI);cosHuangJingcosHuangWei = Mathf.Cos(ChiJing) * cosδ;sinHuangJingcosHuangWei = Mathf.Sin (HCJJ / 180 * PI) * sinδ + Mathf.Sin(ChiJing) * cosδ * Mathf.Cos (HCJJ / 180 * PI);//获取黄道坐标系点坐标HD_POS.x = cosHuangJingcosHuangWei;HD_POS.y = sinHuangJingcosHuangWei;HD_POS.z = sinHuangWei;Camera.main.transform.LookAt (HD_POS);}}




0 0
原创粉丝点击