Abstände im Raum

Hesse.mws, H. Paulo, 25.1.99

> restart:with(plots):with(linalg):

Warning, new definition for norm

Warning, new definition for trace

>

Die Hesse-Form der Ebene; Abstandsberechnungen

Gegeben eine Ebene durch drei Punkte A,B und C:

> A:=[12,0,0]:B:=[0,6,0]:C:=[0,0,6]:

> x:=[x1,x2,x3]:

> n:=crossprod(B-A,C-A);

[Maple Math]

> n:=[1,2,2]:

> E:=dotprod(n,x-A)=0;#Die Koordinatenform von E

[Maple Math]

> nbetrag:=sqrt(dotprod(n,n));

[Maple Math]

> EH:=dotprod(n,x-A)/nbetrag=0;#Die Hesse-Form

[Maple Math]

Der Normalenvektor n zeigt vom Ursprung zur Ebene, da es in HNF -4 heißt. Andernfalls muß man die Gleichung mit -1 multiplizieren. Der Abstand des Ursprungs von dieser Ebene ist 4.

> P:=[4,5,6]:

> d1:=subs(x1=P[1],x2=P[2],x3=P[3],lhs(EH));

[Maple Math]

Dies ist der Abstand des Punktes P von der Ebene E. P und der Ursprung liegen auf verschiedenen Seiten von E, da d>0

> P:=[-3,5,-6]:

> d1:=subs(x1=P[1],x2=P[2],x3=P[3],lhs(EH));

[Maple Math]

Dieser Punkt liegt auf der gleichen Seite von E wie der Ursprung. Sein Abstand von E beträgt 17/3.

Den Abstand eine zu E parallelen Ebene oder Geraden berechnet man ganz genauso, indem man einen Punkt dieser Ebene bzw. Gerade in die HNF von E einsetzt (genauer: in die linke Seite).

Lote; Spiegelung eine Punktes an einer Ebene

Statt die Hesse-Form zu verwenden, kann man auch die Gerade durch den gegebenen Punkt, die in Richtung n verläuft, mit E schneiden:

> P:=[4,5,6]:
g:=evalm(P+t*n);

[Maple Math]

> glg:=subs(x1=g[1],x2=g[2],x3=g[3],EH);

[Maple Math]

> loes:=solve(glg);

[Maple Math]

> L:=map2(subs,t=loes,g);

[Maple Math]

Dies ist der Lotfußpunkt des Lotes von P auf E.

> L-P;

[Maple Math]

Wie immer: wenn man map2 benutzt, entsteht ein Vektor. Die anderen Elemente sind Listen. Man barucht zur Addition gleichartige Objekte.

> L:=convert(L,list);

[Maple Math]

> L-P;

[Maple Math]

> d:=norm(L-P,2);#Abstand P von E wie oben

[Maple Math]

> PS:=P+2*(L-P);#Das Spiegelbild von P an E

[Maple Math]

Kontrolle: Abstand des Punktes PS von E ist gleich Abstand des Punktes P von E. Ferner ist der Verbindungsvektor von P nach PS orthogonal zu E, seine Länge ist gleich dem doppelten Abstand:

> d2:=subs(x1=PS[1],x2=PS[2],x3=PS[3],lhs(EH));

[Maple Math]

Aha, PS liegt auf der anderen Seite von E wie P!

> verbind:=PS-P;

[Maple Math]

> norm(verbind,2);

[Maple Math]

Grafische Darstellung:

> A1:=[10,10,solve(subs(x1=10,x2=10,E))];

> A2:=[-10,10,solve(subs(x1=-10,x2=10,E))];
A3:=[-10,-10,solve(subs(x1=-10,x2=-10,E))];
A4:=[10,-10,solve(subs(x1=10,x2=-10,E))];

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

> p1:=polygonplot3d([A1,A2,A3,A4],style=patch,color=grey):
p2:=polygonplot3d([P,L,PS],color=red):
### WARNING: the definition of the type `symbol` has changed'; see help page for details
p3:=polygonplot3d([P,L,PS],color=blue,style=point,symbol=circle):

display(p1,p2,p3);

[Maple Plot]

>

Abstand Punkt - Gerade; Abstand paralleler Geraden

Da es im Raum keine Hesse-form für die Gerade gibt, müssen wir (ähnlich wie im vorigen Abschnitt) das Lot von dem Punkt auf die Gerade bestimmen, um den Abstand des Punktes Q von der Geraden g zu ermitteln.

Die Gerade sei z.B. durch zwei Punkte A und b gegeben:

> A:=[4,3,3]:B:=[6,4,2]:
Q:=[2,-3,5]:

> g:=A+t*(B-A);

[Maple Math]

> h:=Q-g;#Die Verbindung zwischen Q und einem beliebigen Punkt von g

[Maple Math]

> glg:=dotprod(B-A,evalm(h))=0;

[Maple Math]

> loes:=solve(glg);

[Maple Math]

> L:=subs(t=loes,g);#Der Lotfußpunkt;

[Maple Math]

> d:=norm(Q-L,2);

[Maple Math]

Wie im vorigen Abschnitt kann man auch den Punkt Q an der Geraden g spiegeln, indem man den Vekor 2*QL von Q aus abträgt:

