牧夫天文网

 找回密码
 加入牧夫(请注明天文爱好者,否则无法通过审核)

QQ登录

只需一步,快速开始

[自制DIY] (原创)实时星图的绘制方法

[复制链接]
天籁 发表于 2013-3-16 15:20 | 显示全部楼层 |阅读模式 来自: 福建省泉州市 电信

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?加入牧夫(请注明天文爱好者,否则无法通过审核)

x
搞老久,然后就实现了。
以下文字需要些许天文基础和程序基础~。
一、准备数据:
5等以上星表,M天体星表,EXCEL整整,弄到TXT,丢到主控板的TF卡~(估计以后需要丢到SPI FLASH,TF感觉弄起来速度不快的样子)
星表包含信息:
RA,DEC,Magnitude,
M天体:RA,DEC,对于星等无所谓。

星座连线信息:
这里参考PP3的开源软件里边的一个dat文件,找得半死,自己不想整理这些连线,太多了!
然后耗时一天修修改改,最后用EXCEL转换成自己需要的数据。
最后体现出来的是一系列的数字序号,搞成CONST数组丢到单片机ROM去了,再弄TF卡那更XX慢了~

星座名称信息:
这个啊,直接按照星座英文简写,还有定义了下文中提到的一个“星座管理结构体”,直接指定在每个星座的α星旁边把星座名称显示出来。


二、程序准备:
1、星点绘图结构体,星座管理结构体

typedef struct _ConsDef
{
unsigned char Cname[3];
unsigned short Cnumber;
}Constellation;
//这个上文提到了,Cname是星座英文简写,很明显,这是3个字符的字符串哦也。
//Cnumber呢,是这个星座的α星在我整理的星表里边的序号。数据都XX大,不贴出来,有兴趣可以找我要。
/*
星等规约 Magi的规定:(涉及画点的大小)
4等为0,
3等为1,
2等为2,
1等为3,
0等为4,
-1等为5,
*/
typedef struct _Draw
{
signed short DDX;
signed short DDY;
signed char Magi; //星等
}StarDraw;
DDX: 赤平投影后的星点平面横坐标
DDY: 赤平投影后的星点平面纵坐标

2、极射赤平投影计算函数,用来实现三维到二维变换。 这里参考了国内某期刊老旧的文件,自己分析了下。
//单点极射赤平投影计算,计算对象单位:弧度
MapStar* Stereographic(MapStar* star)
{
static MapStar pr_star;
float Long1,Lat1,
Sin1,Sin2,Sin3,Cos1,Cos2,Cos3,
K;

Long1 = 0.0;//SysCoordinate.longitude;//这个结构体用来管理地理经纬度,海拔高度
Lat1 = 0.0//SysCoordinate.latitude;
star->X = star->X*PI/180.0;
star->Y = star->Y*PI/180.0;
Sin1 = arm_sin_f32(Lat1);
        // 这类arm_sin_f32类似的函数是ARM_MATH的LIB文件提供的,使用时必须包含头文件,对于F4这涉及FPU的使用
Sin2 = arm_sin_f32(star->Y);
Sin3 = arm_sin_f32(star->X - Long1);
Cos1 = arm_cos_f32(Lat1);
Cos2 = arm_cos_f32(star->Y);
Cos3 = arm_cos_f32(star->X - Long1);

K = 2 / (1 + Sin1*Sin2 + Cos1*Cos2*Cos3);
pr_star.X = K*Radius*Cos2*Sin3;
pr_star.Y = K*Radius*(Cos1*Sin2 - Sin1*Cos2*Cos3);
return &pr_star;
}

3、实时恒星时计算//这里参考stellarium 的程序,直接COPY使用了,二话不说啊!自己没演算过。
Sidereal_def Sidereal_time; //实时恒星时

extern Obliquity_def Obliquity;
extern Nutation_def Nutation_cal;

