home / stars / calc-angle 視野・離角計算

 計算まちがってたらごめんよー

実視野・写野の計算 Field of View

撮像面・長辺 mm / long side
短辺 mm / short side
焦点距離 mm / focal length
構図 横/landscape 縦/portrait
写野中心・赤経 h m / RA center
赤緯 deg / dec
画角・対角 deg / diag. ang.
長辺 deg / long side ang.
短辺 deg / short side ang.

角距離・離角の計算 Angular Distance・Elongation
点1・赤経 h m / RA1
赤緯 deg / dec1
点2・赤経 h m / RA2
赤緯 deg / dec2
角距離 deg / distance
中点・赤経 h m / RA center
赤緯 deg / dec

経度による入力 Longitude
西経はマイナス deg min / minus for west

home / stars / calc-angle 使い方

実視野・写野の計算
星野撮影の構図や焦点距離の決定に。

・撮像面のサイズを入れます。 デフォルトではAPSサイズになっています。35mmボタンを押すと35mmフルサイズになります。

・レンズの焦点距離を入れます。デフォルトでは50mmになっています。

・構図(縦あるいは横)を決めます。

・カメラを向ける方向を赤経・赤緯で入力します。

※経度(度・分)を使いたい場合は右下の「経度による入力」に数値を入れて「from long.」を押します。

・submitを押すと写野の角度が計算されます。

・その下にある9つの赤経・赤緯は、視野の上下左右、四隅に対応する天球上の位置を示します。

角距離・離角の計算
二重星の距離や、星野撮影でだいたいの視野を求める場合に。

・二つの点の赤経・赤緯を入れてsubmitを押します。

※経度を使いたい場合は下の「経度による入力」に数値を入れて「from long.」を押します。

・角距離と、中点の赤経・赤緯が分かります。

※「to long.」を押すと赤経が経度に変換されて「経度による入力」に反映されます。

home / stars / calc-angle ちょっとした解説

角度の単位

 普通、赤経は時分秒であらわす。 一周すると24時。 赤緯は度であらわされている。 一周で360度。 コンピュータでの計算はラジアンを使うことが多い。 一周で2π。 以後、角度については単位を明示的に書かないが、もちろん式の中で統一して計算しなければならない。 三角関数がラジアンを扱うならば、赤経も赤緯もラジアンに変換して計算する必要がある。 分かっていると思うけど念のため。

方向余弦

 3次元空間中の点Pを考え、原点Oを始点とし、Pを通る半直線OPを考える。 このとき、OPとX軸のなす角をλ、Y軸のなす角をμ、Z軸のなす角をνとし、各余弦をL・M・Nとする。 つまり、L=cosλ, M=cosμ, N=cosν である。 これを方向余弦という。 言ってることは面倒くさいが、実際は案外単純で、中心が原点Oで半径が1の球面(単位球面)を考えたとき、この球面と半直線OPが交わる点の座標が (L, M, N) である。 つまり、半直線OPの単位方向ベクトルになっている。 なぜならば、例えばX軸について考えてみると、X軸とOPを含む平面を考えれば、この平面上でX軸とOPの間の角がλである。 単位球面とこの平面が交わった部分は当然単位円になる。 単位円と半直線OPが交わった点のX座標はもちろんcosλである。

赤経・赤緯から方向余弦へ

 方向余弦は単位方向ベクトルなので、赤経α・赤緯δの点Pの方向余弦は、L=cosαcosδ, M=sinαcosδ, N=sinδ になる。 単位球面上で赤緯δの点の集合は円になるが、この円は Z=sinδの位置にあり、半径がcosδである。 したがって、この円周上の赤経δの点のX座標は cosαcosδで、Y座標は sinαcosδになる。 この変換では、X軸の正の方向が春分点を、Z軸の正の方向が天の北極を向いており、Y軸の正の方向は赤道上の赤経6hの方向を向くことになる。

