Plotting Surfaces

How to print special characters: 
Pallettes ->Special Characters -> Letters-> 𝕒                                           (hover mouse over letter ℝ to find keyboard shortcut)  Similarly in the α 
                   -> Basic Math Assistant -> Basic Commands -> d∫Σ -> ∂   (hover over ∂ to find keyboard shortcut)
ℝ is [Esc]dsR[Esc]
 ϕ is [Esc]f[Esc] 
 π is [Esc]p[Esc]
 ∂ is [Esc]pd[Esc]
 ϕᵀ is [Esc]f[Esc] [Esc]tr[Esc]     (transpose of matrix ϕ) 
 (V^a) is  V [Ctrl]-  a [Ctrl][Space]
 
 Fraction: [Ctrl]/  , for example, for   (x/y)  type x[Ctrl]/y

Torus (T^2)

Embedding Equations:  x1-> x, x2-> y, x3-> z
The functions below give the parametric parametric representation:

x1[u_,v_] :=R1 Cos[u] + R2 Cos[u] Cos[v];
x2[u_,v_] :=R1 Sin[u] + R2 Sin[u] Cos[v];
x3[u_,v_] :=                         R2                 Sin[v];

{x1[u,v],x2[u,v],x3[u,v]}

Substitute anything for (u,v)

{x1[θ,ϕ],x2[θ,ϕ],x3[θ,ϕ]}

See the result in a more familiar form:

{x1[θ,ϕ],x2[θ,ϕ],x3[θ,ϕ]} // TraditionalForm

Towards obtaining numerical values: We pass numbers through the arguments of the functions x1,x2,x3.
Notice that R1 and R2 are still undefined symbols.

{x1[0.3,0.1],x2[0.3,0.1],x3[0.3,0.1]}

We obtain the same result by first evaluating the functions for (u,v), then substitute numerical values to the resulting expression.

{x1[u,v],x2[u,v],x3[u,v]} /. {u-> 0.3,v->0.1}

We obtain numerical results if we further substitute numerical values for R1, R2:

{x1[u,v],x2[u,v],x3[u,v]} /. {u-> 0.3,v->0.1, R1->3, R2-> 1}

This is the plot for the torus for R1=3 and R2=1. Notice that the plotting function needs to receive numerical results for the points, therefore we have to substitute the numerical values for R1 and R2.
ParametricPlot3D plots a surface if it is a two parameter plot.

ParametricPlot3D[{x1[u,v],x2[u,v],x3[u,v]}/.{R1->3,R2->1},{u,0,2π},{v,0,2π}]

ParametricPlot3D plots a curve, when it is a one parameter plot:

ParametricPlot3D[{Cos[t],Sin[t],0.1 t},{t,0,10 π}]

So, let’s plot a curve on the torus. A curve on the torus is a function
γ[t] = {u[t],v[t]}, then its embedding in (ℝ^3) is given by {x1[u[t],v[t]],x2[u[t],v[t]],x1[u[t],v[t]]}
In Mathematica, we obtain u[t], v[t] by taking the 1st and 2nd elements of the list {u[t],v[t]}, i.e.  u[t]=γ[t][[1]], v[t]=γ[t][[2]]

γ[t_] := {t,10 t} ;
ParametricPlot3D[{x1[ γ[t][[1]] ,γ[t][[2]] ],x2[ γ[t][[1]] ,γ[t][[2]] ],x3[ γ[t][[1]] ,γ[t][[2]] ]}/.{R1->3,R2->1},{t,0,2π}]

Let’s see the two plots together. We give names g1, g2 to the plots of the curve and the Torus respectively:

γ[t_] := {t,10 t} ; (*The curve*)
g1= ParametricPlot3D[{x1[ γ[t][[1]] ,γ[t][[2]] ],x2[ γ[t][[1]] ,γ[t][[2]] ],x3[ γ[t][[1]] ,γ[t][[2]] ]}/.{R1->3,R2->1},{t,0,2π}                          ]; (* The plot of the curve *)
g2 =ParametricPlot3D[{x1[     u,               v          ],x2[      u,              v]          ,x3[      u,               v          ]}/.{R1->3,R2->1},{u,0,2π},{v,0,2π}];(* The torus *)

