はじめに
極座標表示とは、直交座標表示とは異なり半径と動径(角度)で点の情報を示すというものである。2次曲線や幾何学のような世界では重宝される。また、2体問題の場合、天体の運動は一般的に2次曲線で表すことができる。ところで、二次曲線は、極座標で表すと円、楕円、放物線、双曲線を1つの式に表すことができる。
そこで、今回は2次曲線の極座標表示を紹介して、それをプログラムで図示することで、曲線の性質を理解することを試みる。
直交座標と極座標の関係性
直交座標と、極座標は三平方の定理と三角関数によって密接に繋がっている。
\begin{equation}
\left\{ \,
\begin{aligned}
& x= r\cos\theta \\
& y= r\sin\theta \\
\end{aligned}
\right.
\end{equation}
つまり、
\begin{equation}
\left\{ \,
\begin{aligned}
& r=\sqrt{x^2+y^2} \\
& \theta= \tan^{-1}(\frac{y}{x})\\
\end{aligned}
\right.
\end{equation}
上の関係式を上手く使いこなすことで、極座標と直交座標の変換ができる。
2次曲線の極座標表示
2次曲線の極座標表示は以下のように表すことができる。
r=\frac{l}{1+\epsilon \cos\theta}
ただし、$\epsilon\ge0$は離心率、$l>0$は半長弦と呼ばれる。
離心率によって描く図形の種類が変わる。
具体的には、
$\epsilon=0$のとき、円
$0<\epsilon<1$のとき楕円
$\epsilon=1$のとき放物線
$\epsilon>1$のとき双曲線
を示す。
プログラム
簡単のため、グラフの描写範囲を$0\le\epsilon\le2$と限定する。
r=\frac{l}{1+\epsilon \cos\theta}
を$\epsilon$について解くと以下のようになる。
\epsilon=\frac{\frac{l}{r}-1}{\cos \theta}
この式の$r,\theta$に以下の関連式を代入する。
\begin{equation}
\left\{ \,
\begin{aligned}
& r=\sqrt{x^2+y^2} \\
& \theta= \tan^{-1}(\frac{y}{x})\\
\end{aligned}
\right.
\end{equation}
これをプログラムで再現することで、コンター図で2次曲線描写する。
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math
L=3
n = 1000
x = np.linspace(-L,L, n)
y= np.linspace(-L,L, n)
X, Y = np.meshgrid(x, y)
Z = np.zeros((n, n))
# 半長弦
l=1.0
for i in range(n):
for k in range(n):
r=(X[i][k]**2 + Y[i][k]**2)**0.5
theta = np.angle(X[i][k]+1j*Y[i][k])
#離心率
epsilon=(l/r-1)/(math.cos(theta))
#描写範囲の制限
if 2>epsilon > 0:
Z[i][k] = epsilon
else:
Z[i][k] = 0
plt.gca().set_aspect('equal', adjustable='box')
plt.contour(X, Y, Z, cmap='jet')
plt.colorbar(label="epsilon")
plt.xlabel("x")
plt.ylabel("y")
plt.savefig("二次曲線の極座標表示.png")
plt.show()
これを実行すると以下のようなコンター図が得られる。
まるで、天体の動きを表しているかのように美しく描写することができた。
まとめ
今回は、Pythonを用いて、2次曲線を描写することを試みた。具体的には、たった1つの極座標表示の式を用いて、円、楕円、放物線、双曲線を描写することができ、それらの差異が離心率で現れることが分かった。極座標表示は、とっつきにくい分野ではあるが、直交座標表示と三角関数と三平方の定理で繋がっているので、変換方法を押さえておけば理解は深まる。
参考文献