概要
本稿では、長軸を $x$ 方向、短軸を $y$ 方向に持つ楕円を原点まわりに角度 $\alpha$ だけ回転させた図形について、媒介変数表示および陰関数表示の双方を導出する。導出は独立した2通りの方法(逆回転を用いる方法と、連立方程式を直接解く方法)で行い、両者が一致することを示す。さらに Python による数値計算・可視化を通じて、導出した陰関数が回転後の楕円上で恒等的に $f(X,Y)=0$ となることを検証する。
1. はじめに
楕円の標準形 $\dfrac{x^2}{a^2}+\dfrac{y^2}{b^2}=1$は座標軸に対して対称な形で与えられるが、実際の応用(力学における慣性楕円体の断面、電気工学における楕円偏光の軌跡、画像処理における楕円フィッティングなど)では、軸が座標系に対して傾いた楕円を扱う場面が多い。
本稿はその基礎として、座標軸に平行な楕円を回転させた際の媒介変数表示・陰関数表示を系統立てて導出することを目的とする。
2. 問題設定
長軸の長さ $a$、短軸の長さ $b$ の楕円を考える。この楕円は媒介変数 $\theta\in[0,2\pi)$ を用いて次のように表される。
\begin{cases}
x=a\cos{\theta}\\
y=b\sin{\theta}
\end{cases}
この楕円を原点中心に反時計回りに角度 $\alpha$ だけ回転させる。回転後の点を $(X,Y)$ とすると、回転行列により次式で与えられる。
\begin{pmatrix}
X\\
Y
\end{pmatrix}
=
\begin{pmatrix}
\cos{\alpha} & -\sin{\alpha}\\
\sin{\alpha} & \cos{\alpha}
\end{pmatrix}
\begin{pmatrix}
x\\
y
\end{pmatrix}
なお、楕円上の点を指定するパラメータ $\theta$ と、楕円全体を回転させる角度 $\alpha$ は独立な量であるため、本稿では両者を明確に区別して表記する。
3. 媒介変数表示の導出
回転行列を成分ごとに展開すると、
\begin{cases}
X = x\cos\alpha - y\sin\alpha\\
Y = x\sin\alpha + y\cos\alpha
\end{cases}
を得る。ここに $x=a\cos\theta,\ y=b\sin\theta$ を代入すれば、回転後の楕円の媒介変数表示が次のように求まる。
\begin{cases}
X(\theta) = a\cos\theta\cos\alpha - b\sin\theta\sin\alpha\\
Y(\theta) = a\cos\theta\sin\alpha + b\sin\theta\cos\alpha
\end{cases}
\tag{1}
$\alpha=0$ とすれば $X=a\cos\theta,\ Y=b\sin\theta$ となり、回転前の式に帰着することが確認できる。
4. 陰関数表示の導出
4.1 逆回転を用いる方法
回転行列は直交行列であるから、その逆変換は転置行列、すなわち角度 $-\alpha$ の回転で与えられる。
\begin{pmatrix}
x\\
y
\end{pmatrix}
=
\begin{pmatrix}
\cos{\alpha} & \sin{\alpha}\\
-\sin{\alpha} & \cos{\alpha}
\end{pmatrix}
\begin{pmatrix}
X\\
Y
\end{pmatrix}
\quad\Longleftrightarrow\quad
\begin{cases}
x = X\cos\alpha + Y\sin\alpha\\
y = -X\sin\alpha + Y\cos\alpha
\end{cases}
すなわち、$(X,Y)$ を $-\alpha$ だけ回転すれば回転前の座標 $(x,y)$ に戻る。この $(x,y)$ は回転前の楕円の式 $\dfrac{x^2}{a^2}+\dfrac{y^2}{b^2}=1$ を満たすため、これを代入するだけでパラメータ $\theta$ を経由せずに $(X,Y)$ の関係式が得られる。
\frac{(X\cos\alpha + Y\sin\alpha)^2}{a^2}+\frac{(-X\sin\alpha + Y\cos\alpha)^2}{b^2}=1
これを整理すれば、求める陰関数表示となる。
f(X,Y)=\frac{(X\cos\alpha + Y\sin\alpha)^2}{a^2}+\frac{(Y\cos\alpha - X\sin\alpha)^2}{b^2}-1=0
\tag{2}
4.2 連立方程式を直接解く方法(別解)
式(1)を行列形式で書き直すと、
\begin{pmatrix}
X\\
Y
\end{pmatrix}
=
\begin{pmatrix}
a\cos\alpha & -b\sin\alpha\\
a\sin\alpha & b\cos\alpha
\end{pmatrix}
\begin{pmatrix}
\cos\theta\\
\sin\theta
\end{pmatrix}
である。右辺の $2\times2$ 行列の行列式は
\det = ab\cos^2\alpha + ab\sin^2\alpha = ab \neq 0
であるから逆行列が存在し、
\begin{pmatrix}
\cos\theta\\
\sin\theta
\end{pmatrix}
=
\begin{pmatrix}
\dfrac{X\cos\alpha+Y\sin\alpha}{a}\\[6pt]
\dfrac{-X\sin\alpha+Y\cos\alpha}{b}
\end{pmatrix}
を得る。これを恒等式 $\cos^2\theta+\sin^2\theta=1$ に代入すると、式(2)と完全に一致する式が導かれる。独立な2通りの方法で同一の結果に至ったことから、導出の妥当性が裏付けられたと言える。
5. 一般2次曲線としての整理
式(2)を展開し、$AX^2+BXY+CY^2=1$ の形に整理すると、係数は次のように与えられる。
A=\frac{\cos^2\alpha}{a^2}+\frac{\sin^2\alpha}{b^2},\qquad
C=\frac{\sin^2\alpha}{a^2}+\frac{\cos^2\alpha}{b^2},\qquad
B=\left(\frac{1}{a^2}-\frac{1}{b^2}\right)\sin2\alpha
\tag{3}
この表示から、以下の点が読み取れる。
- $\alpha=0$ のとき $B=0,\ A=1/a^2,\ C=1/b^2$ となり、回転前の楕円の式に一致する。
- $a=b$(円)の場合は常に $A=C=1/a^2,\ B=0$ となる。回転しても図形が不変であることが式の上でも確認できる。
- 交差項 $B$ は $a\neq b$ かつ $\alpha \neq k\pi/2\ (k\in\mathbb{Z})$ のとき非零となり、これは楕円の主軸が座標軸に対して傾いていることに対応する。
6. Python による数値検証と可視化
導出した媒介変数表示(1)と陰関数表示(2)の整合性を、数値計算によって確認する。以下のスクリプトでは、$\theta$ を走査して得た $(X,Y)$ を式(2)の $f(X,Y)$ に代入し、その値が浮動小数点誤差の範囲で $0$ に一致することを確認したうえで、回転前後の楕円を描画する。
import numpy as np
import matplotlib.pyplot as plt
# パラメータ設定
a, b = 3.0, 1.5 # 長軸・短軸
alpha = np.deg2rad(40) # 回転角
# (1) 媒介変数表示
theta = np.linspace(0, 2 * np.pi, 400)
x = a * np.cos(theta)
y = b * np.sin(theta)
X = x * np.cos(alpha) - y * np.sin(alpha)
Y = x * np.sin(alpha) + y * np.cos(alpha)
# (2) 陰関数 f(X, Y) の定義(式(2))
def f(X, Y, a, b, alpha):
c, s = np.cos(alpha), np.sin(alpha)
return (X * c + Y * s) ** 2 / a ** 2 + (Y * c - X * s) ** 2 / b ** 2 - 1
# 媒介変数表示から得た点が陰関数を満たすか検証
residual = f(X, Y, a, b, alpha)
print("max |f(X, Y)| =", np.max(np.abs(residual)))
# 可視化
fig, ax = plt.subplots(figsize=(5.5, 5.5))
ax.plot(x, y, '--', color='gray', linewidth=1.2, label=r'回転前($\alpha=0$)')
ax.plot(X, Y, color='C0', linewidth=2, label=r'回転後($\alpha=40^\circ$)')
ax.axhline(0, color='k', lw=0.6)
ax.axvline(0, color='k', lw=0.6)
ax.set_aspect('equal')
ax.set_xlabel('X'); ax.set_ylabel('Y')
ax.legend(loc='upper right')
ax.grid(alpha=0.3)
plt.savefig('rotated_ellipse.png', dpi=160, bbox_inches='tight')
実行結果は次の通りである。
max |f(X, Y)| = 8.881784197001252e-16
この値は倍精度浮動小数点演算における丸め誤差の範囲内であり、式(2)が回転後の楕円上で恒等的に $f(X,Y)=0$ となることが数値的にも裏付けられる。
上記スクリプトにより得られる図を以下に示す。破線が回転前($\alpha=0$)、実線が $\alpha=40^\circ$ 回転後の楕円である。
7. おわりに
本稿では、座標軸に平行な楕円を角度 $\alpha$ だけ回転させた図形について、媒介変数表示(1)と陰関数表示(2)を導出した。陰関数表示は「逆回転を施して元の楕円の式に代入する」方法と「連立方程式を直接解く」方法の2通りで導出でき、両者が一致することを解析的に確認した。また、式(2)を一般2次曲線の形(3)に整理することで、係数 $A,B,C$ が回転角 $\alpha$ や軸比 $a,b$ とどのように結びつくかを明らかにした。最後に Python による数値実験により、導出結果が数値的にも成立することを検証した。
今後の課題としては、本結果を楕円の中心が原点にない一般の場合(平行移動を伴う場合)へ拡張すること、また判別式 $B^2-4AC$ を用いて回転角によらない不変量としての性質を論じることが挙げられる。