(*Then we see the plots using the Show function, which shows graphics together. *)
Show[g1,g2]

Add some style to the plots: Make the torus transparent and the curve Red+Thick. Add options in the Show function to show only the surface without the axes.

γ[t_] := {t,10 t} ; (*The curve*)
g1= ParametricPlot3D[{x1[ γ[t][[1]] ,γ[t][[2]] ],x2[ γ[t][[1]] ,γ[t][[2]] ],x3[ γ[t][[1]] ,γ[t][[2]] ]}/.{R1->3,R2->1},{t,0,2π}                          , PlotStyle->{Red,Thick}]; (* The plot of the curve *)
g2 =ParametricPlot3D[{x1[     u          ,     v          ],x2[      u          ,    v          ],x3[      u          ,     v          ]}/.{R1->3,R2->1},{u,0,2π},{v,0,2π}, PlotStyle->Opacity[0.3]];(* The torus *)

(*Then we see the plots using the Show function, which shows graphics together. *)
Show[g1,g2, PlotRange-> All, Axes-> False, Boxed-> False]

Follow coordinate curves on the torus: First a u=π/3 line

γ[t_] := {π/3,t} ; (*The curve*)
g1= ParametricPlot3D[{x1[ γ[t][[1]] ,γ[t][[2]] ],x2[ γ[t][[1]] ,γ[t][[2]] ],x3[ γ[t][[1]] ,γ[t][[2]] ]}/.{R1->3,R2->1},{t,0,2π}                          , PlotStyle->{Red,Thick}]; (* The plot of the curve *)
g2 =ParametricPlot3D[{x1[     u          ,     v          ],x2[      u          ,    v          ],x3[      u          ,     v          ]}/.{R1->3,R2->1},{u,0,2π},{v,0,2π}, PlotStyle->Opacity[0.3]];(* The torus *)

(*Then we see the plots using the Show function, which shows graphics together. *)
Show[g1,g2, PlotRange-> All, Axes-> False, Boxed-> False]

See the u=const lines as u is varied. Use the manipulate function. It makes a series of plots, here depending on one parameter.
We simply wrap the contents of the previous cell around a
Manipulate[ ... ,{const,0,2π}]
function. Then the plots are shown by substitution of “const” by a value between the range {0,2π}

Manipulate[
γ[t_] := {const,t} ; (*The curve*)
g1= ParametricPlot3D[{x1[ γ[t][[1]] ,γ[t][[2]] ],x2[ γ[t][[1]] ,γ[t][[2]] ],x3[ γ[t][[1]] ,γ[t][[2]] ]}/.{R1->3,R2->1},{t,0,2π}                          , PlotStyle->{Red,Thick}]; (* The plot of the curve *)
g2 =ParametricPlot3D[{x1[     u          ,     v          ],x2[      u          ,    v          ],x3[      u          ,     v          ]}/.{R1->3,R2->1},{u,0,2π},{v,0,2π}, PlotStyle->Opacity[0.3]];(* The torus *)

(*Then we see the plots using the Show function, which shows graphics together. *)
Show[g1,g2, PlotRange-> All, Axes-> False, Boxed-> False],
{const,0,2π}]
(*you may need to abort the evaluation for the Manipulate to stop eating your CPU cycles: Evaluation -> Abort Evaluation - or [Alt]. *)

Let’s do the same for the v=const curves:

