- 表紙
- まとめ
- 理解
- 意味
- コード
数学のまとめノート
「楕円」とは
円を伸縮してできる曲線のこと。
定義
2点からの距離の和が一定の点の軌跡を楕円という.
A. 楕円の方程式
原点中心, 横半径 $a>0$, 縦半径 $b>0$ の楕円: $\displaystyle \frac{x^2}{a^2} + \frac{y^2}{b^2} = 1$.
B. 楕円の接線方程式
楕円上の $(x_0, y_0)$ を通る接線の方程式: $\displaystyle \frac{x_0}{a^2}x + \frac{y_0}{b^2}y = 1$
離心率
楕円の離心率 $e$ は, (焦点間の距離)/(長軸方向の直径)で与えられる. $0<e<1$ である.
C. 横長の楕円 $(a>b)$
- 焦点からの距離の和: $2a$
- 焦点: $(c, 0)$, $(-c,0)$
- $c^2 = a^2 - b^2$
- 離心率: $e=c/a$
- 焦点 $(ae, 0)$, 準線: $x=a/e$
D. 縦長の楕円 $(a<b)$
- 焦点からの距離の和: $2b$
- 焦点: $(0, c)$, $(0, -c)$
- $c^2 = b^2 - a^2$
- 離心率: $e=c/b$
- 焦点 $(0, be)$, 準線: $y=b/e$
ポイント解説
定義
距離の和を $2a$, 焦点を $\mathrm{F}$ と $\mathrm{F}'$, 動点を $\mathrm{P}$ とすると, $\mathrm{PF} + \mathrm{PF'} = 2a$.
A・C
横方向に長い楕円の図:

C・D
$a=b$ のときは円になる.
離心率
(焦点からの距離)と(準線からの距離の比) が $e:1$ になる点の軌跡は楕円である。
イメージ
楕円は自然に現れる。


