2通りの図示ができることがトラップ。
図示に使ったPythonスクリプトも掲載しておきます。洗練された書き方にはなっていないだろうけれども、参考になればと思います。ちなみに動作環境は Python 3.9.2 です。
# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt import matplotlib.patches as pat def calc_gaisetsu_circle_hankei(a,b,c): menseki = calc_menseki(a,b,c) return a*b*c/(4*menseki) def calc_menseki(a,b,c): s = (a+b+c)/2 return np.sqrt(s*(s-a)*(s-b)*(s-c)) a = 5; b = 7; c = 6 CCR = calc_gaisetsu_circle_hankei(a,b,c) print("----- check 1 -------") print("外接円半径(数値計算) = {}".format(CCR)) print("外接円半径(解析解) = {}".format(35/(4*np.sqrt(6)))) cosA = (b**2+c**2-a**2)/(2*b*c) cosB = (c**2+a**2-b**2)/(2*c*a) cosC = (a**2+b**2-c**2)/(2*a*b) OF = np.sqrt(CCR**2-25/4) vb = np.array((-5/2,-OF)) vc = np.array((5/2,-OF)) va = -(b*cosB*vb+c*cosC*vc)/(a*cosA) k = 35/16 # 相似比 cp = k*c ap = k*a bp = k*b sp = (ap+bp+cp)/2 print("----- check 2 -------") print("A'B'(数値計算) = {}".format(cp)) print("A'B'(解析解) = {}".format(105/8)) print(sp-ap) print(sp-bp) print(sp-cp) vbp = np.array((-(sp-bp),-CCR)) vcp = np.array((sp-cp,-CCR)) vap = -(bp*vbp+cp*vcp)/ap # --- Main Routine (drawing) --- # fig = plt.figure(figsize=(12,6)) ax = fig.add_subplot(121) ax.set_xlim(-7.5,7.5) ax.set_ylim(-5,10) circCCR = pat.Circle(xy=(0,0),radius=CCR,color="lime",ec="darkred") p1 = pat.Polygon(xy=[va,vb,vc],fc="lightgrey",ec="darkred") p2 = pat.Polygon(xy=[vap,vbp,vcp],fc="lightblue",ec="darkblue") ax.add_patch(p2) ax.add_patch(circCCR) ax.add_patch(p1) # --- 原点O --- # ax.plot(0,0,marker="o",color="black") # --- ABC --- # ax.plot(va[0],va[1],marker="o",color="red") ax.plot(vb[0],vb[1],marker="o",color="red") ax.plot(vc[0],vc[1],marker="o",color="red") # --- A'B'C' --- # ax.plot(vap[0],vap[1],marker="o",color="blue") ax.plot(vbp[0],vbp[1],marker="o",color="blue") ax.plot(vcp[0],vcp[1],marker="o",color="blue") ax.set_aspect('equal') # ---- 点対称な図形も条件を満たす ---- # ax2 = fig.add_subplot(122) ax2.set_xlim(-7.5,7.5) ax2.set_ylim(-10,5) vap = -vap; vbp = -vbp; vcp = -vcp # 点対称 circCCR = pat.Circle(xy=(0,0),radius=CCR,color="lime",ec="darkred") p1 = pat.Polygon(xy=[va,vb,vc],fc="lightgrey",ec="darkred") p2 = pat.Polygon(xy=[vap,vbp,vcp],fc="lightblue",ec="darkblue") ax2.add_patch(p2) ax2.add_patch(circCCR) ax2.add_patch(p1) # --- 原点O --- # ax2.plot(0,0,marker="o",color="black") # --- ABC --- # ax2.plot(va[0],va[1],marker="o",color="red") ax2.plot(vb[0],vb[1],marker="o",color="red") ax2.plot(vc[0],vc[1],marker="o",color="red") # --- A'B'C' --- # ax2.plot(vap[0],vap[1],marker="o",color="blue") ax2.plot(vbp[0],vbp[1],marker="o",color="blue") ax2.plot(vcp[0],vcp[1],marker="o",color="blue") ax2.set_aspect('equal') plt.savefig("figure.png",dpi=150) plt.close