Manipulate[
γ[t_] := {t,const} ; (*The curve*)
g1= ParametricPlot3D[{x1[ γ[t][[1]] ,γ[t][[2]] ],x2[ γ[t][[1]] ,γ[t][[2]] ],x3[ γ[t][[1]] ,γ[t][[2]] ]}/.{R1->3,R2->1},{t,0,2π}                          , PlotStyle->{Red,Thick}]; (* The plot of the curve *)
g2 =ParametricPlot3D[{x1[     u          ,     v          ],x2[      u          ,    v          ],x3[      u          ,     v          ]}/.{R1->3,R2->1},{u,0,2π},{v,0,2π}, PlotStyle->Opacity[0.3]];(* The torus *)

(*Then we see the plots using the Show function, which shows graphics together. *)
Show[g1,g2, PlotRange-> All, Axes-> False, Boxed-> False],
{const,0,2π}]

The Cylinder

x1[u_,v_] :=Cos[u]; 
x2[u_,v_] :=Sin[u];
x3[u_,v_] :=v;

γ[t_] := {4t,t} ; (*The curve*)
g1= ParametricPlot3D[{x1[ γ[t][[1]] ,γ[t][[2]] ],x2[ γ[t][[1]] ,γ[t][[2]] ],x3[ γ[t][[1]] ,γ[t][[2]] ]},{t,0,2π}                          , PlotStyle->{Red,Thick}];
g2 =ParametricPlot3D[{x1[     u          ,     v          ],x2[      u          ,    v          ],x3[      u          ,     v          ]},{u,0,2π},{v,0,2π}, PlotStyle->Opacity[0.3]];

(*Then we see the plots using the Show function, which shows graphics together. *)
Show[g1,g2, PlotRange-> All, Axes-> False, Boxed-> False]

The u-v Coordinate curves. make a 2-parameter manipulate plot.

Manipulate[
γu[t_] := {u0,t} ; (*The curves*)
γv[t_] := {t,v0} ; 
gu= ParametricPlot3D[{x1[ γu[t][[1]] ,γu[t][[2]] ],x2[ γu[t][[1]] ,γu[t][[2]] ],x3[ γu[t][[1]] ,γu[t][[2]] ]},{t,0,2π}                          , PlotStyle->{Red  ,Thick}]; (* The plot of the curve *)
gv= ParametricPlot3D[{x1[ γv[t][[1]] ,γv[t][[2]] ],x2[ γv[t][[1]] ,γv[t][[2]] ],x3[ γv[t][[1]] ,γv[t][[2]] ]},{t,0,2π}                          , PlotStyle->{Blue,Thick}]; (* The plot of the curve *)
gs =ParametricPlot3D[{x1[        u          ,       v          ],x2[        u          ,       v          ],x3[        u          ,       v          ]},{u,0,2π},{v,0,2π}, PlotStyle->Opacity[0.3] ];(* The torus *)

(*Then we see the plots using the Show function, which shows graphics together. *)
Show[gu,gv,gs, PlotRange-> All, Axes-> False, Boxed-> False],
{u0,0,2π},{v0,0,2π}]

The Klein Bottle

Immersion Equations:  x1-> x, x2-> y, x3-> z
We use the formulas in https://en.wikipedia.org/wiki/Klein_bottle

(* 0<= u < π  0 <= v < 2 π *)
x1[u_,v_] := -(2/15) Cos[u]( 3 Cos[v]-30 Sin[u]+90((Cos[u])^4) Sin[u]-60 ((Cos[u])^6) Sin[u] + 5 Cos[u] Cos[v] Sin[u]);
x2[u_,v_] := -(1/15)Sin[u](3 Cos[v]-3 ((Cos[u])^2) Cos[v] -48 ((Cos[u])^4) Cos[v] + 48 ((Cos[u])^6) Cos[v] -60 Sin[u]+5 Cos[u] Cos[v] Sin[u] - 5 ((Cos[u])^3) Cos[v] Sin[u]-80 ((Cos[u])^5) Cos[v] Sin[u] + 80 ((Cos[u])^7) Cos[v] Sin[u]);
x3[u_,v_] :=  (2/15)Sin[v](3+5 Cos[u] Sin[u]);

This is an immersion, not an embedding, which is not possible in (ℝ^3). 
It is possible to embed in (ℝ^4), due to the Whitney’s embedding theorem.

