ホームページ >バックエンド開発 >Python チュートリアル >ポリゴン内ポイントの検出には、レイ トレーシングと Matplotlib の path.contains_points のどちらの方法がより効率的ですか?

ポリゴン内ポイントの検出には、レイ トレーシングと Matplotlib の path.contains_points のどちらの方法がより効率的ですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-03 19:33:03370ブラウズ

Which Method is More Efficient for Point-in-Polygon Detection: Ray Tracing or Matplotlib's path.contains_points?

Python での効率的なポリゴン内点検出

点がポリゴン内にあるかどうかを判断することは、計算幾何学において頻繁に行われるタスクです。このタスクの効率的な方法を見つけることは、多数の点を評価する場合に有利です。ここでは、一般的に使用される 2 つの方法、レイ トレーシングと Matplotlib の path.contains_points 関数を調べて比較します。

レイ トレーシング メソッド

レイ トレーシング メソッドは、からの水平レイと交差します。検査中の点と多角形の辺。交差の数をカウントし、パリティに基づいて点が多角形の内側にあるかどうかを判断します。

Matplotlib の path.contains_points 関数

Matplotlib の path.contains_points 関数は、ポリゴンを表すパス オブジェクト。指定された点が定義されたパス内にあるかどうかを確認します。この関数は、次のコード スニペットに見られるように、多くの場合、レイ トレーシング アプローチより高速です。


from time import time
import matplotlib.path as mpltPath

ポリゴンとランダムな点

polygon = [[np.sin(x) 0.5, np.cos(x) 0.5] for x in np.linspace(0, 2*np.pi, 100)]
points = np.random.rand(10000, 2)

レイ トレーシング経過時間

start_time = time()
inside1 = [ray_tracing_method(point[0], point[ 1]、ポリゴン) ポイント単位のポイント]
print("レイ トレーシング経過時間: " str(time() - start_time))

Matplotlib contains_points 経過時間

start_time = time ()
path = mpltPath.Path(polygon)
inside2 = path.contains_points(points)
print("Matplotlib contains_points 経過時間: " str(time() - start_time))
< /pre>

上記のコードは、レイ トレーシングと比較して Matplotlib のアプローチの実行時間が大幅に速いことを報告しています。

その他のオプション

これらのメソッドに加えて、幾何学的操作用に特別に設計された Shapely パッケージは、ポリゴン内ポイント チェックのための効率的な機能を提供します。

以上がポリゴン内ポイントの検出には、レイ トレーシングと Matplotlib の path.contains_points のどちらの方法がより効率的ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。