> QS:=Q+2*(L-Q);

[Maple Math]

Kontrolle: Der Verbindungsvektor Q-QS ist senkrecht zum Richtungsvektor von g und hat den Betrag 2*d:

> v:=QS-Q;

[Maple Math]

> dotprod(B-A,v);norm(v,2);

[Maple Math]

[Maple Math]

Man kann auch ganz anders zur Bestimmung von L vorgehen: man schneidet die Gerade g mit der Hilfsebene H, die durch Q geht und die orthogonal zu g ist, d.h. deren Normalenvektor B-A ist:

> H:=dotprod(B-A,x-Q)=0;

[Maple Math]

> solve(subs(x1=evalm(g)[1],x2=evalm(g)[2],x3=evalm(g)[3],H));

[Maple Math]

Dies ist der gesuchte Wert von t. Der Rest geht geuauso wie mit der anderen Methode.

Zur Bestimmung des Abstandes paralleler Geraden nimmt man einen Punkt der zweiten Geraden und bestimmt wie gezeigt dessen Abstand von der ersten Geraden.

Zeichnerische Darstellung der Geraden g und der Punkte Q, QS und L:

> A1:=subs(t=-20,g);

[Maple Math]

> A2:=subs(t=20,g);

[Maple Math]

> p1:=polygonplot3d([A1,A2],color=green):
p2:=polygonplot3d([Q,QS],color=red):
### WARNING: the definition of the type `symbol` has changed'; see help page for details
p3:=polygonplot3d([Q,L,QS],style=point,symbol=circle,color=blue):
display(p1,p2,p3,view=[-10..10,-10..10,-10..10]);

[Maple Plot]

>

Abstand windschiefer Geraden

Hier muß man das gemeinsame Lot bestimmen. Oder aber den Abstand der beiden Parallelen Ebenen, die jeweils eine der Geraden enthalten und parallel zur anderen Geraden sind.

> P:=[3,-1,1]:u:=[1,1,1]:
Q:=[1,2,3]:v:=[2,2,1]:
g:=P+s*u;
h:=Q+t*v;

[Maple Math]

[Maple Math]

>

Der allgemeine Verbindungsvektor zwischen g und h muß sowohl zu g als auch zu orthogonal sein:

> glg1:=dotprod(g-h,u)=0;

[Maple Math]

> glg2:=dotprod(g-h,v)=0;

[Maple Math]

> loes:=solve({glg1,glg2});

[Maple Math]

> Lg:=subs(s=7/2,g);Lh:=subs(t=3/2,h);#Die beiden Lotfußpunkte

[Maple Math]

[Maple Math]

> d:=norm(Lg-Lh,2);

[Maple Math]

Grafische Darstellung:

> A1:=subs(s=-20,g);A2:=subs(s=20,g);
B1:=subs(t=-20,h);B2:=subs(t=20,h);

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

> p1:=polygonplot3d([A1,A2],color=green):
p2:=polygonplot3d([B1,B2],color=green):
p3:=polygonplot3d([Lg,Lh],color=red):
### WARNING: the definition of the type `symbol` has changed'; see help page for details
p4:=polygonplot3d([Lg,Lh],style=point,symbol=circle,color=blue):
display(p1,p2,p3,p4,view=[-15..15,-10..10,-5..15]);

[Maple Plot]

Die beiden Hilfsebenen:

> n:=crossprod(u,v);

[Maple Math]

> H1:=dotprod(n,x-P)=0;

[Maple Math]

> H2:=dotprod(n,x-Q)=0;

[Maple Math]

Hesse-Form dieser Ebenen:

> HNF1:=(-1)*dotprod(n,x-P)/norm(n,2)=0;

[Maple Math]

> HNF2:=dotprod(n,x-Q)/norm(n,2)=0;

[Maple Math]

> d:=subs(x1=P[1],x2=P[2],x3=P[3],lhs(HNF2));

[Maple Math]

Wenn gewünscht, kann man auch noch die beiden Hilefsebenen zusätzlich grafisch darstellen: Da sie parallel zur x3-Achse verlaufen (n ist orthogonal zu [0,0,1]!), benötigt man jetzt Hilfspunkte in z.B. der x1-x3-Ebene:

> R1:=[100,solve(subs(x1=100,x3=100,H1)),100]:
R2:=[-100,solve(subs(x1=-100,x3=100,H1)),100]:
R3:=[-100,solve(subs(x1=-100,x3=-100,H1)),-100]:
R4:=[100,solve(subs(x1=100,x3=-100,H1)),-100]:

> S1:=[100,solve(subs(x1=100,x3=100,H2)),100]:
S2:=[-100,solve(subs(x1=-100,x3=100,H2)),100]:
S3:=[-100,solve(subs(x1=-100,x3=-100,H2)),-100]:
S4:=[100,solve(subs(x1=100,x3=-100,H2)),-100]:

> p5:=polygonplot3d([R1,R2,R3,R4],style=patch, color=grey):
p6:=polygonplot3d([S1,S2,S3,S4],style=patch, color=grey):
display(p1,p2,p3,p4,p5,p6,view=[-5..15,-10..15,-5..15]);

[Maple Plot]

>