プロが教える店舗&オフィスのセキュリティ対策術

ある時間における望遠鏡の視野の赤経と赤緯を計算したいと思っています。
簡単に計算できる方法があったら教えていただけないでしょうか。
変数は観測場所の緯度、経度(UTCとの対応)、視野中心のAlt、Azimath、視野半径(角度)から求まるはずですよね。
何か参考資料等もあればよろしくお願いします。

A 回答 (7件)

Javascriptのサンプルです。

HEADとBODYに分けていますので、合体して hc2ec.htm の名称で保存してください。

<BODY BGCOLOR="#E0E0EE">
<CENTER><TT><B><FONT SIZE=+1>地平座標から赤道座標への変換</FONT></B><P>
<FORM METHOD = "post" NAME = "sel">【日時】 
<INPUT TYPE = "text" NAME = "yb" SIZE = "5">年
<INPUT TYPE = "text" NAME = "mb" SIZE = "3">月
<INPUT TYPE = "text" NAME = "db" SIZE = "3">日 
<INPUT TYPE = "text" NAME = "hb" SIZE = "3">時
<INPUT TYPE = "text" NAME = "nb" SIZE = "3">分
<INPUT TYPE = "text" NAME = "sb" SIZE = "3">秒  
<INPUT TYPE = "button" VALUE = "変換" onClick ="hc2ec(this.form)"><P>
【観測地】 緯度 <INPUT TYPE = "text" NAME = "ido" SIZE = "7">
経度 <INPUT TYPE = "text" NAME = "keido" SIZE = "7">
方位 <INPUT TYPE = "text" NAME = "houi" SIZE = "7">
高度 <INPUT TYPE = "text" NAME = "koudo" SIZE = "7">
<BR><BR><BR><BR><B>
【結果】  赤経 <INPUT TYPE = "text" NAME = "alfa" SIZE = "10">
赤緯 <INPUT TYPE = "text" NAME = "delta" SIZE = "10"><P>
MJD <INPUT TYPE = "text" NAME = "mjd" SIZE = "14">
地方恒星時 <INPUT TYPE = "text" NAME = "lst" SIZE = "10">
</B></FORM></CENTER>

<script language="JavaScript">
<!--
CurDate = new Date();
y = CurDate.getYear();
if(y < 1900) y = 1900 + y;
document.sel.yb.value = y;
document.sel.mb.value = CurDate.getMonth() + 1;
document.sel.db.value = CurDate.getDate();
document.sel.hb.value = CurDate.getHours();
document.sel.nb.value = CurDate.getMinutes();
document.sel.sb.value = CurDate.getSeconds();
document.sel.ido.value = 35.654; // 観測地の初期値 北緯35度39分16秒
document.sel.keido.value = 139.745; // 観測地の初期値 東経139度44分41秒
document.sel.houi.value = 0.0;
document.sel.koudo.value = 0.0;
// -->
</script>
</BODY>
</HTML>
    • good
    • 0
この回答へのお礼

レスどうもです。
まだちゃんとは理解できていないのですが、読み込んで理解してみます。

それにしてもまさに欲しかったものが出来ていますね。
全部やってもらってしまった。。。

お礼日時:2008/04/19 18:03

Javascriptのサンプルです。

HEADとBODYに分けていますので、合体して hc2ec.htm の名称で保存してください。

ステラナビゲータで精度を確認しましたが、赤経、赤緯で1分程度の誤差のようです。(大気補正はなし)

