Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

Looking at 3D from a 2D perspective (in German)

Views: 931
License: OTHER
Image: ubuntu2004
Kernel: SageMath 9.2

Dieses Material ist lizensiert unter der Lizemz Creative Commons Attribution-ShareAlike 4.0 International License Creative Commons License.

Vorbetrachtungen im 3-dimensionalen Raum

Betrachten wir zunächst das analoge Problem der Untersuchung einer 3-dimensionalen Fläche aus der Perspektive eines 2-dimensionalen Wesens - nennen wir es R2D2 - das nur die 2 Dimensionen einer Ebene EE wahrnehmen kann. Nehmen wir an, dass sich die Ebene EE durch den 3-dimensionalen Raum bewegt und dabei zeitweise die durch diese Gleichung FlFl definierte Fläche schneidet. Betrachten wir z.B. die durch die folgende Gleichung implizit definierte Fläche.
var('d,p,q,u,x,y') assume(x,'real');assume(y,'real');assume(u,'real') dmin=-2;dmax=2 pmin=-4;pmax=4 qmin=-4;qmax=4 xmin=-2;xmax=2 ymin=-2;ymax=2 umin=-2;umax=2 # Ändern Sie das Folgende, um eine andere Definition zu verwenden #f(x,y,u)=(u-x*y) #f(x,y,u)=x^3 + y^2 - u^2 f(x,y,u)=x^2 + y^2 + u^2 + cos(4*x) + cos(4*y) + cos(4*u) - 0.2 #f(x,y,u)=x^2+y^2+u^2-1 Fl=f(x,y,u)==0 show(LatexExpr("Fl: "),Fl) def N3(x): return N(x,digits=3)
Fl:u2+x2+y2+cos(4u)+cos(4x)+cos(4y)0.200000000000000=0\renewcommand{\Bold}[1]{\mathbf{#1}}Fl: u^{2} + x^{2} + y^{2} + \cos\left(4 \, u\right) + \cos\left(4 \, x\right) + \cos\left(4 \, y\right) - 0.200000000000000 = 0

Als erstes legen wir nun die Richtung fest, in der sich die Ebene im 3-dimensionalen Raum bewegt.

@interact def _(n_x1=slider(xmin,xmax,default=1,label="$n_x$",step_size=0.1),n_y1=slider(ymin,ymax,default=1,label="$n_y$",step_size=0.1),n_u1=slider(umin,umax,default=1,label="$n_u$",step_size=0.1)): global n_x n_x=n_x1 global n_y n_y=n_y1 global n_u n_u=n_u1 global vn vn=vector([n_x,n_y,n_u]) show(LatexExpr("\\vec{n} = \\begin{pmatrix} n_x \\\\ n_y \\\\ n_u\\end{pmatrix} ="),latex(n(vn.column(),digits=2)))

Wir bestimmen für diesen Vektor n\vec{n} den zugehörigen Betrag dn=nd_n = | \vec{n}| und Einheitsvektor en\vec{e_n}, so dass n=dnen\vec{n}=d_n\vec{e_n} ist. Dabei ist XYY en=1dnn=(enxenyenu)\vec{e_n}=\frac{1}{d_n}\vec{n} = \left( \begin{array}{c} e_{nx} \\ e_{ny} \\ e_{nu} \end{array}\right).

Wir bestimmen für diesen Vektor n\vec{n} den zugehörigen Betrag dn=nd_n = | \vec{n}| und Einheitsvektor en\vec{e_n}, so dass n=dnen\vec{n}=d_n\vec{e_n} ist. Dabei ist en=1dnn=(enxenyenu)\vec{e_n}=\frac{1}{d_n}\vec{n} = \begin{pmatrix}e_{nx} \\ e_{ny} \\e_{nu}\end{pmatrix}.

d_n=vn.norm() e_n=(1/d_n)*vn e_nx=e_n[0]; e_ny=e_n[1]; e_nu=e_n[2] show(LatexExpr("d_n="),N(d_n,digits=3),LatexExpr(", \\vec{e_n}="),N3(e_n.column()))
dn=1.73,en=(0.5770.5770.577)\renewcommand{\Bold}[1]{\mathbf{#1}}d_n= 1.73 , \vec{e_n}= \left(\begin{array}{r} 0.577 \\ 0.577 \\ 0.577 \end{array}\right)

Wir können nun die Ebene EE darstellen, in der unser 2-dimensionales Wesen R2D2 lebt. ne\vec{n_e} ist ein Normaleneinheitsvektor der Ebene und dnd_n ist der Abstand zwischen der Ebene und dem Koordinatenursprung. Die Lage dieser Ebene im 3-dimensionalen (x,y,u)(x,y,u)-Raum können wir mit der Hessesche Normalform beschreiben als Menge aller Punkte z\vec{z}, die der Gleichung zen=dn\vec{z}\cdot \vec{e_n} = d_n genügen; das dabei verwendete Produkt ist das Skalarprodukt. Die Ebene ist also durch die Angabe des Normalenvektors n\vec{n} eindeutig festgelegt.

from sage.manifolds.utilities import set_axes_labels gE_L(x,y,u)=e_nx*x+e_ny*y+e_nu*u av=arrow(vector([0,0,0]),vn,color="green") E=implicit_plot3d(gE_L(x,y,u)==d_n,(x,xmin,xmax),(y,ymin,ymax),(u,umin,umax),opacity=0.5) plot=av+E plot1=set_axes_labels(plot,'x','y','u', color='red') show(plot1,viewer="threejs")

Die durch FlFl definierte Fläche (grün) können wir zusammen mit der Ebene (blau) darstellen. Die Bewegung der Ebene können wir darstellen, indem wir den Abstand d der Ebene zum Koordinatenursprung verändern und die Ebene EdE_d betrachten, die durch die Gleichung zen=d\vec{z}\cdot \vec{e_n} = d definiert wird:

show(LatexExpr("Fl: "),Fl) @interact def _(d1=slider(-dmax,dmax,default=d_n,label="$d_n$",step_size=0.1)): global d_n d_n=d1 avd=arrow(vector([0,0,0]),vector([d1*e_nx,d1*e_ny,d1*e_nu]),color="green") Ed=implicit_plot3d(gE_L==d1,(x,xmin,xmax),(y,ymin,ymax),(u,umin,umax),opacity=0.5) plotFl=implicit_plot3d(Fl,(x,xmin,xmax),(y,ymin,ymax),(u,umin,umax),color="green",opacity=0.3) plot=avd+Ed+plotFl plot1=set_axes_labels(plot,'x','y','u', color='red') show(plot1,viewer="threejs")
Fl:u2+x2+y2+cos(4u)+cos(4x)+cos(4y)0.200000000000000=0\renewcommand{\Bold}[1]{\mathbf{#1}}Fl: u^{2} + x^{2} + y^{2} + \cos\left(4 \, u\right) + \cos\left(4 \, x\right) + \cos\left(4 \, y\right) - 0.200000000000000 = 0

Geben wir nun R2D2 die Möglichkeit, die Kurve zu beschreiben, die unsere Fläche beim Durchgang durch dessen Welt - die Ebene EE - erzeugt. Dazu benötigt R2D2 ein Orthonormalsystem in EE als Koordinatensystem. Es gibt dafür viele mögliche Koordinatensysteme. Wir konstruieren eines indem wir ein 3-dimensionals Orthonormalsystem im Koordinatenursprung bilden, dessen einer Vektor en\vec{e_n} ist. Dieses Koordinatensystem verschieben wir dann längs n\vec{n} in die Ebene. Der Vektor en+n\vec{e_n}+\vec{n}, der dabei entsteht, wird nicht mehr benötigt, die übrigen 2 bilden ein Orthonormalsystem für EE. Die Ebene parallel zu EE, die durch den Koordinatenursprung geht, ist der Kern der linearen Abbildung zzen\vec{z}\mapsto \vec{z}\cdot \vec{e_n}, die durch die Matrix Mn=(enxenyenu)M_n=\begin{pmatrix}e_{nx} \\ e_{ny} \\e_{nu}\end{pmatrix} beschrieben wird. Wir berechnen eine Basis [a1,a2][\vec{a_1},\vec{a_2}] für diesen Kern.

M_n=matrix(RR,e_n.column()) B=M_n.kernel().basis() a_1=B[0];a_2=B[1] show(LatexExpr("\\vec{a_1}="),N3(a_1.column()),LatexExpr(",\\vec{a_2}="),N3(a_2.column()))
a1=(1.000.0001.00),a2=(0.0001.001.00)\renewcommand{\Bold}[1]{\mathbf{#1}}\vec{a_1}= \left(\begin{array}{r} 1.00 \\ 0.000 \\ -1.00 \end{array}\right) ,\vec{a_2}= \left(\begin{array}{r} 0.000 \\ 1.00 \\ -1.00 \end{array}\right)

[a1,a2][\vec{a_1},\vec{a_2}] orthonormalisieren wir mit dem Gram-Schmidtschen Orthonormalisierungsverfahren zu [b1,b2][\vec{b_1},\vec{b_2}].

BB,CC=matrix(RDF,B).gram_schmidt(orthonormal=True) b_1=BB[0]; b_2=BB[1] b_1x=b_1[0];b_1y=b_1[1];b_1u=b_1[2] b_2x=b_2[0];b_2y=b_2[1];b_2u=b_2[2] show(LatexExpr("\\vec{b_1}="),N3(b_1.column()),LatexExpr(",\\vec{b_2}="),N3(b_2.column()))
b1=(0.7070.0000.707),b2=(0.4080.8160.408)\renewcommand{\Bold}[1]{\mathbf{#1}}\vec{b_1}= \left(\begin{array}{r} -0.707 \\ -0.000 \\ 0.707 \end{array}\right) ,\vec{b_2}= \left(\begin{array}{r} 0.408 \\ -0.816 \\ 0.408 \end{array}\right)

Damit ist [b1,b2,en][\vec{b_1},\vec{b_2},\vec{e_n}] ein Orthonormalsystem für den 3-dimensionalen Raum, das wir mit dem Vektor n\vec{n} so verschieben können, dass b1\vec{b_1} und b2\vec{b_2} in die Ebene EE zu liegen kommen. Die Richtungsvektoren vom Endpunkt von n\vec{n} zu n+b1,n+b2\vec{n}+\vec{b_1}, \vec{n}+\vec{b_2} bilden dann ein Koordinatensystem KnK_n, dessen Koordinatenachsen in der Ebene EE liegen.

gE_L(x,y,u)=e_nx*x+e_ny*y+e_nu*u av=arrow(vector([0,0,0]),vn,color="green") ab_1=arrow(vn,vn+vector(b_1),color="yellow") ab_2=arrow(vn,vn+vector(b_2),color="yellow") ab_3=arrow(vn,vn+e_n,color="green") E=implicit_plot3d(gE_L(x,y,u)==d_n,(x,xmin,xmax),(y,ymin,ymax),(u,umin,umax),opacity=0.5) plot=av+E+ab_1+ab_2+ab_3 plot1=set_axes_labels(plot,'x','y','u', color='red') show(plot1,viewer="threejs")

Ein Punkt PP in der Ebene EE, der bezüglich KnK_n eine Darstellung (pq)\begin{pmatrix}p \\ q\end{pmatrix} hat, hat in dem Othonormalsystem für den 3-dimensionalen Raum, das aus KnK_{n} durch Ergänzung um den Richtungsvektor vom Endpunkt von n\vec{n} nach n+en\vec{n}+\vec{e_n} ergänzten (grünen) Vektor entsteht, die Darstellung (pq0)\begin{pmatrix}p \\ q \\ 0\end{pmatrix}. Wir können die Koordinaten von PP im kanonischen Koordinatensystem als n+(b1b2en)(pq0)\vec{n}+\begin{pmatrix} \vec{b_1} & \vec{b_2} & \vec{e_n}\end{pmatrix}\cdot\begin{pmatrix}p \\ q \\ 0\end{pmatrix} berechnen, also Px(p,q)=nx+b1xp+b2xqPy(p,q)=ny+b1yp+b2yqPu(p,q)=nu+b1up+b2uq P_x(p,q)=n_x+b_{1x}p+b_{2x}q \\ P_y(p,q)=n_y+b_{1y}p+b_{2y}q \\ P_u(p,q)=n_u+b_{1u}p+b_{2u}q also (PxPyPz)=n+(b1b2)(pq)\begin{pmatrix}P_x \\ P_y \\ P_z\end{pmatrix}=\vec{n}+\begin{pmatrix} \vec{b_1} & \vec{b_2}\end{pmatrix}\cdot\begin{pmatrix}p \\ q\end{pmatrix}. Bewegt sich die Ebene EE in Richtung des (grünen) Normalenvektors n=dnen\vec{n}=d_n\vec{e_n} durch den Raum, so ändert sich nur der Abstand d=dnd=d_n der Ebene vom Nullpunkt, unser Koordinatensystem KnK_n verschiebt sich und unsere Koordinatentransformation nimmt - für einen variablen Abstand d vom Ursprung - die folgende Form an. Px(d,p,q)=denx+b1xp+b2xqPy(d,p,q)=deny+b1yp+b2yqPu(d,p,q)=denu+b1up+b2uq P_x(d,p,q)=d\cdot e_{nx}+b_{1x}p+b_{2x}q \\ P_y(d,p,q)=d\cdot e_{ny}+b_{1y}p+b_{2y}q \\ P_u(d,p,q)=d\cdot e_{nu}+b_{1u}p+b_{2u}q

P_x(d,p,q)=d*e_nx+b_1x*p+b_2x*q P_y(d,p,q)=d*e_ny+b_1y*p+b_2y*q P_u(d,p,q)=d*e_nu+b_1u*p+b_2u*q

Ein Punkt PP der Ebene mit den Koordinaten (pq)\begin{pmatrix}p \\ q \end{pmatrix} bezüglich des Koordinatensystems KnK_n liegt genau dann auf der durch die Gleichung Fl3Fl_3 definierten Fläche, wenn f3(x,y,u)=0f_3(x,y,u)=0 ist, d.h. genau dann, wenn - das selbe unter Verwendung von p und q ausgedrückt - f(Px(d,p,q),Py(d,p,q),Pu(d,p,q))=0f(P_x(d,p,q),P_y(d,p,q),P_u(d,p,q))=0 ist.

Wir können nun den Durchschnitt der Fläche Fl3Fl_3 mit der Ebene EE darstellen. Sollten Sie hier nichts oder nur die Meldung "No contour levels were found" sehen, so schneidet die Ebene die Fläche nicht. In diesem Fall verschieben Sie die Ebene mit Hilfe des Schiebereglers.

@interact def _(d1=slider(dmin,dmax,default=d_n,label="$d_n$",step_size=0.1)): global d_n d_n=d1 Fl_L(p,q)=f(P_x(d1,p,q), P_y(d1,p,q), P_u(d1,p,q)) show(implicit_plot(Fl_L(p,q)==0,(p,pmin,pmax),(q,qmin,qmax)))

Hier können Sie den Durchgang der Ebene EE durch Fl3Fl_3 als Animation verfolgen. Die Berechnung kann etwas dauern.

frames=[implicit_plot(f(P_x(d1,p,q), P_y(d1,p,q), P_u(d1,p,q))==0,(p,pmin,pmax),(q,qmin,qmax)) for d1 in sxrange(dmin,dmax,0.5)] anim=animate(frames) show(anim)
WARNING: Some output was deleted.