0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「アポロニウスの円を教えて下さい。」をAI先生に聞きました。

Posted at

・(本日の)ChatGPT先生が、いつもと違ってステキです。
 もしかしたら、新任の先生かも。
 私はついていけません。

(以下抜粋)
方程式の導出(参考)
【もし希望があれば】
k を動かせるアニメーション版
任意の A, B, k を入力してすぐ描画する関数化
円の中心・半径を直接計算する版
必要なら、このアニメーションを GIF や MP4 として保存するコードも付けられます。
🚀 もし発展させたいなら
…

GPT-4o. の Free プランの制限に達しました。

(本日の)ChatGPT先生へ

質問リスト

・質問リストの追番は無視して下さい。1個ずつです。途中の回答表示は省略しています。

# 質問リスト
1. アポロニウスの円を教えて下さい。
2. 上記をsympyのソースコードで教えて下さい。
3. k を動かせるアニメーション版で
4. 追加で、複素数平面をsympyのソースコードで教えて下さい。
5. 私の質問をMarkdown形式でリスト化して出力して。Markdown形式でリストからアスタリスクは削除して。1行目に、# 質問リスト の文字を出力して。
6. 上記に追番を付けて下さい。
7. 回答リスト形式もお願いします。
8. 質問+回答セットの一覧 (Q&A形式) もお願いします。
9. 私の質問をMarkdown形式でリスト化して出力して。Markdown形式でリストからアスタリスクは削除して。1行目に、# 質問リスト の文字を出力して。追番も追加して。
10. 全部お願いします。このコメントも含めて下さい。

...では Matplotlib の FuncAnimation を使って、k を動かしながらアポロニウスの円がどう変化するか見えるアニメーション版を作ります。

import sympy as sp
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

# 設定: 点 A, B
A = np.array([0, 0])
B = np.array([4, 0])

# 円の中心・半径を計算する関数
def apollonius_circle(A, B, k):
    a, b = A, B
    d = np.linalg.norm(a - b)
    center = (k**2 * b - a) / (k**2 - 1)
    radius = (k * d) / abs(k**2 - 1)
    return center, radius

# 描画準備
fig, ax = plt.subplots()
circle_artist = plt.Circle((0, 0), 1, fill=False, color='blue')
ax.add_artist(circle_artist)
ax.plot(A[0], A[1], 'ro', label='A')
ax.plot(B[0], B[1], 'go', label='B')
ax.set_xlim(-10, 10)
ax.set_ylim(-10, 10)
ax.set_aspect('equal')
ax.legend()
title = ax.set_title('k = 1')

# アニメーション更新関数
def update(frame):
    k = 0.2 + frame * 0.05  # kを0.2から徐々に増やす
    if abs(k - 1) < 0.1:    # k ≈ 1 のときは飛ばす(円が無限大)
        k += 0.1
    try:
        center, radius = apollonius_circle(A, B, k)
        circle_artist.center = center
        circle_artist.set_radius(radius)
        title.set_text(f'Apollonius Circle (k = {k:.2f})')
    except:
        pass
    return circle_artist, title

# アニメーション実行
ani = FuncAnimation(fig, update, frames=100, interval=100, blit=False)

plt.show()

...今度は 複素数平面 を使ったアポロニウスの円の定義と、SymPy を使ったソースコードをお伝えします。

import sympy as sp
import matplotlib.pyplot as plt

# シンボル定義
z = sp.symbols('z')
a = 0 + 0j  # 点A (複素数)
b = 4 + 0j  # 点B (複素数)
k = 2       # 距離比

# アポロニウスの条件式
eq = sp.Eq(sp.Abs((z - a) / (z - b)), k)

# z = x + iy として実数成分で展開
x, y = sp.symbols('x y', real=True)
z_sub = x + sp.I * y
eq_real = eq.subs(z, z_sub)

# 展開・簡単化
lhs = sp.simplify(sp.Abs((z_sub - a) / (z_sub - b)))
eq_final = sp.Eq(lhs, k)

# 確認
print("複素数平面でのアポロニウスの円の方程式:")
sp.pprint(eq_final)

# グラフ描画
sp.plot_implicit(eq_final, (x, -2, 6), (y, -4, 4))
plt.title(f"Apollonius Circle in Complex Plane (k={k})")
plt.show()

Gemini先生へ

copilot先生へ

いつもの? sympyの実行環境と 参考のおすすめです。

(テンプレート)

いつもと違うおすすめです。

wikipedia

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?