Python で凸包を計算して表示する

Rohan Timalsina 2023年6月21日
Python で凸包を計算して表示する

凸オブジェクトは、180 度を超える内角を持たないオブジェクトです。 ハルはオブジェクトの外側の部分です。

したがって、凸包は、凸オブジェクトの形状の周囲の境界を意味します。 このチュートリアルでは、Python でランダムなポイント セットの凸包を計算して表示する方法を説明します。

Python で凸包を計算して表示する

ポイントのセットの凸包は、セット内のすべてのポイントで構成される最小の凸多角形の境界です。

点集合の凸包の例を見てみましょう。

これらの点を考えると:

指定されたランダム ポイントのセット

凸包は次のとおりです。

ランダム点の凸包

以下は、Python でランダムな点の凸包を表示する簡単な実装です。

必要なモジュールのインポート:

from scipy.spatial import ConvexHull
import matplotlib.pyplot as plt
import numpy as np

2 次元でランダムな点を使用する:

points = np.random.randint(0, 10, size=(15, 2))

凸包の場合、次のようになります。

hull = ConvexHull(points)

それでは、点と凸包をプロットしましょう。

fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(10, 3))

for ax in (ax1, ax2):
    ax.plot(points[:, 0], points[:, 1], ".", color="k")
    if ax == ax1:
        ax.set_title("Given points")
    else:
        ax.set_title("Convex hull")
        for simplex in hull.simplices:
            ax.plot(points[simplex, 0], points[simplex, 1], "c")
        ax.plot(
            points[hull.vertices, 0],
            points[hull.vertices, 1],
            "o",
            mec="r",
            color="none",
            lw=1,
            markersize=10,
        )
    ax.set_xticks(range(10))
    ax.set_yticks(range(10))
plt.show()

出力:

ランダム点の凸包を表示

これで、ランダムな点のセットを生成し、Python で凸包を表示する方法を理解できたはずです。 このチュートリアルがお役に立てば幸いです。

著者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website