ParametricPlot3D[{x1[u,v],x2[u,v],x3[u,v]},{u,0, π },{v,0,2π}, PlotStyle->Opacity[0.3] ,PlotRange-> All, Axes-> False, Boxed-> False]

See how the surface is built as we increase u:

Manipulate[
ParametricPlot3D[{x1[u,v],x2[u,v],x3[u,v]},{u,0, umax },{v,0,2π}, PlotStyle->Opacity[0.3],PlotRange-> All, Axes-> False, Boxed-> False],
{umax,.4,π}
]

See how the surface is built as we increase v:

Manipulate[
ParametricPlot3D[{x1[u,v],x2[u,v],x3[u,v]},{u,0, π },{v,0,vmax}, PlotStyle->Opacity[0.3],PlotRange-> All, Axes-> False, Boxed-> False],
{vmax,π/3,π}
]

Now, also draw a curve on the bottle. Check the u and v-curves.
The u=u0 curve is a circle when v∈(0,2π).
Then vary u0∈(0,π) to visit all those circles.

u0=π/4;tmax=2π;
γu[t_] := {u0,t} ; (*The curves*)
gu = ParametricPlot3D[{x1[ γu[t][[1]] ,γu[t][[2]] ],x2[ γu[t][[1]] ,γu[t][[2]] ],x3[ γu[t][[1]] ,γu[t][[2]] ]},{t,0,tmax}                          , PlotStyle->{Red  ,Thick}];
gs= ParametricPlot3D[{x1[    u               ,      v           ],x2[       u          ,       v           ],x3[        u          ,      v          ]},{u,0,       π },{v,0,2π}, PlotStyle->Opacity[0.3] ];

Show[gu,gs,PlotRange-> All, Axes-> False, Boxed-> False]

The v=v0 curve is trickier: as we move over the whole range u∈(0,2π), we end up at a different point!! The curve does not close, due to the opposite identification of the v=0 and v=2π  lines

v0=π/3;tmax=π;
γv[t_] := {t,v0} ; 
gv = ParametricPlot3D[{x1[ γv[t][[1]] ,γv[t][[2]] ],x2[ γv[t][[1]] ,γv[t][[2]] ],x3[ γv[t][[1]] ,γv[t][[2]] ]},{t,0,tmax}                          , PlotStyle->{Red  ,Thick}];
gs= ParametricPlot3D[{x1[    u               ,      v           ],x2[       u          ,       v           ],x3[        u          ,      v          ]},{u,0,       π },{v,0,2π}, PlotStyle->Opacity[0.3] ];

Show[gv,gs,PlotRange-> All, Axes-> False, Boxed-> False]

The v=v0 curve is trickier: as we move over the whole range u∈(0,2π), we end up at a different point!! The curve does not close, due to the opposite identification of the v=0 and v=2π  lines.
We have to go around one more time to meet the same point:

v0=π;tmax=2π;
γv[t_] := {t,v0} ; 
gv = ParametricPlot3D[{x1[ γv[t][[1]] ,γv[t][[2]] ],x2[ γv[t][[1]] ,γv[t][[2]] ],x3[ γv[t][[1]] ,γv[t][[2]] ]},{t,0,tmax}                          , PlotStyle->{Red  ,Thick}];
gs= ParametricPlot3D[{x1[    u               ,      v           ],x2[       u          ,       v           ],x3[        u          ,      v          ]},{u,0,       π },{v,0,2π}, PlotStyle->Opacity[0.3] ];

Show[gv,gs,PlotRange-> All, Axes-> False, Boxed-> False]

4d Embedding: https://en.wikipedia.org/wiki/Klein_bottle