方向余弦から赤経・赤緯へ

 上記の反対をやればよい。 方向余弦 L, M, N が与えられたら、N=sinδ となるようなδが赤緯になる。 赤経は (L, M) の偏角になるので M/L=tanα となるようなαになるのだが、普通にarctanを使うと赤経の範囲が-6hから+6hになってしまう。 この場合はLの符号を見て、Lがマイナスならば赤経に12hを足してあげよう。 最終的に結果がマイナスだった場合は24hを足してあげよう。 Lが0の場合はM/Lが計算できない。 これをチェックしないとプログラムがコケる原因になる。 L=0 かつ M=0 というパターン(N=±1の場合、つまり、赤緯±90度の場合)もあるので注意。 atan2(y, x) があるならこちらを使ったほうが楽。

角距離・離角

 赤道座標で二つの点P・Qが与えられたとき、原点Oを始点とした半直線OPとOQのなす角θが角距離、あるいは離角である。 PもQも赤道上にあれば赤経の差になり、同じ子午線上にあれば赤緯の差になるが、それ以外の場合は単純には計算できない。 OPとOQの方向余弦を求めれば、これはつまり単位方向ベクトルなので、両者の内積がcosθになることから求める。

 ふたつの3次元ベクトル (x1, y1, z1) と (x2, y2, z2) の内積は x1・x2 + y1・y2 + z1・z2 なので、P・Qの方向余弦さえ分かれば簡単に計算できる。 Pの赤経がα、赤緯がδ、Qの赤経がβ、赤緯がεだとすると、Pの方向余弦は (cosαcosδ, sinαcosδ, sinδ)、Qの方向余弦は (cosβcosε, sinβcosε, sinε) なので、内積は cosαcosδcosβcosε + sinαcosδsinβcosε + sinδsinε となり、前2項をcosδcosεでくくって、cosδcosε(cosαcosβ + sinαsinβ) + sinδsinε、加法定理 cos(α-β) = cosαcosβ + sinαsinβ を逆に使うことで、

cosθ = cosδcosεcos(α-β) + sinδsinε

となることが分かる。

中点

 方向余弦に直す → 中点のベクトルを求める → 大きさを1に正規化することで方向余弦に直す → 赤経・赤緯に戻す。 大きさが0になってしまう場合(中点が原点と重なった場合)もあるので注意。 この場合は2点がちょうど正反対の位置にある、ということである。 このプログラムでは「points are too far」と言われる。

大円と透視投影

 投影とは3次元空間内の点を2次元である平面上の点に対応させることで、透視投影とは空間中の点Pを、視点VとPを結ぶ直線VP(視線)と、投影面の交点に対応させる投影のこと。 早い話が普通に写真を撮れば透視投影になる、収差を考えなければ。 我々は天球の中心、つまり原点Oにいるので、視点Vは原点Oの位置になる。

 この条件で大円を透視投影すると直線になる。 球面上の線を透視投影した結果が直線になるなら球面上の線は大円になる。 なぜなら、投影面上に直線Lを引き、投影のために原点とこの直線上の点を結ぶと、これらの線分(視線)の集まりは、直線Lと原点を通る平面に載ることが分かる。 この平面は原点を通っているから、原点を中心とする球面とこの平面が交差してできる曲線は大円になる。 逆に大円は原点を通る平面上にあり、この平面と投影面が交わっているならば、交わった部分は当然直線になる。

撮像面への投影

 原点Oを始点とし、空間中の点Pを通る半直線OPと、撮像面との交点に投影される。 撮像面の各辺は直線なので、天球上では大円になる。 経線は大円なので、撮像面上では直線になる。 特に赤道上では平行になる(等間隔にはならない)。 そのほかの場所では放射状になる。 一方、緯線は赤道を除いて小円なので、赤道のみが直線、他は曲線になる。

 春分点の方向(X軸の正方向)を向いていると、縦辺は経線に平行となるので、横方向の画角が分かれば縦辺の赤経はすぐに分かる。 しかし、横辺は緯線とは並行にならないので、縦方向の画角が分かっただけでは横辺の赤緯は計算できない。

