I want to plot the normal vector of the Mobius strip represented by the parametric equations:
x=(2+u*cos(v/2))*cos(v):

y=(2+u*cos(v/2))*sin(v):

z=u*sin(v/2):

It is well-known that the normal vector is the crossproduct of [diff(x(u,v),u),diff(y(u,v),u),diff(z(u,v),u)] and [diff(x(u,v),v),diff(y(u,v),v),diff(z(u,v),v)].

So I want Maple to calculate the partial derivatives and the crossproduct for me.

with(plots):with(linalg):

a:=2:b:=0.5:

x:=(u,v)->(a+u*cos(b*v))*cos(v):

y:=(u,v)->(a+u*cos(b*v))*sin(v):

z:=(u,v)->u*sin(b*v):

N:=crossprod([diff(x(u,v),u),diff(y(u,v),u),diff(z(u,v),u)],[diff(x(u,v),v),diff(y(u,v),v),diff(z(u,v),v)]):

surface:=plot3d([x(u,v),y(u,v),z(u,v)],u=-1..1,v=0..2*Pi):

curve:=spacecurve([x(0,v),y(0,v),z(0,v)],v=0..2*Pi,

thickness=2,color=red):

M1:=(u,v)->N[1](u,v): M2:=(u,v)->N[2](u,v): M3:=(u,v)->N[3](u,v):
M1(u,v);M2(u,v):M3(u,v);

K:=40:

for i from 1 to K do ti:=i*4*Pi/K:

normal_vector[i]:=spacecurve([x(0,ti)+s*M1(0,ti),y(0,ti)+s*M2(0,ti),z(0,ti)+s*M3(0,ti)],s=0..1,color=blue,thickness=4):

od:

A:=display(seq(normal_vector[i],i=1..K),insequence=true):

display(A,surface,curve,scaling=constrained);

It can be seen that the crossproduct N is OK, but the normal vector does not appear.

 

Then I calculate the partial derivatives and the crossproduct by hand.  ( N=[M1,M2,M3] below is the normal vector )

with(plots):

a:=2:b:=0.5:

x:=(u,v)->(a+u*cos(b*v))*cos(v):

y:=(u,v)->(a+u*cos(b*v))*sin(v):

z:=(u,v)->u*sin(b*v):
surface:=plot3d([x(u,v),y(u,v),z(u,v)],u=-1..1,v=0..2*Pi):

curve:=spacecurve([x(0,v),y(0,v),z(0,v)],v=0..2*Pi,

thickness=2,color=red):

M1:=(u,v)->b*cos(b*v)^2*sin(v)*u-sin(b*v)*(-b*u*sin(b*v)*sin(v)+(a+u*cos(b*v))*cos(v)):

M2:=(u,v)->sin(b*v)*(-b*u*sin(b*v)*cos(v)-(a+u*cos(b*v))*sin(v)-b*cos(b*v)^2*u*cos(v)):

M3:=(u,v)->cos(b*v)*cos(v)*(-b*u*sin(b*v)*sin(v)+(a+u*cos(b*v))*cos(v))-cos(b*v)*sin(v)*(-b*u*sin(b*v)*cos(v)-(a+u*cos(b*v))*sin(v)):

K:=40:

for i from 1 to K do ti:=i*4*Pi/K:

normal_vector[i]:=spacecurve([x(0,ti)+s*M1(0,ti),y(0,ti)+s*M2(0,ti),z(0,ti)+s*M3(0,ti)],s=0..1,color=blue,thickness=4) od:

A:=display(seq(normal_vector[i],i=1..K),insequence=true):

display(A,surface,curve,scaling=constrained);

And the normal vector appears.

I don't know what is wrong with the first program and how to solve the problem.

 


Please Wait...