//function:
//Get the Sidereal_Time on xxx longitude
//平恒星时
void Mean_Sidereal_Time(double longitude,double JD)
{
double T,s,num;
T =  (JD - 2451545.0) / 36525.0;
s = 280.46061837 + (360.98564736629 * (JD - 2451545.0)) + (0.000387933 * T * T) - (T * T * T / 38710000.0);
num = s + longitude;
Sidereal_time.mean_sidereal_time = fmod(num,360)/15.0;
//return lms;
}
//真恒星时
void Apparent_Sidereal_Time(void)
{
double correction = 0.0;
correction = Nutation_cal.nl * arm_cos_f32(Obliquity.apparent_obliquity*PI/180.0);
Sidereal_time.apparent_sidereal_time = (Sidereal_time.mean_sidereal_time*15.0 + correction)/15.0;
}

平恒星时和真恒星时,算了一下后发现相差很小,于是无所谓了。对于星图显示,超级无所谓。

4、GUI界面:ucGUI
程序啥子就不能贴了,不可能贴得出来的,太多。。。
本来想自己写一下GUI来弄星图界面,但是当时发现超级麻烦的,太头大了。其实现在想一下,是可以实现的,就是那些窗口重绘什么比较麻烦,大概需要参考下ucGUI的核心代码部分。

5、星点绘制
程序比较多了,不想贴也不能贴。
思路:

读星点数据->赤平投影变换->根据星点坐标和星等大小打点。M天体打点的时候用了黄色,大小都相等,以示区分

6、星座连线绘制
读星座连线数组->指定到赤平投影后的星点->画直线。

7、星座名称显示
读星座结构体->指定到赤平投影后的星点->显示字符串、

8、
看实际效果么:
单纯画星点效果:
psb (3).jpg

这个是一个礼拜前的结果。
赤平投影的时候选择的天球半径为400


psb (5).jpg

psb (4).jpg
这个有所不同了,这个是这个星期的最后结果了
黄色的点是M天体,星座名称有,星点连线也有。。。赤平投影所用半径为200














 楼主| 天籁 发表于 2013-3-16 15:22 | 显示全部楼层 来自: 福建省泉州市 电信
自己制作的盒子,这是我的毕业设计。
电子专业的可以参考下:

MCU:STM32F407VGT6
OS: ucos
GUI: ucGUI

这是个GOTO,使用触屏进行GOTO,这部分还在做,
GOTO的精度是很一般的精度,没有三星校正,没有其他什么校正,用的是J2000的表。
回复 支持 反对

使用道具 举报

 楼主| 天籁 发表于 2013-3-16 15:24 | 显示全部楼层 来自: 福建省泉州市 电信
屏幕使用的是:
5英寸,800x480分辨率
使用SSD1963来驱动,如果是搞电子的同好也想搞来玩的话,这个驱动最好不要用。
我山寨了VIXEN TEN的外观,当然,没山寨到那么好看,盒子自己加工的。。
回复 支持 反对

使用道具 举报

曾潇 发表于 2013-3-16 15:36 | 显示全部楼层 来自: 辽宁省抚顺市 联通
LZ人才啊,膜拜一下

点评

估计电子专业的人都能搞,就是是否投入咯。。。  详情 回复 发表于 2013-3-16 15:51
回复 支持 反对

使用道具 举报

OrieR 发表于 2013-3-16 15:39 | 显示全部楼层 来自: 河北省石家庄市 联通
太牛了{:soso_e179:}

点评

各专业都有各专业牛的地方。。。 呵呵,,玩玩罢了  详情 回复 发表于 2013-3-16 15:52
回复 支持 反对

使用道具 举报

 楼主| 天籁 发表于 2013-3-16 15:51 | 显示全部楼层 来自: 福建省泉州市 电信
回复 支持 反对

使用道具 举报

 楼主| 天籁 发表于 2013-3-16 15:52 | 显示全部楼层 来自: 福建省泉州市 电信

各专业都有各专业牛的地方。。。
呵呵,,玩玩罢了
回复 支持 反对

使用道具 举报

bambooforest 发表于 2013-3-16 17:44 | 显示全部楼层 来自: 河南省洛阳市 电信
很好很强大{:soso_e113:}

点评

呵呵。。 一般一般哈。!!!!!!!!!  详情 回复 发表于 2013-3-16 18:33
回复 支持 反对

使用道具 举报