x1[u_,v_] :=(Cos[(u/2)] Sin[v]-Sin[(u/2)]Sin[2 v]); 
x2[u_,v_] :=(Sin[(u/2)]Cos[v]+Cos[(u/2)]Sin[2 v]);
x3[u_,v_] :=R Cos[u](1+ϵ Sin[v]);
x4[u_,v_] :=R Sin[u](1+ϵ Sin[v]);
ρ[u_,v_]:= Sqrt[((x1[u,v])^2)+((x2[u,v])^2)]
r[u_,v_]:= Sqrt[((x1[u,v])^2)+((x2[u,v])^2)+((x3[u,v])^2)]

rule = {R-> 3, ϵ-> .3};

g123 =ParametricPlot3D[{x1[     u          ,     v          ],x2[      u          ,    v          ],x3[      u          ,     v          ]}/.rule,{u,0,2π},{v,0,2π}, PlotStyle->Opacity[0.3]];
g234 =ParametricPlot3D[{x2[     u          ,     v          ],x3[      u          ,    v          ],x4[      u          ,     v          ]}/.rule,{u,0,2π},{v,0,2π}, PlotStyle->Opacity[0.3]];
gρ34=ParametricPlot3D[{ρ   [     u          ,     v          ],x3[      u          ,    v          ],x4[      u          ,     v          ]}/.rule,{u,0,2π},{v,0,2π}, PlotStyle->Opacity[0.3]];

Show[g234,PlotRange-> All, Axes-> False, Boxed-> False]

The Sphere (S^2)

u-> θ, v-> ϕ

x1[u_,v_] :=Sin[u] Cos[v]; 
x2[u_,v_] :=Sin[u] Sin[v];
x3[u_,v_] :=Cos[u];

Manipulate[
γu[t_] := {u0,t} ; (*The curves*)
γv[t_] := {t,v0} ; 
gu= ParametricPlot3D[{x1[ γu[t][[1]] ,γu[t][[2]] ],x2[ γu[t][[1]] ,γu[t][[2]] ],x3[ γu[t][[1]] ,γu[t][[2]] ]},{t,0, 2π}                          , PlotStyle->{Red  ,Thick}];
gv= ParametricPlot3D[{x1[ γv[t][[1]] ,γv[t][[2]] ],x2[ γv[t][[1]] ,γv[t][[2]] ],x3[ γv[t][[1]] ,γv[t][[2]] ]},{t,0,    π}                          , PlotStyle->{Blue,Thick}];
gs =ParametricPlot3D[{x1[        u          ,       v          ],x2[        u          ,       v          ],x3[        u          ,       v          ]},{u,0,   π},{v,0,2π}, PlotStyle->Opacity[0.3] ];

(*Then we see the plots using the Show function, which shows graphics together. *)
Show[gu,gv,gs, PlotRange-> All, Axes-> False, Boxed-> False],
{u0,0.1, π},{v0,0,2π}]

Now the stereographic projection w.r.t. to the North Pole:
u=(x/(1-z))=((sin(θ)cos(ϕ))/(1-cos(θ)))
v=(y/(1-z))=((sin(θ)sin(ϕ))/(1-cos(θ)))

(*Set the (θ,ϕ) position of a point P: *)
θ    =π/4                       ;ϕ   =π/4                         ;
xP = Sin[θ] Cos[ϕ]  ;yP = Sin[θ] Sin[ϕ]    ; zP = Cos[θ];
uP = (xP/(1-zP))                  ;vP = (yP/(1-zP))                    ; (* Projective coordinates *)

gs =ParametricPlot3D[{x1[        u          ,       v          ],x2[        u          ,       v          ],x3[        u          ,       v          ]},{u,   0,   π},{v,   0,2π}, PlotStyle->Opacity[0.3] ]; (* the sphere *)
gp =ParametricPlot3D[{x                                                  ,y                                                  ,0                                                   },{x,-2,   2},{y,-2,    2}, PlotStyle->Opacity[0.9] ]; (* the xy plane *)

(*The line passing through NP is (OverVector[γ])=t [(u,v,0)-(0,0,1)]+(0,0,1)= (t u,t v,1-t)*)
gNP = ParametricPlot3D[ {t uP  ,t vP,1-t},{t,0,1}];