楕円の数式
楕円の定義
定義(楕円)
ある2点からの距離の和が常に一定の点の集合を楕円という.
2点が一致する場合は円となる。円は中心から距離が一定の点の集まりであり,楕円の定義を満たす。
定義(言い換え)
点 $\mathrm{F}$ と $\mathrm{F'}$ から動点 $\mathrm{P}$ までのそれぞれの距離の和が $2a$ である点 $\mathrm{P}$ の軌跡を楕円という.
$$\mathrm{FP} + \mathrm{F'P} = 2a.$$
楕円の方程式
詳しい解説はこちら
公式(楕円)
中心が原点, $x$ 軸方向の半径の長さが $a>0$, $y$ 軸方向の半径の長さが $b>0$ の楕円の方程式は
$$\displaystyle \frac{x^2}{a^2} + \frac{y^2}{b^2} = 1$$
である.
楕円の方程式を楕円の定義から導出してみよう。
例えば, $\displaystyle \frac{x^2}{25} + \frac{y^2}{9}=1$ は点 $(4, 0)$ と $(-4,0)$ が焦点の楕円を表す式です。方程式を満たす点 $(5,0)$ や点 $(0,3)$ への焦点からの距離の和は $10$ で一定です。

証明.
$c>0$ として, 座標平面上で焦点の座標を $\mathrm{F}(c, 0)$ と $\mathrm{F'}(-c, 0)$ とする.
焦点から楕円上の点 $\mathrm{P}(x,y)$ までのそれぞれの距離の和を $2a$ とすると, 点 $\mathrm{P}$ が
$$\displaystyle \mathrm{PF} + \mathrm{PF'} = 2a$$
を満たすことが楕円上の点である定義である.
楕円は焦点 $\mathrm{F}$ と $\mathrm{F'}$ からの距離の和が一定の点の集合である.

定義式を座標を使って書き換え計算する. $\mathrm{PF}$ と $\mathrm{PF'}$ は
$\displaystyle \mathrm{PF} = \sqrt{(x-c)^2 + y^2}$
$\displaystyle \mathrm{PF'} = \sqrt{(x-(-c))^2 + y^2}$
であり, 楕円の定義式から
$$\sqrt{(x-c)^2 + y^2} + \sqrt{(x-(-c))^2 + y^2} = 2a$$
を得る. 第2項目を右辺に移項し, 両辺を2乗すると
$\sqrt{(x-c)^2 + y^2} = 2a - \sqrt{(x-(-c))^2 + y^2}$
$(x-c)^2 + y^2 = 4a^2 - 4a \sqrt{(x+c)^2 + y^2} + (x+c)^2 + y^2$
となる. これを計算すると
$a \sqrt{(x+c)^2 + y^2} = a^2 + cx$
であり, 再度2乗すると
$(a^2 - c^2)x^2 + a^2y^2 = a^2(a^2 - c^2)$
となる. この式のグラフは $x$ 軸と $y$ 軸, 原点でそれぞれで対称であることが分かる.
$(x_0, y_0)$ が方程式を満たすとき, $(-x_0, y_0)$, $(x_0, -y_0)$, $(-x_0, -y_0)$ はすべて方程式を満たす.
定義で考えた $a$ が長軸半径に対応することを示す;
原点対称な楕円上の点のペアで, 最も距離が遠いときは, 2点ともが $x$ 軸上の対称な位置にあるときである.
このときのペアの点の間の距離は $2a$ である.

ゆえに, 定数 $a$ の値は楕円の長軸方向の半径の長さと一致する.
$\sqrt{a^2-c^2}$ が楕円の短軸半径であることを示す;
原点対称な楕円上の点のペアで, 最も距離が近いときは, 2点ともが $y$ 軸上の対称な位置にあるときである.
このときのペアの点の間の距離は $2\sqrt{a^2 - c^2}$ である.

三平方の定理(図参照)より, 1つの点と原点の距離は $\sqrt{a^2-c^2}$ である.
ゆえに, $\sqrt{a^2 - c^2}$ が楕円の短軸半径の長さとなる. これを $b$ と置く.
さきほど計算した楕円の方程式
$$(a^2 - c^2)x^2 + a^2y^2 = a^2(a^2 - c^2)$$
について, $b^2 = a^2 - c^2$ と置きかえると
$$b^2 x^2 + a^2y^2 = a^2b^2$$
となり, 両辺を $a^2b^2>0$ で割ると
$$\displaystyle \frac{x^2}{a^2} + \frac{y^2}{b^2} = 1$$
を得る.
ゆえに, 長軸半径 $a$, 短軸半径 $b$ の原点中心の楕円の方程式が上式で得られることが分かった.
円との関係(伸縮)
楕円は、円をギュッとした形です。
これを数学的に解説します!
円の拡大縮小による楕円の導出
単位円 $x^2 + y^2 =1$ を $x$ 軸方向に $a$ 倍,$y$ 軸方向に $b$ 倍した図形の方程式は次と一致する:
$$\displaystyle \frac{x^2}{a^2} + \frac{y^2}{b^2} = 1$$
円を伸縮すると楕円
円を「ギュッとする」とは、伸縮させるという意味です。
今回のテーマ(問い)は、「円を伸縮させたら楕円になるらしい」というものです。
はじめに、円と楕円が何かを確認し、問いを確かめます。
楕円の方程式
まず、楕円が何かを明確にしておきましょう。
今回は、教科書に書いている次の方程式が楕円ということを基準にしたいと思います。
楕円の方程式
楕円の中心が原点であり, $x$ 軸方向の半径が $a>0$, $y$ 軸方向の半径が $b>0$ の楕円の方程式は次の通り:
$$\displaystyle \frac{x^2}{a^2} + \frac{y^2}{b^2} = 1.$$

円を伸縮させた形
円は数学では $x^2+y^2=1$ で表せます。
伸縮させるとは、同じ倍率で拡大もしくは縮小させるという意味です。
数学的には、例えば、$(3, 1)$ という点を $(6, 1)$ にして、さらに $(2, 3)$ という点を $(4, 3)$ にするのは「$y$ 軸を基準に $x$ 軸方向に $2$ 倍に拡大した」と思うことができます。$1/2$ 倍だったら、縮小させたと思えます。
証明で確かめる
証明すること→単位円 $x^2 + y^2 =1$ を $x$ 軸方向に $a$ 倍, $y$ 軸方向に $b$ 倍した図形の方程式は次と一致する: $$\displaystyle \frac{x^2}{a^2} + \frac{y^2}{b^2} = 1$$
証明.単位円 $x^2 + b^2 =1$ を横方向と縦方向の両方に伸縮するという変形が, 楕円の方程式を導くことを示す.
横軸方向に伸縮させる
円を 「$x$ 軸方向に伸縮させる」ことを, $y$ 軸を基準に同じ比率($a>0$)で等倍すると定める.
つまり, 円周上の点 $(x,y)$ を $(ax, y)$ と変形する. 等倍されたあとの円周上の点の座標は $(ax, y)$ となる.
縦軸方向に伸縮させる
円を 「$y$ 軸方向に伸縮させる」ことを, $x$ 軸を基準に同じ比率($b>0$)で等倍すると定める.
つまり, 円周上の点 $(x,y)$ を $(x, by)$ と変形する. 等倍されたあとの円周上の点の座標は $(x, by)$ となる.
伸縮後の座標と方程式
円を $x$ 軸と$y$ 軸方向にそれぞれ伸縮したあとの点$(X,Y)$ の座標は $(ax, by)$ である.
$$(X,Y) = (ax, by)$$
$x = X/a$ と $y = Y/b$ を, 単位円の方程式 $(x^2 + y^2 = 1)$ に代入すると, 次の通り:
$$\displaystyle \left( \frac{X}{a} \right)^2 + \left( \frac{Y}{b} \right)^2 = 1$$
すなわち, 楕円の方程式である $\displaystyle \frac{x^2}{a^2} + \frac{y^2}{b^2} = 1$ を得る, ■
以上から、次のことを確かめることができました!
円の拡大縮小による楕円の導出
単位円 $x^2 + y^2 =1$ を $x$ 軸方向に $a$ 倍,$y$ 軸方向に $b$ 倍した図形の方程式は次と一致する:
$$\displaystyle \frac{x^2}{a^2} + \frac{y^2}{b^2} = 1$$
楕円のPythonコード
半径から楕円を表示するコード
楕円の縦軸半径と横軸半径の長さから, 楕円のグラフをPythonで表示してみよう。
楕円のグラフ(半径)
横方向の半径の長さを $a$, 縦方向の半径の長さを $b$ とすると, $(x,y)=(a\cos\theta, b \sin \theta)$ が対応する(原点中心の)楕円の媒介変数表示となる。
媒介変数 $\theta$ をlinspace(0, 2*np.pi, n)
で $0 \leqq \theta \leqq 2\pi$ の中で $n$ 刻みで定義する。
x
座標をa*np.cos(theta)
, y
座標をb*np.sin(theta)
として, matplotlib.pyplot(x, y)
でグラフを表示する。
入力例. 横軸半径 $a=2$ と縦軸半径 $b=1$ の楕円を表示する
import matplotlib.pyplot as plt
import numpy as np
# 長軸と短軸の長さ
a = 2
b = 1
# パラメータを生成
theta = np.linspace(0, 2 * np.pi, 1000)
# 楕円の座標計算
x = a * np.cos(theta)
y = b * np.sin(theta)
# 楕円を描画
plt.plot(x, y, label=f'Major Axis = {a}, Minor Axis = {b}')
plt.title('Ellipse with Given Major and Minor Axes')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.legend()
plt.grid(True)
plt.show()

離心率から楕円を表示するコード
楕円の離心率 $e$ から, 楕円のグラフをPythonで表示してみよう。
楕円のグラフ(媒介変数表示)
横方向の半径の長さを $a$, 縦方向の半径の長さを $b$ とすると, $(x,y)=(a\cos\theta, b \sin \theta)$ が対応する(原点中心の)楕円の媒介変数表示となる。
媒介変数 $\theta$ をlinspace(0, 2*np.pi, n)
で $0 \leqq \theta \leqq 2\pi$ の中で $n$ 刻みで定義する。
x
座標をa*np.cos(theta)
, y
座標をb*np.sin(theta)
として, matplotlib.pyplot(x, y)
でグラフを表示する。
$a>b$ である楕円は $b^2 =a^2(1-e^2)$, $a<b$ である楕円は $a^2 =b^2(1-e^2)$ が成り立つことを利用して, 離心率を利用する。
入力例. 離心率 $e=0.8$ の横長の楕円を表示する
import matplotlib.pyplot as plt
import numpy as np
# 離心率
eccentricity = 0.8
# 楕円のパラメータ
a = 1 # 長軸の半径
b = a * np.sqrt(1 - eccentricity**2) # 短軸の半径
# パラメータを生成
theta = np.linspace(0, 2 * np.pi, 100)
# 楕円の座標計算
x = a * np.cos(theta)
y = b * np.sin(theta)
# 楕円を描画
plt.plot(x, y, label=f'Eccentricity = {eccentricity}')
plt.title('Ellipse with Given Eccentricity')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.legend()
plt.grid(True)
plt.show()
