skyatlas:用R绘制星图和行星的周年视运动

在一些天文期刊上经常看到赤道坐标星图,不但给出了某一个时刻太阳、月亮的位置,还给出了大行星在一年中相对于星空背景的运行轨迹。今天我们就用R软件绘制这样的星图。

当然,为了绘制星图,我们需要知道恒星的位置和亮度。这就需要引入天文坐标系。天文学上天体的位置有多种坐标系统,包括赤道坐标系,黄道坐标系和地平坐标系等。

首先介绍一下今天用到的赤道坐标系。

赤道坐标系是以春分点作为起点,春分点和秋分点是赤道和黄道两个大圈相交的点。由于地球的自转,我们看到太阳相对于恒星背景从西向东运行,太阳所经过的路线就称为黄道。不难想象,春分点过后,太阳相对于星空背景一天天逐渐向北移动(当然也同时向东移动,差不多每天移动1度多一点儿)。我们就说春分点为升交点。太阳到达夏至点的时候,是最北的,之后逐渐向南,到秋分点又与赤道相交。因此秋分点又称为降交点。太阳继续向南,此时太阳位于天赤道以南。到达冬至点之后又逐渐向北。如此周而复始。

我们定义赤道坐标系的原点就是升交点,向左度量,一圈用24h表示。其经度就称为“赤经”,其纬度就称为“赤纬”,用度表示, 北半球为正,南半球为负。这就是我们将要看到的图形中的星图。天文学上的星图左东右西,与地图正好相反。

其次,我们需要了解一下恒星的位置和亮度。
这里我们选取了耶鲁亮星星表。这个星表包含了肉眼可见的9110颗较亮恒星的位置亮度等信息。按照肉眼可见的亮度分成不同的星等,星的亮度是用照相测量法测量的。

第三,我们需要知道行星在任何一个时刻的位置。即,我们输入时刻,就有程序可以计算出该天体的位置等信息。这是球面天文学和天体力学的内容了。我们这里使用R的moonsun程序包计算某一时刻天体的位置和亮度。 我们需要输入的时间为儒略日(Julian day)。儒略日是什么?儒略日是指从公元前4713年1月1日中午12时开始,开始距离现在的天数。我们输入的日期都必须先转换成儒略日,再用儒略日作为时间点计算。儒略日计算两个时间点之间相隔的天数非常方便,因此在天文学上得到了广泛的应用。

第四,我们需要了解一下行星运行的基本知识。
水星,金星位于地球内侧,更靠近太阳,称为内行星。火星,木星,土星,天王星,海王星位于地球外侧,称为外行星。
八大行星的轨道与黄道相差不大,而且均自西向东运行。靠近太阳最近的水星运行速度最快。从地球上看,行星相对于星空背景有时候向东,有时候向西。向东称为顺行,各行星大部分时间在顺行中,向西称为逆行,在顺行和逆行的转换过程中,有较短的时间,行星相对星空背景处于相对静止的状态,称为留。

这里给出了skyatlasR程序能够绘制行星周年视运动的轨迹,当然,由于没有考虑到星体之间的摄动等更精确的天体力学因素,行星的位置计算不太高,精度在几角分之内,但是仍然能够满足大部分天文科普的需求。更精确的历表就得参考NASA,也就是美国国家航空航天局喷气推进实验室的HORIZON历书系统了。用户可以在线查询一些信息。

下面简要介绍一下 skyatlas 程序的用法

使用方法

当然,首先要下载我们编好的程序了。 下载 skyatlas.rar

1 下载R软件 http://ftp.ctex.org/mirrors/CRAN/bin/windows/base/R-2.11.1-win32.exe 下载
2 将 “plot.r”, “resstar.csv”, “moonsun_0.1.1.zip” 拷贝到 C:下,”moonsun_0.1.1.zip” 为R程序包,安装时不需要解压缩。
3 安装moonsun.zip程序包,双击R的图标,路径为 开始>所有程序> R, 2.11.1, 然后再菜单中选择,菜单“程序包”,“从本地zip安装程序包”,选择 moonsun_0.1.1.zip 即可。
4 从R的菜单 “文件” “source R code”. 打开 “C:/plot.r”,或者输入命令source(“C:/plot.r”)即可。

运行实例
R图形的组件都是一步一步添加上去的,故绘制一个图形步骤较多,这里举出了绘制水星1980年和2011年的例子,可供有兴趣的读者参考。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
######################################
######################################

### 例一 绘制1980年水星的周年视运动
## 该结果与《中国大百科全书 天文学卷》参见 485页 进行比较,水星的运行曲线结果是一致的。
x11(14, 5)
##绘制底图
background(type = "n", xlim =c(0, 24), ylim = c(-40, 40), xlab = "赤经", ylab = "赤纬")

##添加黄道
add.ecliptic()

##添加4等以上的恒星
add.stars(resstar, mag = 4, pch = 19, time = 1)

## 添加水星的运行轨迹
tracks(mercury(jd(year = 1980,month = 1,day = 1,length = 365)))
## 添加亮星的名称
add.bright.lab ()

###生成每隔30天的点数据,
position <- mercury(jd(year = 1980,month = 1, day = 1,length = 12, by = 30))
addlab(position)
title("1980年水星的周年视运动")

结果如下

img

例二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
### 2011水星的周年视运动

### 第一步 打开一个绘图窗口
x11(14, 5)
## 第二步 绘制底图
background(type = "n", xlim =c(0, 24), ylim = c(-40, 40), xlab = "赤经", ylab = "赤纬")

##添加黄道
add.ecliptic()

##第四步 添加4等以上的恒星
add.stars(resstar, mag = 4, pch = 19, time = 1)

## 第五步 添加水星的运行轨迹
tracks(mercury(jd(year = 2010,month = 1,day = 1,length = 365)))

## 第六步 添加亮星的名称
add.bright.lab()

###第七步 添加生成每隔30天的点数据,并标在图上
position <- mercury(jd(year = 2010,month = 1, day = 1,length = 12, by = 30))
addlab(position)

### 第八步 添加标题
title("2011年水星的周年视运动")

img

例三 当前时刻日月及大行星的位置图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
### 打开一个绘图窗口
x11(14, 5)

## 绘制赤道背景坐标
background(type = "n", xlim =c(0, 24), ylim = c(-40, 40), xlab = "赤经", ylab = "赤纬", bg = "darkblue")

##添加黄道
add.ecliptic()

## 添加4等以上的恒星
add.stars(resstar, mag = 4, pch = 19, time = 1)

## 添加亮星的名称
add.bright.lab()

#### 添加大行星
add.planet(col = "black")

## 添加标题
title(paste("", "日月及大行星的位置(",as.character(Sys.Date()),")" ))

img