漢字プリント 数学プリント
問題文
$xy$ 平面において、2点 $\mathrm{B}(-\sqrt{3},-1),\mathrm{C}(\sqrt{3},-1)$ に対し、点 $\mathrm{A}$ は次の条件(*)を満たすとする。

(*) $\angle{\mathrm{BAC}}=\frac{\pi}{3}$ かつ点 $\mathrm{A}$ の $y$ 座標は正。

次の各問に答えよ。
  1. $\triangle{\mathrm{ABC}}$ の外心の座標を求めよ。
  2. 点 $\mathrm{A}$ が条件(*)を満たしながら動くとき、 $\triangle{\mathrm{ABC}}$ の垂心の軌跡を求めよ。
(2021 京都大学 理系第5問)
コード
import numpy as np
from numpy import cos,sin,pi,sqrt
import matplotlib.pyplot as plt
import matplotlib.animation as ani
import matplotlib.patches as patches

'''
図の準備
'''
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlim(-3,3)
ax.set_ylim(-3,3)
ax.axhline(0,color='0.6')
ax.axvline(0,color='0.6')
ax.set_aspect("equal")
ax.grid()
ax.set_title("2021京大数学 理系第5問",pad=15)

'''
定数の準備
'''
B = [-sqrt(3),-1]
C = [ sqrt(3),-1]
circum = patches.Circle((0, 0),2,ec='0.7',fill=None,linestyle="dashed")
ax.add_patch(circum)

'''
変数の準備
'''
THETA = np.arange(0,pi,0.02)

'''
動画を作成する
'''
imgs = []
HX = []
HY = []
for theta in THETA:
    
    A = [2*cos(theta),2*sin(theta)]
    H = [A[0],A[1]-2]
    
    angB = (  theta + pi/6)/2
    angC = (7*pi/6 - theta)/2
    lenB = 2*sqrt(3)*sin(angC)
    lenC = 2*sqrt(3)*sin(angB)
    
    if theta <= pi/6:
        perpBLX = B[0]
        perpBLY = B[1]
        perpBRX = H[0]
        perpBRY = H[1]
        perpCLX = C[0]-lenC*cos(angC-pi/6)
        perpCLY = C[1]+lenC*sin(angC-pi/6)
        perpCRX = H[0]
        perpCRY = H[1]
    
    elif theta <= 5*pi/6:
        perpBLX = B[0]
        perpBLY = B[1]
        perpBRX = B[0]+lenB*cos(angB-pi/6)
        perpBRY = B[1]+lenB*sin(angB-pi/6)
        perpCLX = C[0]-lenC*cos(angC-pi/6)
        perpCLY = C[1]+lenC*sin(angC-pi/6)
        perpCRX = C[0]
        perpCRY = C[1]
    
    else:
        perpBLX = H[0]
        perpBLY = H[1]
        perpBRX = B[0]+lenB*cos(angB-pi/6)
        perpBRY = B[1]+lenB*sin(angB-pi/6)
        perpCLX = H[0]
        perpCLY = H[1]
        perpCRX = C[0]
        perpCRY = C[1]
    
    perpA = ax.plot([A[0],A[0]],
                    [A[1],min(-1,H[1])],
                    color="0.7")
    perpB = ax.plot([perpBLX,perpBRX],
                    [perpBLY,perpBRY],
                    color="0.7")
    perpC = ax.plot([perpCLX,perpCRX],
                    [perpCLY,perpCRY],
                    color="0.7")
    ABC = ax.plot([A[0],B[0],C[0],A[0]],\
                  [A[1],B[1],C[1],A[1]],\
                  color="k")
    Hnow  = ax.plot(H[0],H[1],marker="o",color="forestgreen",markersize=8)
    HX.append(H[0])
    HY.append(H[1])
    Hpast = ax.plot(HX,HY,color="forestgreen",alpha=0.5,linewidth=4)
    
    img = perpA+perpB+perpC+ABC+Hnow+Hpast
    if theta<3.13:
        imgs.append(img)
    else:
        for i in range(50):
            imgs.append(img)
  
mov=ani.ArtistAnimation(fig, imgs, 100)
plt.show()
解説になっているのか?甚だギモンな動画
「高校数学のエアポケット」に戻る