Berührkegel

kegel.mws, H. Paulo, 23.2.99

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

Warning, new definition for norm

Warning, new definition for trace

Gegeben Mittelpunkt und Radius einer Kugel sowie ein Punkt P außerhalb der Kugel.
gesucht: der Berührkegel aller Tangenten, die man von P aus an K legen kann.

> x:=[x1,x2,x3];
M:=[4,5,3];r:=3;P:=[7,3,4];

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

Polarebene zu P:

> E:=dotprod(P-M,x-M)=r^2;

[Maple Math]

> g:=P+s*(M-P);#Die Gerade durch P und M

[Maple Math]

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

[Maple Math]

> MS:=subs(s=gschnittE,g);#Mittelpunkt des Berührkreises

[Maple Math]

> h:=evalm(P+s*(MS-P));

[Maple Math]

> rs:=sqrt(r^2-(norm(M-MS,2))^2);#Radius des Berührkreises

[Maple Math]

> p1:=tubeplot(h,s=0..1,radius=s*rs,grid=[20,20],color=red):

Nun noch die Kugel:

> p2:=tubeplot([M[1],M[2],M[3]+s],s=-r..r,radius=sqrt(r^2-s^2),grid=[20,20],color=blue):

> display(p2,p1);

[Maple Plot]

Wenn man die Darstellung der Kugel in derselben Achsnrichtung wie den Kegel haben möchte, stellt man sie längs der Geraden g dar: Dazu benötigt man noch die beiden Schnittpunkte von g mit der Kugel:

> K:=dotprod(x-M,x-M)=r^2;

[Maple Math]

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

[Maple Math]

> M1:=evalm(subs(s=gschnittK[1],g));

[Maple Math]

> j:=evalm(M+s*(convert(M1,list)-M));#die Gerade durch M

[Maple Math]

> d:=norm(j-M,2);




[Maple Math]

> p3:=tubeplot(j,s=-1..1,radius=sqrt(r^2-d^2),grid=[20,20],color=green):;

> display(p1,p3);

[Maple Plot]

Ergänzung: schränkt man bei der Darstellung des Kegel den Bereich für s weiter ein. so erhält man einen Kegelstumpf oder, wenn man den Bereich erweitert, einen Doppelkegel:

> tubeplot(h,s=0.5..1,radius=s*rs,grid=[20,20],scaling=constrained,grid=[20,20],color=magenta);

[Maple Plot]

> tubeplot(h,s=-1..1,radius=s*rs,grid=[20,20],scaling=constrained,grid=[20,20]);

[Maple Plot]

>