(*Mark some points on the graph: *)
gP  = Graphics3D[{Red          ,Sphere[{xP,yP,zP},0.025],Black,Text[Style["P"          ,Bold],{xP   +0.05,yP+0.05,zP+0.05}]}];
gN  = Graphics3D[{Blue        ,Sphere[{0  ,0  ,1   },0.025],Black,Text[Style["N"          ,Bold],{0                  ,0                ,1  +0.07}]}];
gUV= Graphics3D[{Green     ,Sphere[{uP,vP,0   },0.025],Black,Text[Style["(u,v)" ,Bold],{uP                ,vP              ,        0.10}]}];

gM  = Graphics3D[{Red          ,Sphere[{xP,yP,0   },0.025],Black,Text[Style["M"          ,Bold],{xP   +0.05,yP+0.05,         0.10}]}];
gR  = Graphics3D[{Green     ,Sphere[{xP,0   ,zP},0.025],Black,Text[Style["R"          ,Bold],{xP                 ,0.05         ,zP+0.05}]}];
gK  = Graphics3D[{Green     ,Sphere[{xP,0   ,0  },0.025],Black,Text[Style["K"          ,Bold],{xP                 ,0.05         ,         0.05}]}];
gV  = Graphics3D[{Green     ,Sphere[{uP, 0  ,0   },0.025],Black,Text[Style["(u,0)",Bold],{uP+0.2      ,0                ,         0.10}]}];

(*Draw some lines:*)
gON = ParametricPlot3D[ {0       ,0      ,      t},{t,0,1}];
gOP = ParametricPlot3D[ {t xP ,t yP ,t zP},{t,0,1}];
gOQ = ParametricPlot3D[ {t uP ,t vP ,      0},{t,0,1}];
gPM = ParametricPlot3D[ {   xP ,   yP , t zP},{t,0,1}];
gRK = ParametricPlot3D[ {   xP ,   0   , t zP},{t,0,1}];
gPR  =ParametricPlot3D[ {   xP ,t yP ,    zP},{t,0,1}];
gOV = ParametricPlot3D[ {t uP ,     0 ,      0},{t,0,1}];
gNV = ParametricPlot3D[ {t uP ,    0 ,1-t},{t,0,1}];
gKM =ParametricPlot3D[ {    xP,t yP ,      0},{t,0,1}];
gUVV=ParametricPlot3D[ {    uP,t vP ,      0},{t,0,1}];

Show[gs,gp,gP,gM,gN,gR,gK,gUV,gV,gNP,gON,gOQ,gPM,gRK,gPR,gOV,gNV,gKM,gUVV, PlotRange-> All, Axes-> False, Boxed-> False]

Möbius strip

(*Position vector: *)
x[u_,v_]:={Cos[u](1+(v/2)Cos[(u/2)]),Sin[u](1+(v/2)Cos[(u/2)]),(v/2)Sin[(u/2)]};

(*Tangent vectors: *)
dxu[u_,v_] = (∂_u)x[u,v]//FullSimplify ;
dxv[u_,v_] = (∂_v)x[u,v] //FullSimplify ;
(*Normal vector: *)
xn  [u_,v_] = Cross[dxu[u,v],dxv[u,v]]//FullSimplify;

