漢字プリント 数学プリント
問題文
座標平面上の2点 $\mathrm{P,Q}$ が、曲線 $y=x^2\,(-1 \leqq x \leqq 1)$ 上を自由に動くとき、線分 $\mathrm{PQ}$ を $1:2$ に内分する点 $\mathrm{R}$ が動く範囲を $D$ とする。ただし、 $\mathrm{P}=\mathrm{Q}$ のときは $\mathrm{R}=\mathrm{P}$ とする。
  1. $a$ を $-1 \leqq a \leqq 1$ をみたす実数とするとき、点 $(a,b)$ が $D$ に属するための $b$ の条件を $a$ を用いて表せ。
  2. $D$ を図示せよ。
(2007 東京大学 理系第3問)
  1. $\begin{eqnarray}\left\{\begin{array}{l}a^2 \leqq b \leqq 3a^2+4a+2\quad(-1 \leqq a \leqq -\frac{1}{3})\\a^2 \leqq b \leqq \frac{3}{2}a^2-a+\frac{1}{2}\quad(-\frac{1}{3} \leqq a \leqq 0)\\a^2 \leqq b \leqq \frac{3}{2}a^2+a+\frac{1}{2}\quad(0 \leqq a \leqq \frac{1}{3})\\a^2 \leqq b \leqq 3a^2-4a+2\quad(\frac{1}{3} \leqq a \leqq 1)\end{array}\right.\end{eqnarray}$
  2. 略(動画を参照)
※ この答えは学校側が公表したものではありません。個人が作成した非公式の答えです。
コード
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as ani

#紙の準備
fig = plt.figure()
ax = fig.add_subplot(111)
fig.suptitle("2007東大数学 理系第3問",
             color="0.7",ha="right",x=0.96,y=0.08)
ax.set_xlim(-1.5,1.5)
ax.set_ylim(-0.5,1.5)
ax.set_aspect("equal")
ax.axis("off")

#はじめに放物線を描きます
x = np.arange(-2,2,0.01)
y = x**2
ax.plot(x,y,color="0.8",clip_on=False)

#動く点たちの準備
D, = ax.plot([],color="pink",linewidth=4,solid_capstyle="round")
PQ,= ax.plot([],color="peachpuff",linewidth=2.5)
P, = ax.plot([],color="coral",marker="o",markersize=10)
Q, = ax.plot([],color="sandybrown",marker="o",markersize=7.5)
R, = ax.plot([],color="hotpink",marker="o",markersize=5)
kasuga = ax.text(0,-1.2,"トゥース!".rjust(6),color="palevioletred",
                 fontsize=25,ha="center",fontfamily="HGSoeiKakupoptai")

#お気に入りのイージング関数たち
def easing(x):
    return -(np.cos(np.pi*x)-1)/2
def easingOut(x):
    c4 = (2*np.pi)/3
    if x==0:
        return 0
    elif x==1:
        return 1
    else:
        return 2**(-10*x)*np.sin((x*10-0.75)*c4)+1

#P,Q,Rを動かします
def show_PQR(px,qx):
    
    p = np.array([px,px**2])
    q = np.array([qx,qx**2])
    PQ.set_data([p[0],q[0]],[p[1],q[1]])
    P.set_data(p[0],p[1])
    Q.set_data(q[0],q[1])
    
    r = 2/3*p+1/3*q
    R.set_data(r[0],r[1])
    Dx = np.append(D.get_data()[0],r[0])
    Dy = np.append(D.get_data()[1],r[1])
    D.set_data(Dx,Dy)

#台本
def update(i):
    
    k1 = i/100
    if k1<=1 and k1>=0:
        k  = easing(k1)
        px = -1+2*k
        qx = 1
        show_PQR(px,qx)
        
    k2 = (i-100)/100
    if k2<=1 and k2>=0:
        k  = easing(k2)
        px = 1
        qx = 1-2*k
        show_PQR(px,qx)
        
    k3 = (i-200)/100
    if k3<=1 and k3>=0:
        k  = easing(k3)
        px = 1-2*k
        qx = -1
        show_PQR(px,qx)
        
    k4 = (i-300)/100
    if k4<=1 and k4>=0:
        k  = easing(k4)
        px = -1
        qx = -1+2*k
        show_PQR(px,qx)
        
    k5 = (i-400)/1600
    if k5<=1 and k5>=0:
        k  = k5
        px = -1+2*np.sin(51*k*np.pi/2)**2
        qx =  1-2*(k-np.sin(2*k*np.pi)/25)
        show_PQR(px,qx)
        
    k6 = (i-2000)/100
    if k6<=1 and k6>=0:
        k = easing(k6)
        for obj in [PQ,P,Q,R]:
            obj.set_alpha(1-k)
            
    k7 = (i-2100)/50
    if k7<=1 and k7>=0:
        k = easingOut(k7)
        kasuga.set_y(-1.2+0.8*k)

#上演
mov = ani.FuncAnimation(fig,update,2200,interval=50)
plt.show()
解説になっているのか?甚だギモンな動画
「高校数学のエアポケット」に戻る