春分点を向くと・・・

 春分点の方向へ向いている場合、撮像面はX軸と垂直な平面上にある。 実際の撮像面の大きさを使い、原点からX軸の正方向に焦点距離だけ離れた位置に置くと分かりやすい。 撮像面上にある点Pを、撮像面中心を基準として縦方向(南北方向)の位置u、横方向(東西方向)の位置vで表す。 焦点距離をfとすると、点Pの位置ベクトル、言い換えれば原点からの方向ベクトルは簡単に (f, u, v) と分かる。 これをベクトルの大きさで割れば方向余弦になる。

 撮像面上で (u, v) を通り、縦辺と平行な直線は赤経 φ=arctan(u/f) の経線になる。 横辺と平行な直線は、赤経0、赤緯 ψ=arctan(v/f) を通る大円になる。これは緯線とは異なることに注意。 逆に、φとψが分かっている場合、焦点距離 f を適当に仮定して、u=f・tanφ, v=f・tanψ となるから、方向ベクトルは (f, f・tanφ, f・tanψ) である。 このベクトルの大きさは r = sqrt(f2 + f2・tan2φ + f2・tan2ψ) = f・sqrt(1 + tan2φ + tan2ψ) なので、

k = sqrt(1 + tan2φ + tan2ψ)

とおけば、r = fkであり、

L = f/r = f/fk = 1/k

M = u/r = f・tanφ/fk = tanφ/k

N = v/r = f・tanψ/fk = tanψ/k

となって、撮像面の画角だけ分かれば、焦点距離がなくても方向余弦を求められる。

任意の方向を向く

 撮像面として視線に垂直な面を考え、撮像面上の (u, v) 座標を (x, y, z) 座標系に変換して、そこから方向余弦を求めてもよいが、面倒なので春分点の方向を向いた状態で計算し、適当に回転したほうが楽。

 撮像面中心を赤経を変えずに赤緯δだけ動かす場合、撮像面中心を経線に沿って動かす必要がある。 回転軸は原点Oを通り、この経線に垂直な直線になるが、これは座標軸と一致しているとは限らない。 一方、撮像面中心を赤緯を変えずに赤経αだけ動かす場合、撮像面中心を緯線に沿って動かす。 回転軸は原点Oを通り、この緯線に垂直な直線になるが、緯線は小円だからこれは常にZ軸である。 回転はX・Y・Z軸のまわりに回転しないと面倒なので、赤経α、赤緯δの方向を向いている場合、先にY軸のまわりにδだけ回転し、さらにZ軸のまわりにαだけ回転すればよい。

 撮像面上 (u, v) にある点Pについて、春分点の方向を向いた場合の方向余弦 (L, M, N) を求め、Y軸周りにδだけ回転すると小円に沿って回る。 これに対して経線は大円なので、赤経はφから動き、赤緯もψ+δになるとは限らない。 次にZ軸のまわりにαだけ回転すると、やはりPは小円に沿って回るが、これは緯線の上を動くことになるので、単純に赤経がαだけ増える。 つまり、Z軸周りの回転はまじめに計算する必要はなくて、赤道座標に戻してから単に赤経にαを足せばよい。

 方向余弦 (L, M, N) をY軸まわりにδだけ回転するには、赤緯が増える方向を回転の正方向とすれば、

L' = Lcosδ - Nsinδ

M' = M

N' = Lsinδ + Ncosδ

になる。


ご意見・ご要望の送り先は あかもず仮店舗 の末尾をご覧ください。

Copyright (C) 2012 You SUZUKI

$Id: calc-angle.htm,v 1.5 2012/09/29 07:39:32 you Exp $