<HTML>
<HEAD>
<TITLE>地平座標から赤道座標への変換 Version 1.00</TITLE>
<script language="JavaScript">
<!--
function hc2ec(form)
{
var PI = 3.14159265358979;
var RAD = 180 / PI;
var yy = eval(form.yb.value);
var mm = eval(form.mb.value);
var dd = eval(form.db.value);
var hr = eval(form.hb.value);
var mn = eval(form.nb.value);
var sc = eval(form.sb.value);
var ido = eval(form.ido.value);
var keido = eval(form.keido.value);
var houi = eval(form.houi.value);
var koudo = eval(form.koudo.value);

// 時角(t)の計算
phi = ido / RAD;
z = (90.0 - koudo) / RAD; // 高度から天頂距離に変換
a = houi / RAD;
Delta = Math.asin(Math.sin(phi) * Math.cos(z) - Math.cos(phi) * Math.sin(z) * Math.cos(a));
cdct = Math.cos(phi) * Math.cos(z) + Math.sin(phi) * Math.sin(z) * Math.cos(a);
cdst = Math.sin(z) * Math.sin(a);
if (cdct < 0) t = Math.atan(cdst/cdct) + PI;
else if (cdct > 0 && cdst <= 0) t = Math.atan(cdst/cdct) + 2.0 * PI;
else t = Math.atan(cdst/cdct);
// 地方恒星時(lst)の計算
if( mm <= 2) {
m = Math.floor(365.25 * (yy-1)) + Math.floor((yy-1) / 400) - Math.floor((yy-1) / 100) +
Math.floor(30.59 * ( mm + 10)) + dd - 678912;
} else {
m = Math.floor(365.25 * yy) + Math.floor(yy / 400) - Math.floor(yy / 100) +
Math.floor(30.59 * ( mm - 2)) + dd - 678912;
}
mjd = m + hr / 24 + mn / 1440 + sc / 86400 - 0.375;
d = (0.671262 + 1.002737909 * (mjd - 40000) + keido / 360.0);
lst = 2 * PI * (d - Math.floor(d));
// 時角から赤道座標への変換
Alfa = lst - t;
if (Alfa < 0) Alfa = Alfa + 2 * PI;
dalfa = (Alfa * RAD / 15.0);
hhalfa = Math.floor(dalfa);
mmalfa = Math.floor((dalfa - hhalfa) * 60.0);
ssalfa = Math.floor((dalfa - hhalfa - mmalfa /60.0) * 3600.0);
if (hhalfa < 10) hhalfa = "0" + hhalfa;
if (mmalfa < 10) mmalfa = "0" + mmalfa;
if (ssalfa < 10) ssalfa = "0" + ssalfa;
sAlfa = " " + hhalfa + ":" + mmalfa + ":" + ssalfa;

ddelta = Delta * RAD;
if (ddelta >= 0) {
hhdelta = Math.floor(ddelta);
mmdelta = Math.floor((ddelta - hhdelta) * 60.0);
ssdelta = Math.floor((ddelta - hhdelta - mmdelta /60.0) * 3600.0);
if (hhdelta < 10) hhdelta = "0" + hhdelta;
if (mmdelta < 10) mmdelta = "0" + mmdelta;
if (ssdelta < 10) ssdelta = "0" + ssdelta;
sDelta = " " + hhdelta + ":" + mmdelta + ":" + ssdelta;
} else {
hhdelta = Math.ceil(ddelta);
mmdelta = Math.floor((hhdelta - ddelta) * 60);
ssdelta = Math.floor((hhdelta - mmdelta /60.0 - ddelta) * 3600);
if (ddelta > -1 && ddelta < 0) hhdelta = "-0" + hhdelta;
if (ddelta > -10 && ddelta <= -1) hhdelta = "-0" + (0 - hhdelta);
if (mmdelta < 10) mmdelta = "0" + mmdelta;
if (ssdelta < 10) ssdelta = "0" + ssdelta;
sDelta = hhdelta + ":" + mmdelta + ":" + ssdelta;
}
form.alfa.value = sAlfa.substring(0,9);
form.delta.value = sDelta.substring(0,9);

sMjd = " " + mjd;
dlst = lst * RAD / 15.0;
hhlst = Math.floor(dlst);
mmlst = Math.floor((dlst - hhlst) * 60);
sslst = Math.floor((dlst - hhlst - mmlst /60.0) * 3600);
if (hhlst < 10) hhlst = "0" + hhlst;
if (mmlst < 10) mmlst = "0" + mmlst
if (sslst < 10) sslst = "0" + sslst;
sLst = " " + hhlst + ":" + mmlst + ":" + sslst;
form.mjd.value = sMjd.substring(0,12);
form.lst.value = sLst.substring(0,9);
}
// -->
</script>
</HEAD>
    • good
    • 0

これは離心率計算方法。



出して良いと思われる部分しか公開出来ないと言うか、
細かな部品から全部公開してしまう訳にも行きません。

ここは御容赦願います。^^;

まあ、気が向いたら球面三角法の変換プログラムも出すかもしれません。^^;

「物理」「天文」のカテゴリーで「ひまわり」のキーで探せば人工衛星の高度のプログラムとか、地球の重力計算とか、太陽の高度(円計算)とか、色々見つかるかもしれません。

日本語ですので計算方法(間違いを含めて)参考になるかもしれません。

’離心率を求める。
半径1は、14959780.691
半径2は、14957691.9245322

結果1は、(半径1*半径1)-(半径2*半径2)
結果2は、SQRT(結果1)
結果3は、結果2/半径1

結果3を、表示。
    • good
    • 0
この回答へのお礼

レスありがとうございます。
日本語のプログラミング言語の存在を初めて知りました。

さて質問内容の天体の位置計算なのですが、地球と天体の位置について考察したいのではなく、望遠鏡の視野を赤経、赤緯に変換することに関心があります。
ということで天体の運動とは少し違うかもしれません。
教えていただいた内容で検索してみます。

お礼日時:2008/04/19 14:02

がんばってますね。


私は「運動」と認識していますので、やり方が少し違うんです。

だからURLを探してもまずみつかりまへん。^^;

地球の楕円を計算した一部です。
一応は計算上の誤差は0です。

補正の参考にして下さい。

http://kujirahand.com/himawari/
ここのソフトで動きます。

楕円要素が確定した後は、
Y=√b^2-(b^2X^2/a^2)
で(X、Y)座標を求め、

ここから太陽からの距離Rより、この座標での向心力(万有引力)
を求め、(GMm/r^2)ここから遠心力を求め、
(GMm/r^2=mV^2/r)

地球の速度を出して行きます。
また、角度も出せます。

面積速度が計算出来るならしめたものです。

