パソコン用の立体恒星地図ソフトは, 光速の有限性と固有運動 を無視して現在見える位置に星が止まっている物, 固有運動 は再現してるが光速の有限性を無視して現在見える位置に星が在る物, 固有運動 と光速の有限性は無視してるが連星 の動きを再現している物など様々なタイプが有ります. このうちタキオン望遠鏡 搭載型というのは, まずコンピューターの中で真の位置を計算しから, タキオン望遠鏡 使用時にはそこで計算をやめるが, 通常の観測をしているなら更に惑星光行差 で補正して見掛けの位置に直す物で, 現地でも使える恒星図を作る事が出来ます. そのうちの一つは, これから述べる様な仕組みです. これは摂動を考慮していない最も簡単なタイプであり, 天文愛好家達の間を渡り歩いていたノートから写した物です. ちなみにタキオンとは空想の粒子 ですので, 本物のタキオン望遠鏡 などは製造不可能です. 当然ながらベテルギウスが爆発してるかどうかは分かりません.
観測地の位置は, ObX, ObY, ObZ
元紀からの経過年数はNow
星のデータは
AbMag, firstX, moveX, firstY, moveY, firstZ, moveZ
CfirstM, CmoveM, CA, CEc, CInc, CNode, CPeri
GCfirstM, GCmoveM, GCA, GCEc, GCInc, GCNode, GCPeri
GGCfirstM, GGCmoveM, GGCA, GGCEc, GGCInc, GGCNode, GGCPeri
単独星(親星)は一番上の行だけを使い, 子星は上の二行を使い, 孫星は上の三行を使い, 曾孫星は全ての行を使う.
ItsTime=Now
label1
/* 単独星の位置 */
PX=firstX+moveX*ItsTime
PY=firstY+moveY*ItsTime
PZ=firstZ+moveZ*ItsTime
/* 子星の位置(ガンマ2アンドロメダC, アルファCenC, デルタOriC, アルゴルC, リゲルA, アルファHerA, アルファUMiA, シグマ2EriAなど) */
firstM=CfirstM
moveM=CmoveM
A=CA
Ec=CEc
Inc=CInc
Node=CNode
Peri=CPeri
gosub Kepler // ケプラーの計算
CX=KX
CY=KY
CZ=KZ
/* 孫星の位置(アルファCenA, アルファCenB, ガンマ2AndA, ガンマ2AndB, デルタOriA, デルタOriB, アルゴルA, アルゴルB, リゲルB, リゲルC, アルファHerB, アルファHerC, カストルC1, カストルC2など) */
firstM=GCfirstM
moveM=GCmoveM
A=GCA
Ec=GCEc
Inc=GCInc
Node=GCNode
Peri=GCPeri
gosub Kepler
GCX=KX
GCY=KY
GCZ=KZ
/* 曾孫星の位置(カストルA1, カストルA2, カストルB1, カストルB2など) */
firstM=GGCfirstM
moveM=GGCmoveM
A=GGCA
Ec=GGCEc
Inc=GGCInc
Node=GGCNode
Peri=GGCPeri
gosub Kepler
GGCX=KX
GGCY=KY
GGCZ=KZ
/* 仕上げ */
X=PX+CX+GCX+GGCX
Y=PY+CY+GCY+GGCY
Z=PZ+CZ+GCZ+GGCZ
SX=X-ObX
SY=Y-ObY
SZ=Z-ObZ
Di=(SX^2+SY^2+SZ^2)^0.5
タキオン望遠鏡 を使っているならlabel2に行くが, そうでないならlabel3に行く
label2
D=Di
label4
VMag=log(10,(D/32.62))*5+AbMag
end
label3
ItsTime=ItsTime-Diと再定義してlabel1に行く
こうして出た新しい距離がDii
DiとDiiの差が許容範囲以下ならそれをDとしてlabel4に行くが, そうでないなら
ItsTime=ItsTime+(Di-Dii)と再定義してlabel1に行く
*Kepler サブルーチン・ケプラー
M=firstM+moveM*ItsTime
Ei=M+Ec*sin(M)*180/pi
label5
Eii=M+Ec*sin(Ei)*180/pi
EiとEiiの差が許容範囲以上ならEi=Eiiと再定義してlabel5に行くが, そうでないならそれをEとする
V=acos((cos(E)-Ec)/(1-Ec*cos(E))
R=A*81-Ec*cos(E))
U=V+Peri
Uが360以上なら, U=U mod 360
Phi=asin(sin(U)*sin(Inc))
protoThetaは
U<180の場合
ptotoTheta=acos(cos(U)/cos(Phi))
U>=180の場合
protoTheta=360-acos(cos(U)/cos(Phi))
Theta=protoTheta+Node
Thetaが360以上なら, Theta=Theta mod 360
KX=R*cos(Phi)*cos(Theta)
KY=R*cos(Phi)*sin(Theta)
KZ=R*sin(Phi)
return
/* 太陽の位置 */
データは, moveSunX, moveSunY, moveSunZ, SunAbMag
SunAbMag=4.79
タキオン望遠鏡 使用時はlabel6に行き, そうでないならlabel7に行く
label6
SunD=(ObX^2+ObY^2+ObZ^2)^0.5
SunVMag=log(10,(SunD/32.62))*5+SunAbMag
end
label7
SunX=moveSunX*SunD*(-1)
SunY=moveSunY*SunD*(-1)
SunZ=moveSunZ*SunD*(-1)
label8
SSunX=SunX-ObX
SSunY=SunY-ObY
SSunZ=SunZ-ObZ
SunDi=(SSunX^2+SSunY^2+SSunZ^2)^0.5
SunX=moveSunX*SunDi*(-1)
SunY=moveSunY*SunDi*(-1)
SunX=moveSunZ*SunDi*(-1)
と再定義してlabel8に行く
そしてその時の距離をSunDiiとする
SunDiとSunDiiの差が許容範囲以上ならSunDi=SunDi+(SunDi-SunDii)と再定義してlabel9に行くが, そうでないならそれをSunDとしてlabel6に行く