solarshen 发表于 2013-3-16 18:15 | 显示全部楼层 来自: 江苏省盐城市 中移铁通
很强大!

点评

触屏GOTO在完善中。。。。 呵呵!!!!!!!  详情 回复 发表于 2013-3-16 18:33
回复 支持 反对

使用道具 举报

 楼主| 天籁 发表于 2013-3-16 18:33 | 显示全部楼层 来自: 福建省泉州市 电信
bambooforest 发表于 2013-3-16 17:44
很好很强大

呵呵。。
一般一般哈。!!!!!!!!!



回复 支持 反对

使用道具 举报

 楼主| 天籁 发表于 2013-3-16 18:33 | 显示全部楼层 来自: 福建省泉州市 电信

触屏GOTO在完善中。。。。


呵呵!!!!!!!

点评

LZ可以接活了!  详情 回复 发表于 2013-3-16 18:35
回复 支持 反对

使用道具 举报

solarshen 发表于 2013-3-16 18:35 | 显示全部楼层 来自: 江苏省盐城市 中移铁通
天籁 发表于 2013-3-16 18:33
触屏GOTO在完善中。。。。

LZ可以接活了!

点评

还没毕业,不敢当, 六月份毕业的 啥子实际经验没有,得学!  详情 回复 发表于 2013-3-16 18:40
回复 支持 反对

使用道具 举报

kingkey 发表于 2013-3-16 18:37 | 显示全部楼层 来自: 河北省石家庄市 电信
楼主大神 膜拜一下!

点评

淡定,你自己在其他方面也是大神。  详情 回复 发表于 2013-3-16 18:40
回复 支持 反对

使用道具 举报

 楼主| 天籁 发表于 2013-3-16 18:40 | 显示全部楼层 来自: 福建省泉州市 电信
kingkey 发表于 2013-3-16 18:37
楼主大神 膜拜一下!

淡定,你自己在其他方面也是大神。
回复 支持 反对

使用道具 举报

 楼主| 天籁 发表于 2013-3-16 18:40 | 显示全部楼层 来自: 福建省泉州市 电信
solarshen 发表于 2013-3-16 18:35
LZ可以接活了!

还没毕业,不敢当,
六月份毕业的
啥子实际经验没有,得学!
回复 支持 反对

使用道具 举报

星河小将 发表于 2013-3-16 19:50 | 显示全部楼层 来自: 陕西省西安市 电信
咱磨镜群里的牛人就是多
回复 支持 反对

使用道具 举报

yt47 发表于 2013-3-16 19:55 来自手机 | 显示全部楼层 来自: 江苏省苏州市昆山市 电信
牛人啊,技术控

点评

呵呵。。专业和爱好结合。。。。。。。。  详情 回复 发表于 2013-3-16 23:29
回复 支持 反对

使用道具 举报

 楼主| 天籁 发表于 2013-3-16 23:29 | 显示全部楼层 来自: 福建省泉州市 电信
yt47 发表于 2013-3-16 19:55
牛人啊,技术控

呵呵。。专业和爱好结合。。。。。。。。
回复 支持 反对

使用道具 举报

角落里的烟嘴 发表于 2013-3-17 02:06 来自手机 | 显示全部楼层 来自: 江苏省南京市 联通
牛大! 自己做 星图 触摸屏显示 触发goto 牛了 完善好完全可以做成产品

点评

是的,不过,需要更换CPU了。 哈哈,这个芯片力不从心啊。  详情 回复 发表于 2013-3-17 10:45
回复 支持 反对

使用道具 举报

 楼主| 天籁 发表于 2013-3-17 10:45 | 显示全部楼层 来自: 福建省泉州市 电信
角落里的烟嘴 发表于 2013-3-17 02:06
牛大! 自己做 星图 触摸屏显示 触发goto 牛了 完善好完全可以做成产品

是的,不过,需要更换CPU了。


哈哈,这个芯片力不从心啊。

点评

F4能跑168MHz啊,又有FPU,这样速度都不够吗?  详情 回复 发表于 2013-3-18 22:29
回复 支持 反对

使用道具 举报

本版积分规则

快速回复 返回顶部 返回列表