Maison  >  Article  >  développement back-end  >  Quelle méthode est la plus efficace pour la détection de point dans un polygone : le lancer de rayons ou path.contains_points de Matplotlib ?

Quelle méthode est la plus efficace pour la détection de point dans un polygone : le lancer de rayons ou path.contains_points de Matplotlib ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-03 19:33:03365parcourir

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

Détection efficace de point dans un polygone en Python

Déterminer si un point se trouve dans un polygone est une tâche fréquente en géométrie computationnelle. Trouver une méthode efficace pour cette tâche est avantageux lors de l’évaluation d’un grand nombre de points. Ici, nous explorons et comparons deux méthodes couramment utilisées : le traçage de rayons et la fonction path.contains_points de Matplotlib.

Méthode de traçage de rayons

La méthode de traçage de rayons croise un rayon horizontal de le point examiné avec les côtés du polygone. Il compte le nombre d'intersections et détermine si le point est à l'intérieur du polygone en fonction de sa parité.

La fonction path.contains_points de Matplotlib

La fonction path.contains_points de Matplotlib utilise un objet chemin pour représenter le polygone. Il vérifie si le point donné se trouve dans le chemin défini. Cette fonction est souvent plus rapide que l'approche du lancer de rayons, comme le montre l'extrait de code fourni :


from time import time
import matplotlib.path as mpltPath

Polygone et points aléatoires

polygone = [[np.sin(x) 0.5, np.cos(x) 0.5] pour x dans np.linspace(0, 2*np.pi, 100)]
points = np.random.rand(10000, 2)

Temps écoulé du lancer de rayons

start_time = time()
inside1 = [ray_tracing_method(point[0], point[ 1], polygone) pour le point en points]
print("Ray Tracing Temps écoulé : " str(time() - start_time))

Matplotlib contient_points temps écoulé

start_time = time ()
path = mpltPath.Path(polygon)
inside2 = path.contains_points(points)
print("Matplotlib contain_points Temps écoulé : " str(time() - start_time))
< /pre>

Le code ci-dessus signale des temps d'exécution nettement plus rapides pour l'approche de Matplotlib par rapport au lancer de rayons.

Autres options

En plus de ces méthodes , le package Shapely spécialement conçu pour les opérations géométriques fournit des fonctions efficaces pour les vérifications de points dans les polygones.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn