学習環境
- Surface
- Windows 10 Pro (OS)
- Nebo(Windows アプリ)
- iPad
- MyScript Nebo - MyScript(iPad アプリ(iOS))
- 参考書籍
新装版 数学読本3 (松坂 和夫(著)、岩波書店)の第12章(放物線・だ円・双曲線 - 2次関数)、12.2(2次曲線と直線)、だ円・双曲線と直線の問22の解答を求めてみる。
点 P を通り傾き m の直線の方程式は
この直線 c が問題のだ円と接する場合を考える。
よって、
のとき、 点 P からだ円にひいた2本の線線の傾きは、 m についての2次方程式
の2つの解である。
(証明終)
問題の仮定より、
2本の接線の傾きの積は、2次方程式の解と係数の関係により、
よって、 2本の接線は直交する。
(証明終)
コード
#!/usr/bin/env python3
import math
import matplotlib.pyplot as plt
from matplotlib import animation
from sympy import pi, sin, cos, solve, symbols
import numpy as np
print('22.')
a: float = 2
b: float = 1
r = float(math.sqrt(a ** 2 + b ** 2))
def ellipse1(x: float) -> float:
return float(math.sqrt((1 - x ** 2 / a ** 2) * b ** 2))
def ellipse2(x: float) -> float:
return -ellipse1(x)
def circle1(x: float) -> float:
return float(math.sqrt(r ** 2 - x ** 2))
def circle2(x: float) -> float:
return -1 * circle1(x)
frames = 50
m = symbols('m', real=True)
thetas = [2 * pi / frames * i for i in range(frames)]
x0s = [r * cos(theta) for theta in thetas]
y0s = [r * sin(theta) for theta in thetas]
ms = [solve((a ** 2 - x0 ** 2) * m ** 2 +
2 * x0 * y0 * m +
(b ** 2 - y0 ** 2), m)
for x0, y0 in zip(x0s, y0s)]
def update(i: int, c):
x0 = x0s[i]
y0 = y0s[i]
xs = [-r - 1, r + 1]
m1, m2 = ms[i]
plt.plot(xs, [m1 * (x - x0) + y0 for x in xs],
xs, [m2 * (x - x0) + y0 for x in xs])
c.center = x0, y0
fig = plt.gcf()
ax = plt.axes(xlim=(-r - 1, r + 1), ylim=(-r - 1, r + 1), aspect='equal')
xs = np.arange(-a, a, 0.1)
plt.plot(xs, [ellipse1(x) for x in xs],
xs, [ellipse2(x) for x in xs])
xs = np.arange(-r, r, 0.1)
plt.plot(xs, [circle1(x) for x in xs],
xs, [circle2(x) for x in xs])
c = plt.Circle((r, 0), 0.1)
ax.add_patch(c)
anim = animation.FuncAnimation(fig,
update,
fargs=(c,),
frames=frames,
interval=100,
repeat=True)
plt.show()
anim.save('sample22.gif', writer='imagemagick')
入出力結果(Zsh、PowerShell、Terminal、Jupyter(IPython))
% ./sample22.py
22.
%
0 コメント:
コメントを投稿