はじめに
最近、ある膨張する円状構造の時系列観測を扱う機会があり、その解析過程で
「傾いたリングは、有限の光速度によってどのように歪んで見えるのか?」
という点を感覚的にも整理したいと思いました。
ここでは話をできるだけクリアにするため、
- リングは真の宇宙空間で等方的に膨張し、
- それを観測者が角度 $i$ で見る、
という最小限の幾何問題に落とし込みます。
光速度が有限であるため、観測時刻においてリングの異なる角度から届く光は、異なる発光時刻に由来することになります。
本記事では、この発光時刻の差異が像に与える効果を、数式と Python 可視化の両面から確認していきます。
本記事の実装コードは Google Colab こちら からも確認できます。
傾いたリングの幾何学
まずは光行差などは考えずに、普通の 3D 空間でのリング形状から確認します。
半径 $R$ のリングは、
x = R\cos\phi, \qquad
y = R\sin\phi, \qquad
z = 0
で表せます($\phi$ はリング上の角度)。
傾き i の導入 — x 軸周りに回転
このリングを $x$ 軸まわりに角度 $i$ だけ回転 させます。
回転後の点 $(x',y',z')$ は次のように計算されます:
\begin{pmatrix}
x'\\
y'\\
z'
\end{pmatrix}
=
\begin{pmatrix}
1 & 0 & 0 \\
0 & \cos i & -\sin i \\
0 & \sin i & \cos i
\end{pmatrix}
\begin{pmatrix}
x\\ y\\ 0
\end{pmatrix}.
したがって、
x' = x,
\qquad
y' = y\cos i,
\qquad
z' = y\sin i.
ここでは、観測者が見る像は $(x',y')$ 平面への投影とします。
つまり、$z'$ 方向(観測者へ向かう方向)は視線に沿った軸です。
このとき、
- 左右方向 ($x$) はそのまま
- 上下方向 ($y$) と奥行き方向 ($z$) が傾きに応じて変形する
という見え方になります。
光行差による時間のズレ
ここからが本題です。
リングの膨張速度が相対論的な領域になると、光の到達時間の違い(光行差)の影響が無視できなくなります。
光行差については下記の記事でも詳しく解説されていますので、あわせてご覧ください:「なぜジェットは光より速く見えるのか:Pythonで考える超光速運動」
リングは一定速度 $v$ で膨張するとして
R = v\,t_{\rm emit}
と書けます。
すると先ほど求めた $z'$ は
z' = y\sin i = R\sin\phi\sin i.
この $z'$ の分だけ光路長が変わるため、その点からの光が観測者に届く時刻 $t_{\rm obs}$ は
t_{\rm obs} = t_{\rm emit} - \frac{z'}{c}.
ここで代入すると:
t_{\rm obs}
= t_{\rm emit} - \frac{v t_{\rm emit}\sin\phi\sin i}{c}
さらに $\beta = v/c$ と置くと:
t_{\rm obs}= t_{\rm emit}\left(1 - \beta\sin\phi\sin i\right)
この $t_{\rm obs}$ と $t_{\rm emit}$ の関係は少し直感に反するので、簡潔にまとめると:
-
手前側(近づく方向)
→ 光の距離が短い
→ 早く届く
→ $(1-\beta\sin\phi\sin i) < 1$
→ $t_{\rm obs}$ に対して、発光時刻 $t_{\rm emit}$ がより後になる
→ その結果、見かけ上より進んだ位置に見える -
奥側(遠ざかる方向)
→ 光の距離が長い
→ 遅れて届く
→ $(1-\beta\sin\phi\sin i) > 1$
→ $t_{\rm obs}$ に対して、発光時刻 $t_{\rm emit}$ がより前になる
→ その結果、見かけ上遅れた位置に見える
観測者が実際に見る像
$t_{\rm emit}$ と $t_{\rm obs}$ の関係が整理できたので、観測者が見るリング上の位置を計算していきます。
ここで重要なことは
- 物理的なリングの進化は $t_{\rm emit}$ の上で進行している
- しかし観測者が受け取る情報は $t_{\rm obs}$ に基づく
という点です。
まず物理的なリング(実際の宇宙での位置)は
R = v\,t_{\rm emit}
という関係で膨張しています。
観測者はこのリングからの光を $t_{\rm obs}$ に受け取ります。
光行差の関係で示したように
t_{\rm emit}
= \frac{t_{\rm obs}}{1-\beta\sin\phi\sin i}
となるので、
この $t_{\rm emit}$ を位置の式に代入すれば、観測者が「像」として認識する投影位置 $(x_{\rm app}, y_{\rm app})$ は
\begin{align}
x_{\rm app} &= v\,\frac{t_{\rm obs}}{1-\beta\sin\phi\sin i}\cos\phi,\\[6pt]
y_{\rm app} &= v\,\frac{t_{\rm obs}}{1-\beta\sin\phi\sin i}\sin\phi\cos i
\end{align}
となります。
見える像はどんな像?
この歪みは $\beta$ によって生じるため、もし $\beta \ll 1$ であれば
\frac{1}{1-\beta\sin\phi\sin i} \approx 1
とみなせます。その場合、$\phi$ による伸縮は消え、単なる傾きによる射影だけになるため、像は楕円形になります。
一方で、$\beta$ が光速に近い場合はこの補正項が無視できなくなり、像は楕円から大きく逸脱して、角度ごとの顕著な歪みを持つ非対称な形状になります。
実際に可視化してみる
ここまでは式の上で議論してきましたが、光行時間 (light-travel-time; LTT) によって像がどのように歪むのか を、実際に Python で可視化してみます。
ここでは:
- リングが均一に光を放射している
- しかし観測者は $t_{\rm obs}$ で受け取る
- $t_{\rm emit}$ と $t_{\rm obs}$ のズレが角度依存
- 見かけの像が歪む
という様子を GIF で表示します。
可視化では、
- 相対論的膨張速度:$\beta = 0.7$
- φ方向に 6° ごとに光点を配置
- 下記の 3 つの傾斜角で比較
i = 0^\circ,\ 45^\circ,\ 85^\circ
そして時刻 $t_{\rm obs}$ を変化させながら見える像を描画します。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
# --------------------------
# モデルパラメータ
# --------------------------
beta = 0.7 # v/c
phi = np.linspace(0, 2*np.pi, 61)
tobs_array = np.linspace(0.0, 8.0, 21)
# 3つの傾斜角
inclinations = [0, 45, 85]
inclinations_rad = [np.deg2rad(v) for v in inclinations]
# --------------------------
# Figure セット
# --------------------------
fig, axes = plt.subplots(1, 3, figsize=(10, 4))
for ax in axes:
ax.set_aspect("equal")
ax.set_xlim(-10, 10)
ax.set_ylim(-10, 10)
ax.set_xticks([])
ax.set_yticks([])
plt.subplots_adjust(
left=0.05, right=0.98,
top=0.88, bottom=0.12,
wspace=0.02, hspace=0.0
)
def update(frame):
t_obs = tobs_array[frame]
for j, (ax, i_deg, i) in enumerate(zip(axes, inclinations, inclinations_rad)):
ax.clear()
ax.set_aspect("equal")
ax.set_xlim(-10, 10)
ax.set_ylim(-10, 10)
ax.set_xticks([])
ax.set_yticks([])
ax.set_title(f"i = {i_deg}°")
# --- LTT effect ---
denom = 1 - beta * np.sin(phi) * np.sin(i)
t_emit = t_obs / denom
R = beta * t_emit
# --- original ring ---
x = R * np.cos(phi)
y = R * np.sin(phi)
# --- projection ---
xp = x
yp = y * np.cos(i)
# --- scatter plot ---
ax.scatter(xp, yp, s=4, color="tab:blue")
# --- center cross (+) ---
ax.axhline(0, color="gray", lw=0.4, alpha=0.5)
ax.axvline(0, color="gray", lw=0.4, alpha=0.5)
# --- COM calc ---
xc = xp.mean()
yc = yp.mean()
ax.scatter(xc, yc, color="red", s=12)
# ★ 軸ラベル ― 左端だけ
if j == 0:
ax.set_xlabel("")
ax.set_ylabel("y", fontsize=10)
elif j == 1:
ax.set_xlabel("x")
ax.set_ylabel("")
else:
ax.set_xlabel("")
ax.set_ylabel("")
fig.suptitle(f"Observed time t_obs = {t_obs:.2f} (velocity={beta}c)", fontsize=14)
ani = FuncAnimation(fig, update, frames=len(tobs_array))
ani.save("expanding_ring.gif", fps=10)
plt.close()
アニメーションに示すように、i = 0° では像は常に真円です。
i = 45° では上側が観測者に近づく向きとなり、光行差によってその領域では発光時刻がより後の光を受け取るため、見かけ上、上側がより外へ伸びたように見えます。
i = 85° では、上側は最も強く観測者に近づいているため光行差の効果は最大になります。
しかしその運動の大部分が視線方向に割かれてしまうため、視線垂直方向に進む成分が小さくなり、より後に発せられた光を受け取っているにもかかわらず、像としてはあまり外側に伸びて見えない という現象が生じます。
像の見え方について整理すると、
- 視線方向の速度成分による光行差効果で「時間をどれだけ稼げるか」
- 視線垂直方向の速度成分で「空間的にどれだけ進めるか」
の 二つの成分のバランス で決まります。
また、赤で示した点は粒子群の重心位置(見かけ上の中心)ですが、時間の経過とともに観測者に近い側(+y方向)へ重心がオフセットしていく傾向が見られます。
これは光行差により、観測者に近い側ほど発光時刻のより後の光を受け取り、遠ざかる側ほど発光時刻がより前の光を受け取るため、見かけ上の進み具合に差が生じるためです。
その結果、進みの小さい −y 側よりも、進みが大きい +y 側の寄与の相乗効果により、重心は +y 方向へとシフトして見えることになります。
まとめ
本記事では、傾いたリングが光の到達時間の違いによってどのように歪んで見えるかを整理しました。ポイントは、膨張速度が相対論的な領域になると、単なる幾何学投影に加えて光行差の影響が無視できなくなるという点です。
観測者はリングの一部に対して発光時刻のより後の光を、別の部分に対してより前の光を同時に見ており、その結果として非対称で特徴的な像が形成されます。
この記事が、光行差と膨張リングの見え方についての理解を深めるきっかけになれば幸いです。
関連記事
