determinando si un punto se encuentra dentro de un polígono es una tarea frecuente en la geometría computacional. Encontrar un método eficiente para esta tarea es ventajoso al evaluar grandes cantidades de puntos. Aquí, exploramos y comparamos dos métodos de uso común: rastreo de rayos y la función de matePlotlib El punto en examen con los lados del polígono. Cuenta el número de intersecciones y determina si el punto está dentro del polígono basado en su paridad.
la función pathPlotlib.contains_points
Matplotlib objeto de ruta para representar el polígono. Verifica si el punto dado se encuentra dentro de la ruta definida. Esta función a menudo es más rápida que el enfoque de rastreo de rayos, como se ve en el fragmento de código proporcionado:
desde el tiempo de importación import matplotlib.path como mpltpath] Polygon and Random Points
polygon = [[np.sin (x) 0.5, np.cos (x) 0.5] para x en np.linspace (0, 2*np.pi, 100)]
rastro de rayos Tiempo transcurrido
puntos = np.random.rand (10000, 2)
start_time = time ()
adentro1 = [ray_tracing_method (punto [0], punto [1 punto [1 punto [1 ], PolyGon) para puntos en puntos]
print ("Ray Tracing Elapsed Time:" str (time () - start_time))matplotlib contiene_points tiempo elapsed
start_time = time ( )
print ("matplotlib contiene_points tiempo transcurrido:" str (time () - start_time))
path = mpltpath.path (polygon)
adentro2 = path.contains_points (puntos)
El código anterior informa los tiempos de ejecución significativamente más rápidos para el enfoque de matplotlib en comparación con el rastreo de rayos.
otras opciones
además de estos métodos, el El paquete de Ambiente diseñado específicamente para operaciones geométricas proporciona funciones eficientes para las verificaciones de Point-in-Polygon.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3