Finde die Entfernung von einem 3D-Punkt zu einem Liniensegment

8

Ich habe einen 3D-Punkt P und ein Liniensegment, definiert durch A und B (A ist der Startpunkt des Liniensegments, B das Ende).

Ich möchte den kürzesten Abstand zwischen P und der Linie AB berechnen.

Die Entfernung eines Punktes zu einer unendlichen Linie zu berechnen war einfach, da es sich um eine Lösung auf Wolfram Mathworld , und ich habe das implementiert, aber ich muss dies für eine Zeile mit endlicher Länge tun.

Ich habe es nicht geschafft, eine zuverlässige Lösung dafür in 3D zu finden, nachdem ich mich viel umgesehen habe.

Ich habe Algorithmen implementiert, um das Skalarprodukt, das Kreuzprodukt, die Magnitude usw. in C ++ mit einer Struktur zu berechnen, die die Floats x, y und z enthält.

Pseudocode, Links oder Code in so ziemlich jeder Sprache dafür wäre großartig.

    
oggmonster 01.02.2011, 02:22
quelle

4 Antworten

5

Das ist ziemlich einfach. Behandeln Sie Ihr Liniensegment zunächst so, als wäre es ein Unendliches und suchen Sie den Punkt R auf der Linie, wo ein senkrechter Strahl von der Linie bei R durch Ihren Punkt P verläuft. Wenn R zwischen A und B auf der Linie liegt, dann die kürzeste Entfernung ist PR. Ansonsten ist die Küstenentfernungsentfernung kleiner als die von PA und PB.

    
ThomasMcLeod 01.02.2011 02:42
quelle
4

Java-Funktion

%Vor%

gist des gesamten (selbständigen) R3 3D-Algebra-Pakets: Ссылка

Teil der Open-Source-Bibliothek Ссылка

    
Afonso Santos 05.04.2016 11:30
quelle
1

Ich weiß, diese Frage ist wenig alt, aber um anderen zu helfen:

Hier haben Sie einen Link zum Pseudocode (sehen Sie unter Entfernung eines Punktes zu einem Ray oder Segment ):

Pseudocode und C ++ - Implementierung

Links zu mehrsprachigen Implementierungen (Schauen Sie unter Implementierte Implementierungen nach):

C, VBA, Java und andere Implementierungen

    
elrado 27.09.2016 07:15
quelle

Tags und Links