2
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?

三角形の外接円と内接円の半径の関係と数値計算(オイラーの不等式)

2
Last updated at Posted at 2026-01-15

はじめに

三角形の外接円と内接円の半径には、ある不等式の関係性がある。内接円の半径は外接円の半径の0.5倍以下であるというオイラーの不等式である。今回は、これを数値計算で確認してみる。
具体的には、3辺の情報が与えられた三角形について正弦定理及び余弦定理を用いて外接円の半径$R$及び内接円の半径$r$をそれぞれ求める。その後、そのような三角形を大量に生成して、$\frac{r}{R}\le 0.5$を散布図で確認する。

オイラーの不等式.png

三角形の外接円と内接円.png

導入

$\Delta ABC$が与えられたとき、以下の式がそれぞれ成立する。

正弦定理

\sin{A}=\frac{a}{2R}

余弦定理

\cos A=\frac{b^2+c^2-a^2}{2bc}

三角形の面積と内接円の半径

三角形の面積と内接円の半径は、以下のように与えられる。

三角形の面積

S=\frac{1}{2}bc \sin A

内接円の半径

S=\frac{1}{2} r(a+b+c)

より、


r=\frac{2S}{a+b+c}

三角関数の関係式

\sin^2 A+\cos^2 A=1

三角形の成立条件

余弦定理から、三角形の成立条件は以下のようになる。

|a-b|\le c \le a+b

計算条件

$0<a,b<1$の条件のもと三角形を$n$個生成し、$r,R$の関係性を調査する。
横軸$r$、縦軸$\frac{r}{R}$として散布図を作成する。

プログラム

python delta_R_r_n.py
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math
import random

def delta_Rr(a,b,c):
    if abs(a-b)< c < a+b:
        cos_A=(b**2+c**2-a**2)/(2*b*c)
        sin_A=(1-cos_A**2)**0.5
        R=a/(2*sin_A)
        r=a*b*c/(2*R*(a+b+c))
    
    else:
        R=np.nan
        r=np.nan
    return R,r

n=10000
a_ary=np.zeros(n)
b_ary=np.zeros(n)
c_ary=np.zeros(n)

R_ary=np.zeros(n)
r_ary=np.zeros(n)

for i in range(n):
   a=random.random()
   b=random.random()
   c=random.random() 
   R_ary[i],r_ary[i]=delta_Rr(a,b,c)

plt.scatter(r_ary,r_ary/R_ary,color="blue",s=0.4)
plt.axhline(0.5,color="red")
plt.xlabel("r")
plt.ylabel("r/R")
plt.savefig("オイラーの不等式.png")
plt.show()

結果

オイラーの不等式.png

このように、$\frac{r}{R}\le 0.5$を厳密に満たしていた。

三角形の外接円と内接円の描写

ある三角形が与えられたとき、その外接円と内接円を描写するプログラムを以下に作成した。

python triangle_rR.py
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math
import random
plt.axes().set_aspect("equal")
def delta_Rr(a,b,c):
    if abs(a-b)< c < a+b:
        cos_A=(b**2+c**2-a**2)/(2*b*c)
        sin_A=(1-cos_A**2)**0.5
        R=a/(2*sin_A)
        r=a*b*c/(2*R*(a+b+c))
    
    else:
        R=np.nan
        r=np.nan
    return R,r
#三角形の座標(複素数平面)
z_A=0+10j
z_B=70+0j
z_C=-3+0j

z_H=(z_B+z_C)/2

a=abs(z_B-z_C)
b=abs(z_A-z_C)
c=abs(z_A-z_B)

R,r=delta_Rr(a,b,c)
BC=z_C-z_B

z_G=(z_A+z_B+z_C)/3

# 外接円を描写するプログラムメイン
z_R1=z_H+(R**2-(abs(BC/2)**2))**0.5*1j*BC/abs(BC)
z_R2=z_H+(R**2-(abs(BC/2)**2))**0.5*(-1j)*BC/abs(BC)

if abs(abs(z_R1-z_A)-abs(z_R1-z_B))<1e-3 and abs(abs(z_R1-z_A)-abs(z_R1-z_C))<1e-3:
    z_R=z_R1
else:
    z_R=z_R2

theta=np.linspace(0,2*math.pi,100)

x_cc=R*np.cos(theta)+z_R.real
y_cc=R*np.sin(theta)+z_R.imag

# 内接円を描写するプログラムメイン
z_r1=z_B+BC/(abs(BC))*(a-b+c)/2+r*1j*BC/abs(BC)
z_r2=z_B+BC/(abs(BC))*(a-b+c)/2+r*(-1j)*BC/abs(BC)

if abs(z_r1-z_G)<abs(z_r2-z_G):
    z_r=z_r1
else:
    z_r=z_r2

x_ic=r*np.cos(theta)+z_r.real
y_ic=r*np.sin(theta)+z_r.imag

plt.plot([z_A.real,z_B.real,z_C.real,z_A.real],[z_A.imag,z_B.imag,z_C.imag,z_A.imag])

plt.plot(z_A.real,z_A.imag,"o",color="black")
plt.plot(z_B.real,z_B.imag,"o",color="orange")
plt.plot(z_C.real,z_C.imag,"o",color="green")

plt.plot(x_cc,y_cc,color="blue")
plt.plot(x_ic,y_ic,color="red")
plt.savefig("三角形の外接円と内接円.png")

plt.show()

三角形の外接円と内接円.png

まとめ

今回は、正弦定理と余弦定理を用いた応用ということで、オイラーの不等式を数値計算によって確認してみた。具体的には、計算機を用いて三角形を大量に作成して、その外接円の半径と内接円の半径を調査してみた。

参考文献

2
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
2
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?