Pythonで三角形の内心を計算する

三角形の3つの座標が与えられたとき、その三角形の内心を求めてみます。

三角形の内心の計算

図のように、A(0,0)、B(5,12)、C(14,0)とすると、sympy.geometryモジュールを使って計算します。

import sympy.geometry 
A, B, C = sympy.geometry.Point(0, 0), sympy.geometry.Point(14, 0), sympy.geometry.Point(5, 12)
tri = sympy.geometry.Triangle(A, B, C)
print('内心 = ',tri.incenter)
print('半径 = ',tri.inradius)
内心 =  Point2D(6, 4)
半径 =  4

このように、内心I=(6,4)、半径=4であることが分かりました。これをNumPyを使って計算します。一般的には、内心は次の式で計算することができます。

$\displaystyle \left( \frac{a x_{a} + b x_{b} + c x_{c}}{a + b + c}, \ \frac{a y_{a} + b y_{b} + c y_{c}}{a + b + c}\right)$

また、半径についてはヘロンの公式から計算することができます。式をNumPyで計算してみます。

import numpy as np
A=np.array([0,0])
B=np.array([14,0])
C=np.array([5,12])
a=np.sqrt(sum((C-B)**2))
b=np.sqrt(sum((C-A)**2))
c=np.sqrt(sum((B-A)**2))
i=(a*A+b*B+c*C)/(a+b+c)
print(i)
s=(a+b+c)/2
r=np.sqrt((s-a)*(s-b)*(s-c)/s)
print(r)
[6. 4.]
4.0

こんなに少ないコードで計算できるところがNumPyの素晴らしいところです。

この記事を書いた人

目次
閉じる