多角形の面積・重心の計算
shapelyを使って多角形の面積・重心を計算します。
インポートするパッケージはshapely.geometryです。
サンプルコードは、一辺が5mmの正方形の頂点で行列を作成し、正方形の面積と重心を計算しています。
計算結果は、グラフに頂点を緑点、重心位置を赤点でプロットしています。
- from shapely.geometry import Polygon
- import matplotlib.pyplot as plt
- import numpy as np
-
- # 多角形の頂点座標を配列で作成
- points = np.asarray([[0,0],[0,5],[5,5],[5,0]])
- poly = Polygon(points)
- # 多角形の面積を計算
- area = poly.area
- print(area)
- # 多角形の重心を計算
- centroid = poly.centroid
- print(centroid)
- # 散布図を作成
- fig = plt.figure()
- ax = fig.add_subplot(1,1,1)
- ax.set_xlabel('X', fontsize=12)
- ax.set_ylabel('Y', fontsize=12)
- # 多角形の頂点を緑色で表示
- ax.scatter(points[:,0], points[:,1], color='green', s=5, lw=5)
- # 多角形の頂点を赤色で表示
- ax.scatter(centroid.x, centroid.y, color='red', s=5, lw=5)
実行すると、面積が25、重心位置(2.5,2.5)となりました。

先ほどの正方形から頂点を1か所取り去り、三角形の面積を計算してみます。
- from shapely.geometry import Polygon
- import matplotlib.pyplot as plt
- import numpy as np
-
- # 多角形の頂点座標を配列で作成
- points = np.asarray([[0,0],[0,5],[5,5]])
- poly = Polygon(points)
- # 多角形の面積を計算
- area = poly.area
- print(area)
- # 多角形の重心を計算
- centroid = poly.centroid
- print(centroid)
- # 散布図を作成
- fig = plt.figure()
- ax = fig.add_subplot(1,1,1)
- ax.set_xlabel('X', fontsize=12)
- ax.set_ylabel('Y', fontsize=12)
- # 多角形の頂点を緑色で表示
- ax.scatter(points[:,0], points[:,1], color='green', s=5, lw=5)
- # 多角形の頂点を赤色で表示
- ax.scatter(centroid.x, centroid.y, color='red', s=5, lw=5)
面積は正方形の半分である12.5となりました。
