Google Classroom
GeoGebraGeoGebra Classroom

Klein bottle with unit normal vectors and Mobius band

Script

#------------------------------------------------- # I know it is a little messy but it works :) #------------------------------------------------- #------------------------------------------------- # Define parameters #------------------------------------------------- size = 0.5 a = 3 b = 4 c = 2 #------------------------------------------------- # Define components for Klein bottle #------------------------------------------------- F0(x, y) = size *( (a (1+ sin(x)) + c (1 - cos(x)/2) cos(y) ) cos(x) ) G0(x, y) = size * ( (b + c (1 - cos(x)/2) cos(y) ) sin(x) ) H0(x, y) = size * ( c (1 - cos(x)/2) sin(y) ) F1(x, y) = size *( a (1+ sin(x)) cos(x) - c (1 - cos(x)/2) cos(y) ) G1(x, y) = size * ( b sin(x) ) H1(x, y) = size * ( c (1 - cos(x)/2) sin(y) ) #------------------------------------------------- # The Klein bottle is defined with 2 pieces #------------------------------------------------- Klein0 = Surface( F0(u, v), G0(u, v), H0(u, v), u, 0, pi, v, 0, 2 pi ) Klein1 = Surface( F1(u, v), G1(u, v), H1(u, v), u, pi, 2 pi, v, 0, 2 pi ) #------------------------------------------------- # Now let's calculate normal vectors #------------------------------------------------- #a1 dF0x = Derivative(F0, x) #b1 dF0y = Derivative(F0, y) #a2 dG0x = Derivative(G0, x) #b2 dG0y = Derivative(G0, y) #a3 dH0x = Derivative(H0, x) #b3 dH0y = Derivative(H0, y) #a1 dF1x = Derivative(F1, x) #b1 dF1y = Derivative(F1, y) #a2 dG1x = Derivative(G1, x) #b2 dG1y = Derivative(G1, y) #a3 dH1x = Derivative(H1, x) #b3 dH1y = Derivative(H1, y) #(a2b3 - a3b2)i + (a3b1-a1b3)j + (a1b2-a2b1)k P0x = dG0x * dH0y - dH0x * dG0y P0y = dH0x * dF0y - dF0x * dH0y P0z = dF0x * dG0y - dG0x * dF0y #(a2b3 - a3b2)i + (a3b1-a1b3)j + (a1b2-a2b1)k P1x = dG1x * dH1y - dH1x * dG1y P1y = dH1x * dF1y - dF1x * dH1y P1z = dF1x * dG1y - dG1x * dF1y norm0 = sqrt( P0x^2 + P0y^2 + P0z^2 ) norm1 = sqrt( P1x^2 + P1y^2 + P1z^2 ) #------------------------------------------------- # These will give the unitary normal vectors #------------------------------------------------- uN0x = P0x/norm0 uN0y = P0y/norm0 uN0z = P0z/norm0 uN1x = P1x/norm1 uN1y = P1y/norm1 uN1z = P1z/norm1 #------------------------------------------------- # Now let's calcualte points to plot vectors #------------------------------------------------- Ax=Slider(0, 4pi, 0.01, 1, 120, false, true, false, false) #Ay=Slider(0, 2pi, 0.01, 1, 120, false, true, false, false) n= 25 Execute(Sequence("A"+i+" = Mod("+i+" 4 pi/n + Ax, 4 pi)", i, 1, n)) #If(Ax < π, Klein0(Ax, Ay), Klein1(Ax, Ay)) Execute(Sequence("B"+i+" = If(A"+i+" < pi, Klein0(A"+i+", pi/2), Klein1(A"+i+", pi/2))", i, 1, n)) Execute(Sequence("SetDynamicColor(B"+i+", "+i+"/n, 1, 1)", i, 1, n)) Execute(Sequence("ShowLabel(B"+i+", false)", i, 1, n)) Execute(Sequence("SetVisibleInView(B"+i+", 1, false)", i, 1, n)) #If(Ax < π, ( uN0x(Ax, pi/2), uN0y(Ax, pi/2), uN0z(Ax, pi/2) ), If( Ax < 2 pi, ( uN1x(Ax, pi/2), uN1y(Ax, pi/2), uN1z(Ax, pi/2) ), If( Ax < 3 pi, ( -uN0x(Ax, pi/2), -uN0y(Ax, pi/2), -uN0z(Ax, pi/2) ), ( -uN1x(Ax, pi/2), -uN1y(Ax, pi/2), -uN1z(Ax, pi/2) ) ) ) ) Execute(Sequence("C"+i+" = If(A"+i+" < π, ( uN0x(A"+i+", pi/2), uN0y(A"+i+", pi/2), uN0z(A"+i+", pi/2) ), If( A"+i+" < 2 pi, ( uN1x(A"+i+", pi/2), uN1y(A"+i+", pi/2), uN1z(A"+i+", pi/2) ), If( A"+i+" < 3 pi, ( -uN0x(A"+i+", pi/2), -uN0y(A"+i+", pi/2), -uN0z(A"+i+", pi/2) ), ( -uN1x(A"+i+", pi/2), -uN1y(A"+i+", pi/2), -uN1z(A"+i+", pi/2) ) ) ) )", i, 1, n)) Execute(Sequence("ShowLabel(C"+i+", false)", i, 1, n)) Execute(Sequence("SetVisibleInView(C"+i+", 1, false)", i, 1, n)) Execute(Sequence("SetVisibleInView(C"+i+", -1, false)", i, 1, n)) #------------------------------------------------- # Finally, we plot vectors with colors :) #------------------------------------------------- #D = Translate(Vector((0,0,0), C), A) Execute(Sequence("D"+i+" = Translate(Vector((0,0,0), C"+i+"), B"+i+")", i, 1, n)) Execute(Sequence("ShowLabel(D"+i+", false)", i, 1, n)) Execute(Sequence("SetVisibleInView(D"+i+", 1, false)", i, 1, n)) Execute(Sequence("SetDynamicColor(D"+i+", "+i+"/n, 1, 1)", i, 1, n))