2017-09-29 2 views
0

Ich habe eine Ebene mit bekannten vier Koordinaten und eine Linie mit zwei bekannten Koordinaten wie in der Abbildung gezeigt. enter image description hereSo finden Sie den Schnittpunkt einer Linie in einer Ebene im 3D-Raum mit MATLAB

Die vier Koordinaten der Ebene sind

A = (-5 -5 -8) 
B = (15 15 -8) 
C = (15 15 12) 
D = (-5 -5 12) 

Die Koordinaten der Linie sind

M = (1.3978,40,6.1149) 
N = 4.3943, 4.8078,0.3551) 

In dieser Fall Linie und Ebene schneidet, wie kann ich dann finden Punkt Schnittpunkt von Linie und Ebene im 3D-Raum mit MATLAB? oder Wie kann ich überprüfen, ob sich beide schneiden oder nicht?

Ich habe versucht Lösung zu finden, Video folgenden tutorial to find equation of plane from three points und tutorial for finding point where line intersects a plain

Aber in meinem Fall Gleichung Ebene Null ist. Also bin ich verwirrt. Kann mir jemand helfen?

Vielen Dank im Voraus, Manu

Antwort

1

würde ich einfache lineare Algebra den Schnittpunkt zu finden.

Lassen n auf der Ebene normal sein (Sie es als ein Vektorprodukt sagen N = cross(AB, AD) berechnen kann, dann Einheit n = N/|N| wo |N| = sqrt(dot(N, N)) Länge des Vektors N. ist

Sie können die folgende Funktion aus matlabcentral verwenden, die alle Abdeckungen die Eckt Fälle auch (wie beispielsweise, wenn die Leitung zu der Ebene parallel ist), und beschreibt sie in den Kommentaren

Beispiel aus Kommentar:.

A =[ -6.8756 39.9090 10.0000],B =[ -6.0096 40.4090 10.0000],C =[ -6.0096 40.4090 11.0000],D=[ -6.8756 39.9090 11.0000]; 
P0 =[ 1.3978 40.0000 6.1149],P1 =[ 4.3943 -4.8078 0.3551]; 

Ich weiß nicht, wo Sie einen Fehler gemacht haben, aber ich bin ziemlich sicher, dass es einen Schnittpunkt außerhalb Ihres Segments gibt. Du solltest also check=3 haben. Hier ist der Ausgang des Schritt für Schritt-Betrieb:.

>> AB = B-A 
AB = 0.8660 0.5000   0 
>> AD = D-A 
AD = 0  0  1 
>> n = cross(AB,AD)/sqrt(dot(cross(AB,AD),cross(AB,AD))) 
n = 0.5000 -0.8660   0 
>> [I,check]=plane_line_intersect(n,A,P0,P1) 
I = 1.0961 44.5116 6.6948 
check = 3 

es die gleichen Ergebnisse mit jedem anderen Punkt erzeugt (B, C oder D) geleitet, in check=3 bedeutet, dass es einen Schnittpunkt I, der außerhalb des ist P01-Segment.

Beachten Sie als Verifikationsschritt, dass normales n Nz = 0 hat, was bedeutet, dass es senkrecht zur Z-Achse steht. Die einzige Möglichkeit, die eine Linie nicht schneidet, ist, wenn sie parallel zur Z-Achse wäre (und daher wäre der Vektor P01 parallel zu Z und hätte eine Null-Z-Komponente).

Ihre P01 ist nicht mit Z ausgerichtet:

>> P01 = P1 - P0 
P01 = 2.9965 -44.8078 -5.7598 
+0

Vielen Dank für Ihre Antwort – manoos

+0

, wenn ich für ebene Punkte A = [-6,8756 39,9090 10,0000], B = [-6,0096 40,4090 10,0000] überprüft, C = [-6.0096 40.4090 11.0000], D = [-6.8756 39.9090 11.0000] und Linienpunkte P0 = [1.3978 40.0000 6.1149], P1 = [4.3943 -4.8078 0.3551], ergibt sich bei Verwendung Ihrer Funktion check = 1 und I = [-21.2205 31.6268 -6.3689]. Eigentlich gibt es keine Überschneidung. Kannst du mir bitte erklären, warum es sich so ergibt? – manoos

+0

Sie benötigen nur 3 Punkte, um die Ebene zu definieren, 4 Punkte könnten nicht koplanar sein.Ihre sind, also ist das kein Problem. Wie auch immer, ich vermag es nicht, Ihre Ergebnisse und Ergebnisse zu reproduzieren. Bitte sehen Sie sich die Ausgabe an, die ich mit Ihren Eingaben erhalte. Hoffentlich werden Sie einen Fehler entdecken. –

Verwandte Themen