mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

Ruby - 赤道・黄道座標の変換(by 自作 gem ライブラリ)!

[ プログラミング, 暦・カレンダー ] [ Ruby, RubyGems, カレンダー ]

こんばんは。

赤道直交座標と黄道直交座標を相互に変換したり、直交座標と極座標を相互に変換したりする RubyGems ライブラリを作成しました。

以下、その簡単な使用例です。

0. 前提条件

1. Ruby スクリプトの作成例

coord_conversion.rb
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#! /usr/local/bin/ruby
# coding: utf-8
#---------------------------------------------------------------------------------
#= 赤道・黄道座標変換
#
# date          name            version
# 2016.08.29    mk-mode.com     1.00 新規作成
#
# Copyright(C) 2016 mk-mode.com All Rights Reserved.
#---------------------------------------------------------------------------------
#++
require "mk_coord"

class CoordConversion
  # 黄道傾斜角(単位: rad)
  # (Math::PI は MkCoord::Const::PI と置き換えてもよい)
  EPS = 23.43929 * Math::PI / 180.0
  # 元の赤道直交座標
  POS = [
     0.99443659220700997281,
    -0.03816291768957833647,
    -0.01655177670960058384
  ]  # <= ある日の地球重心から見た太陽重心の位置(単位: AU)

  def exec
    puts "元の赤道直交座標:\n  #{POS}"
    rect_ec = MkCoord.rect_eq2ec(POS, EPS)
    puts "黄道直交座標に変換:\n  #{rect_ec}"
    rect_eq = MkCoord.rect_ec2eq(rect_ec, EPS)
    puts "赤道直交座標に戻す:\n  #{rect_eq}"
    *pol_eq, r = MkCoord.rect2pol(rect_eq)
    puts "赤道極座標に変換:\n  #{pol_eq[0, 2]} (R = #{r})"
    pol_ec = MkCoord.pol_eq2ec(pol_eq[0, 2], EPS)
    puts "黄道極座標に変換:\n  #{pol_ec[0, 2]}"
    pol_eq = MkCoord.pol_ec2eq(pol_ec, EPS)
    puts "赤道極座標に戻す:\n  #{pol_eq[0, 2]}"
    rect_eq = MkCoord.pol2rect(pol_eq[0, 2], r)
    puts "赤道直交座標に戻す:\n  #{rect_eq}"
  rescue => e
    puts "[#{e.class}] #{e.message}"
    e.backtrace.each { |tr| $stderr.puts "\t#{tr}" }
    exit 1
  end
end

exit 0 unless __FILE__ == $0
CoordConversion.new.exec

2. Ruby スクリプトの実行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ ./coord_conversion.rb
元の赤道直交座標:
  [0.99443659220701, -0.038162917689578336, -0.016551776709600584]
黄道直交座標に変換:
  [0.99443659220701, -0.04159771108146677, -5.622172494390565e-06]
赤道直交座標に戻す:
  [0.99443659220701, -0.038162917689578336, -0.016551776709600584]
赤道極座標に変換:
  [6.24482770879939, -0.016630599800372015] (R = 0.9953062370542631)
黄道極座標に変換:
  [6.241379248856413, -5.648686087788284e-06]
赤道極座標に戻す:
  [6.24482770879939, -0.01663059980037209]
赤道直交座標に戻す:
  [0.99443659220701, -0.03816291768957855, -0.01655177670960066]

天体の各種計算をするのよく使用するのでライブラリ化した次第です。

以上。

Comments