A Computational Geometry problema:
El punto P0
se elige al azar en un borde (por ejemplo, EB
) de un polígono (por ejemplo, BCDE
), para encontrar posibles puntos (es decir, P1,P2,P3,...
) en otro bordes basados en la distancia dada (es decir, r
). La siguiente demostración muestra una solución al encontrar intersecciones entre el círculo centrado en el punto P0
y los bordes del polígono. Entonces el problema básicamente podría resolverse mediante el análisis de intersección Circle--Line-Segment
.intersecciones Circle-Polygon
Me pregunto ¿Hay algún otro método más eficaz para este problema muy simple en términos de costo de cálculo? El proceso se evaluará varios million times
por lo que cualquier mejora es de interés.
- la solución final se beneficiará de Python poder;
- el cómputo central estará en Fortran si es necesario.
actualizaciones:
, gracias por sus comentarios. Por favor, considere mis comentarios sobre los comentarios que ayudan a aclarar la pregunta más. No estoy dispuesto a repetirlos aquí, alentándome a considerar todos los comentarios y respuestas;).
Acabo de implementar el método de Circle--Line-Segment Intersection
basado en el algoritmo encontrado [here]. En realidad, lo adapté para trabajar con segmentos de línea. El punto de referencia del algoritmo implementado en Python es como sigue:
El número de segmentos de línea es: 100,000
y el sistema es de escritorio habitual. El tiempo transcurrido es: 15 seconds
. Espero que estos sean útiles para dar una idea del costo de cálculo. La implementación de core en Fortan podría mejorar el rendimiento significativamente.
Sin embargo, la traducción es el último paso.
¿La distancia 'r' de todas las consultas es la misma? ¿Podemos contar con que el polígono sea convexo? –
@ BorisStrandjev Para nuestro problema, todos los polígonos son convexos. 'r' podría variar para cada iteración, por lo que podría variar, pero es constante para cada polígono individualmente. – Developer
¿Y los millones de consultas se realizan en un único polígono o en diferente? –