Print["(∂_u)x= ",dxu[u,v]//TraditionalForm,"\n(∂_v)x= ",dxv[u,v]//TraditionalForm,"\nn= ",xn[u,v]//TraditionalForm]

Manipulate[
γu[t_] := {u0,t} ; (*The curves*)
γv[t_] := {t,v0} ; 
gu   = ParametricPlot3D[x[ γu[t][[1]] ,γu[t][[2]] ],{t,-1,1    }                          , PlotStyle->{Red         ,Thick}]; 
gv   = ParametricPlot3D[x[ γv[t][[1]] ,γv[t][[2]] ],{t,0   ,2π}                          , PlotStyle->{Blue       ,Thick}]; 
gs   = ParametricPlot3D[x[        u          ,       v          ],{u,0   ,2π},{v,-1, 1}, PlotStyle->Opacity[0.3]        ];
gv2= ParametricPlot3D[x[ γv[t][[1]] ,γv[t][[2]]  ],{t,2π,4π}                          , PlotStyle->{Magenta,Thick}]; 

(*Then we see the plots using the Show function, which shows graphics together. *)
Show[gu,gv,gs,gv2, PlotRange-> All, Axes-> False, Boxed-> False],
{u0,0,2π},{v0,-1,1}]

u0=0;v0=0.2;
γu[t_] := {u0,t} ; (*The curves*)
γv[t_] := {t,v0} ; 
gu   = ParametricPlot3D[x[ γu[t][[1]] ,γu[t][[2]] ],{t,-1,1    }                          , PlotStyle->{Red         ,Thick}]; 
gv   = ParametricPlot3D[x[ γv[t][[1]] ,γv[t][[2]] ],{t,0   ,2π}                          , PlotStyle->{Blue       ,Thick}]; 
gs   = ParametricPlot3D[x[        u          ,       v          ],{u,0   ,2π},{v,-1, 1}, PlotStyle->Opacity[0.3]        ];
gv2= ParametricPlot3D[x[ γv[t][[1]] ,γv[t][[2]]  ],{t,2π,4π}                          , PlotStyle->{Magenta,Thick}]; 

(* Plot tangent vectors at (u0,0) *)
gxu = Graphics3D[{Thickness[0.006],Green,Arrowheads[0.04],Arrow[{x[u0+0.1,0],x[u0+0.1,0]+0.5 dxu[u0+0.1,0]}]}];
gxv = Graphics3D[{Thickness[0.006],Green,Arrowheads[0.04],Arrow[{x[u0+0.1,0],x[u0+0.1,0]+0.8 dxv[u0+0.1,0]}]}];
gxn = Graphics3D[{Thickness[0.006],Green,Arrowheads[0.04],Arrow[{x[u0+0.1,0],x[u0+0.1,0]+0.8 xn  [u0+0.1,0]}]}];

(*Then we see the plots using the Show function, which shows graphics together. *)
Show[gu,gv,gs,gv2,gxu,gxv,gxn, PlotRange-> All, Axes-> False, Boxed-> False]

u0=0;
gxu0 = Graphics3D[{Thickness[0.006],Red           ,Arrowheads[0.04],Arrow[{x[u0,0],x[u0,0]+0.5 dxu[u0,0]}]}];
gxv0 = Graphics3D[{Thickness[0.006],Red           ,Arrowheads[0.04],Arrow[{x[u0,0],x[u0,0]+0.8 dxv[u0,0]}]}];
gxn0 = Graphics3D[{Thickness[0.006],Magenta  ,Arrowheads[0.04],Arrow[{x[u0,0],x[u0,0]+0.8 xn  [u0,0]}]}];

Manipulate[

gs   = ParametricPlot3D[x[u,v],{u,0   ,2π},{v,-1, 1}, PlotStyle->Opacity[0.3]        ];

(* Plot tangent vectors at (u0,0) *)
gxu = Graphics3D[{Thickness[0.006],Green     ,Arrowheads[0.04],Arrow[{x[u0,0],x[u0,0]+0.5 dxu[u0,0]}]}];
gxv = Graphics3D[{Thickness[0.006],Green     ,Arrowheads[0.04],Arrow[{x[u0,0],x[u0,0]+0.8 dxv[u0,0]}]}];
gxn = Graphics3D[{Thickness[0.006],Blue       ,Arrowheads[0.04],Arrow[{x[u0,0],x[u0,0]+0.8 xn  [u0,0]}]}];

(*Then we see the plots using the Show function, which shows graphics together. *)
Show[gs,gxu,gxv,gxn,gxu0,gxv0,gxn0, PlotRange-> All, Axes-> False, Boxed-> False],

{u0,0,4π}
]