Suite

Intersection entre la surface et le rayon


Je suis intéressé à trouver l'intersection d'un rayon et d'une surface dans ArcObjects.

Je connais déjà deux solutions. La première solution consiste à utiliser leLocaliserméthode de ISurface :

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

L'autre solution consiste à utiliser leObtenirLigneDeVueméthode de IGeoDatabaseBridge (où la variablepointest un point calculé le long du trajet du rayon) :

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

Étonnamment, leObtenirLigneDeVueméthode est beaucoup plus rapide que laLocaliserméthode. Mais je cherche une solution encore plus rapide.

Ma question est donc la suivante : existe-t-il d'autres moyens (et plus rapides) de trouver l'intersection entre un rayon et une surface ? Ou pouvez-vous m'indiquer la direction de la littérature qui explique les calculs dont j'ai besoin pour faire le mien ?

Merci!

METTRE À JOUR: J'ai commencé le processus de création de mon propre algorithme Line of Sight. J'ai publié la description de ma solution actuelle dans un article de blog. Merci encore pour toutes les suggestions.


Si vous voulez vraiment rouler le vôtre, il semble que vous ayez besoin d'un lanceur de rayons/traceur de rayons. Un article vieux de dix ans décrit l'état de l'art (à l'époque) : vous devez convertir la surface en TIN et créer une structure de données 3D (les auteurs proposent un arbre BSP de voxels) pour accélérer la recherche des intersections. Vous pourriez peut-être vous procurer un moteur de lancer de rayons et le déployer.


Voir la vidéo: Valmistanut ainutlaatuisen instrumentin. DIY-tylsät työkalunpitimet. (Octobre 2021).