天文単位は、14959780.691
近日点は、天文単位*0.983
「近日点距離は、{近日点}kmです。」と、表示。

焦点間隔は、(天文単位-近日点)*2
「予備計算、焦点~焦点間は、{焦点間隔}kmです。」と、、表示。

遠日点1は、近日点+焦点間隔
「計算上の遠日点距離は、{遠日点1}kmです。」と、表示。


遠日点は、天文単位*1.017
「天文単位での計算上の遠日点距離は、{遠日点}kmです。」と、表示。

誤差は、遠日点1-遠日点
「誤差は、{誤差}kmです。」と、表示。

’X軸、半径a
直径1は、近日点*2+焦点間隔
「X軸直径は、{直径1}kmです。」と、表示。

半径aは、直径1/2
「X軸半径直径aは、{半径a}kmです。」と、表示。

’Y軸、半径b
離心率は、0.01671022
半径bは、半径a*SQRT(1-(離心率*離心率))
半径bを、表示。
    • good
    • 0

目的に合致するのがあるとは思えませんが、



http://www.google.co.jp/search?hl=ja&q=javascrip …

天体の位置計算(増補版)は、海上保安庁水路部が開発した、惑星の位置計算の略算式が載っている数少ない本で重宝していますが、内容が古いので2000年基準には合わない部分もあります。

また、先に挙げた2冊より難解ですが、これが理解できれば、目的の計算は簡単にできるでしょう。

ところで、望遠鏡の向きから赤道座標を計算する必要があるケースってどんな場合でしょうか?
#望遠鏡の方位、高度を高精度で測定するのは容易ではないと思いますが・・(特に方位)
#赤道儀で極軸望遠鏡を使用すれば別ですが、質問の内容からは経緯台と思われますので
    • good
    • 0
この回答へのお礼

『天体の位置計算』はかなり詳しいので、これから何とか理解できるようになってみます。
もちろん5度も10度もずれていいわけではないのですが、ある程度細かい計算は省いてもよさそうですね。

望遠鏡の位置がなんらかの制約により、ある程度決まってしまうとすると、そんな望遠鏡で観測可能なエリアを知っておくことに意味が発生するのです。
つまりこの赤経、赤緯のときには観測可能だとか、もう無理だということが判断できるわけですね。

お礼日時:2008/04/19 13:07

こんな感じで計算します。



●地平座標から赤道座標への変換
sin(δ) = sin(φ)・cos(z) - cos(φ)・sin(z)・cos(A)
cos(δ)・cos(t) = cos(φ)・cos(z) + sin(φ)・sin(z)・cos(A)
cos(δ)・sin(t) = sin(z)・sin(A)
φ:緯度  z:天頂距離(高度)  A:方位角  δ:赤緯  t:時角

●地方恒星時の計算(省略) 検索すれば見つかります
・ユリウス日の計算
・地方恒星時の計算

●時角から赤経への変換
α = s - t
s:地方恒星時  t:時角  α:赤経

参考になる本
・天文の計算教室     斉田博 著  ISBN4-8052-0602-0 C3044
・日の出・日の入りの計算 長沢 工 著 ISBN4-8052-0634-9 C3044

#赤道座標から地平座標への変換はScriptで何度も書いていますが、逆の計算の実績はなし・・・
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。
座標変換は球の対応で決まっているのですよね。
参考図書として、長沢工著の天体の位置計算という本を図書館で見つけました。
さらに微少なずれを入れるには、固有運動とか歳差を入れる必要がありそうですね。

この手のスクリプト、ライブラリとしてどこかで公開されていたりしないのでしょうか。

お礼日時:2008/04/17 14:01

円計算で近時、誤差と言うデーターしか無いです。


http://www1.odn.ne.jp/kentaurus/astropos.htm

素人は円で計算する。市販品は楕円で軌道から計算する。
こう言う酷評があります。
安易な道を選択せず
「実用的」では無く「本物(誤差が全く無い)」を目指すべきです。

>簡単に計算できる方法。
この付近の計算方法が限度なのだと認識しています。
これ以上の計算方法は販売しても使用者がいないのでは商品価値がありません。

簡単に計算すれば1hは平気で狂います。
誤差の範疇では無く、間違いの領域でもあります。

地球の座標と運動要素に関しては見つかりませんでした。(r、V、G)
私は出すつもりが今の所全く無いので
御自分で楕円座標を求め計算するか、この手の書籍を購入すべきでしょう。

まず計算してそれを知る。
天体の運行を良く理解する事が大切です。
安易な道を選択せず、図書館か本屋へ向かうのが近道だと思います。
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。

リンク先では円で計算していますが、これでは不正確という趣旨ですね。
ただ楕円座標で計算する方法も式は違えど、基本的には円と同じということになるのでしょうね。

Webで探すのをあきらめるとすると、専門書でしょうか。
Astronomical Algorithmsという本に行き着きましたが、どうも入手が難しいようで躊躇しています。
比較的すぐに入手可能な本で、このような計算が詳しい本はどういったものでしょうか。

お礼日時:2008/04/15 20:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!