5 votos

Intersección entre superficie y rayos

Estoy interesado en encontrar la intersección de un Rayo y una Superficie de ArcObjects.

Ya sé de dos soluciones. La primera solución es el uso de la Locate método de ISurface:

Dim intersectionPoint As IPoint = surface.Locate(ray, hint)

La otra solución es el uso de la GetLineOfSight método de IGeoDatabaseBridge (donde la variable point se calcula un punto a lo largo de la trayectoria del rayo):

Dim geoDatabaseBridge2 As IGeoDatabaseBridge2 = New GeoDatabaseHelper
geoDatabaseBridge2.GetLineOfSight(surface, baseRay.Origin, point, intersectionPoint, Nothing, Nothing, Nothing, False, False)

Sorprendentemente, el GetLineOfSight método es mucho más rápido que el locate método. Pero estoy en busca de una más rápida solución.

Así que mi pregunta es: ¿hay algún otro (y más rápido) maneras de encontrar la intersección entre un rayo y una superficie? O puede que me apunte en la dirección de literatura que explica los cálculos necesito rodar mis propios?

Gracias!

ACTUALIZACIÓN: He iniciado el proceso de crear mi propia Línea de Visión del algoritmo. He publicado mi solución actual descripción en una entrada de blog. Gracias de nuevo por todas las sugerencias.

9voto

cjstehno Puntos 131

Si usted realmente desea rodar su propio, suena como usted puede necesitar un rayo de caster/trazador de rayos. Un niño de diez años papel describe el estado del arte (en aquel entonces): usted tiene que convertir la superficie en una superficie, y crear un 3D de la estructura de los datos (los autores proponen un árbol BSP de voxels) para agilizar la búsqueda de las intersecciones. Tal vez usted puede conseguir el asimiento de un trazado de rayos motor y despliegue.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X