Do someone tell me how can I solve this exersise using a created procedure? Also I would like to know if using a procedure is useful and if in that form code lines will be reduce. If procedures are not useful. What is the best aproach?

Here the exercise and the code:

Before to begin to learn Maple, I used to do math with python. I usually built function and classes in order to reduce code lines and to generalize the problem, but I don't know if this aproach is useful with Maple. In fact, I have another question. Is it possible to write in a document some codeblocks using Maple and another using python? If answer is yes, how can I do it?

Thank you for helping me;

Greetings;

Lic. Marcus Vinicio Mora Salas

Chemist

Hi MaplePrimes team,

Is there a generalized way to fill an extremely **CONCAVE closed 3d** **parametric plane** curve in Maple with **spacecurve** command (NO implicitplot3d), preferably without doing any multi-decomposition or creating a particular skeleton, or algorithm/programming?

Here my example:

#Circle of reference

**R0 := 1:**

C0 := t-> < cos(t), sin(t), 0 >:

#Variable radius

**R := t-> R0*(1 + 1/2*sin(t)):**

#Variable phase

**Dt := t-> Pi/2*sin(2*t):**

#CONCAVE Curve

**C := t-> R(t)*C0(t - Dt(t)):**

'C(t)' = C(t);

#Range

**t1, t2 := 0, 2*Pi:**

#Plot

**GC := spacecurve(C(t), t = t1..t2, color = "Red", thickness = 3**

, linestyle = solid

, scaling = constrained, axes = frame, orientation = [50,40,0]):

GC;

We know how to do it easily for any **convex** 3d plane curve (circle, ellipse, regular polygon, etc ...).

We also know how to do it for 2d curve with the Maple’s plot option *filled = true* but obviously not in 3d.

Thank you for your time.

Best.

Guy.

restart:with(LinearAlgebra):with(plots):with(geometry):with(plottools):
On appelle alpha la moitié de l'angle de rotation de la roue menée par tour de roue menante.
alpha=Pi/n en radians?
soit Pi/8 pour 8 rainures..
On a alors les relations suivantes entre l'entaxe E, le rayon de la roue ùenante R1 et le rayon de la roue menée R2 :
R1=E.sin(alpha), R2=E*cos(alpha)
Intersection du cercle (O,R2) avec la droite tan(phi)x-r/cos(phi), on obtient les coordonnées de P3
sol:=allvalues(solve([tan(phi)*x-r/cos(phi)=y,y^2+x^2=R2^2],[x,y])):
Intersection de 2 cercles
sol1:=allvalues(solve([(x-E)^2+y^2=(R-a)^2,y^2+x^2=R2^2],[x,y])):
Coordonnées des points du pourtour de l'élément de croix
Oo:=point([0,0]):
phi:=Pi/8:R2:=5:r:=1/4:E:=R2/cos(phi):evalf(%):R:=R2*tan(phi):evalf(%):a:=0.5:
P1:=point([(R2/2-r)*cos(phi),(R2/2-r)*sin(phi)]):
P2:=point([(R2/2)*cos(phi)+r*sin(phi),(R2/2)*sin(phi)-r*cos(phi)]):
xP2:=(R2/2)*cos(phi)+r*sin(phi):yP2:=(R2/2)*sin(phi)-r*cos(phi):
xP1:=(R2/2-r)*cos(phi):yP1:=(R2/2-r)*sin(phi):
Equation paramétrique du segment OP1 (t varie de 0 à 1) ;
x1:=t*(0-xP1)+xP1:
y1:=t*(0-yP1)+yP1:
n1:=5:
dt:=1/(n1-1):#t varie entre 0 et 1
for i to n1 do
tau:=(i-1)*dt:
xx[i]:=evalf(subs(t=tau,x1)):
yy[i]:=evalf(subs(t=tau,y1)):
#print(i,xx[i],yy[i]);
od:
Equation paramétrique du quart de cercle P1P2 de la rainure (t varie de 0 à 1)
x2:=R2/2*cos(phi)+r*cos(t):#attention au sens de rotation du parcours de l'objet
y2:=R2/2*sin(phi)+r*sin(t):
n2:=6:
dt:=Pi/2/(n2-1):#arc de Pi/2
for i to n2 do
tau:=phi-Pi+(i-1)*dt:
xx[i]:=evalf(subs(t=tau,x2)):
yy[i]:=evalf(subs(t=tau,y2)):
od:
for i to n2 do Vector[row]([i,xx[i],yy[i]]) od:
droite:=plot((tan(phi)*x-r/cos(phi),x=0..3),linestyle=dot,color=blue):
sol[1]:
xP3:=evalf(subs(op(1,sol[1]),x)):yP3:=evalf(subs(op(1,sol[1]),y)):
xP2:yP2:
xP4:=evalf(subs(op(1,sol1[1]),x)):yP4:=evalf(subs(op(1,sol1[1]),y)):
xP5:=E-(R-a):yP5:=0:
x3:=t*(xP3-xP2)+xP2:
y3:=t*(yP3-yP2)+yP2:
n3:=10:
dt:=1/(n3-1):#t varie entre 0 et 1
for i to n3 do
tau:=(i-1)*dt:
xx[i+n2]:=evalf(subs(t=tau,x3)):
yy[i+n2]:=evalf(subs(t=tau,y3)):
od:
for i to n3 do Vector[row]([i,xx[i],yy[i]]) od:
x4:=xP5+R-a+(R-a)*cos(t):#attention au sens de rotation du parcours de l'objet
y4:=(R-a)*sin(t):
n4:=11:
eta:=arcsin(yP4/(R-a)):
dt:=(-eta)/(n2-1)/2:#arc de Pi/2
for i to n4 do
tau:=(Pi+eta)+(i-1)*dt:#recherche de tau ?
xx[i+n2+n3]:=evalf(subs(t=-tau,x4)):
yy[i+n2+n3]:=evalf(subs(t=-tau,y4)):
od:
for i to n4 do Vector[row]([i,xx[i],yy[i]]) od:
n:=n2+n3+n4;
n := 27
for i to n do Vector[row]([i,xx[i],yy[i]]) od:
figure:=NULL:
for i from 0 to n do
xx[0]:=0:yy[0]:=0:
figure:=figure,[xx[i],yy[i]]:
#print(i,xx[i],yy[i]);
od:
polygonplot([figure],scaling=constrained,color=yellow,view=[-0.1..5,-0.1..3]):
for i to n do X[i]:=xx[i]: Y[i]:=yy[i] od:
d1:=plottools[disk]([xP1,yP1],0.05,color=blue):
d2:=plottools[disk]([xP2,yP2],0.05,color=red):
d3:=plottools[disk]([xP3,yP3],0.05,color=green):
d4:=plottools[disk]([xP4,yP4],0.05,color=green):
d5:=plottools[disk]([xP5,yP5],0.05,color=green):
fig:=pointplot([figure],scaling=constrained):
Po:=pointplot([[xP1,yP1],[xP2,yP2],[xP3,yP3]],color = blue, symbol = asterisk):
Cir:=plot([R2*cos(t),R2*sin(t),t=0..Pi/2],color=black):
Arc:=plot([E+(R-a)*cos(t),(R-a)*sin(t),t=3*Pi/4..Pi],linestyle=dot,color=blue):
textplot({[1, 2, "one point in 2-D"], [3, 2, "second point in 2-D"]}):
texte:=textplot([[xP1-0.2,yP1,"P1"],[xP2,yP2-0.3,"P2"],[xP3+0.2,yP3+0.2,"P3"],
[xP4+0.2,yP4+0.1,"P4"],[xP5-0.2,yP5+0.2,"P5"]]):
display({Arc,Cir,d1,d2,d3,d4,d5,Po,fig,droite,texte},scaling=constrained,view=[-1..7,-1..6]):
with(plottools):
printlevel:=3:
Miroir : symétrie par rapport à l'axes des x
for i from 0 to n/2 do
tt:=yy[i]:
yy[i]:=yy[n-i+1]:
yy[n-i+1]:=tt:
tt:=xx[i]:
xx[i]:=xx[n-i+1]:
xx[n-i+1]:=tt
od:
for i from 0 to n-1 do
xx[2*n-i]:=xx[i]:
yy[2*n-i]:=-yy[i]:
#print(i,xx[i],yy[i])
od:
Poly:=NULL:
for i from 0 to 2*n-1 do
xx[0]:=0:yy[0]:=0:
Poly:=Poly,[xx[i],yy[i]]:od:
polygonplot([Poly],color=yellow,scaling=constrained):
pointplot([Poly],color = blue, scaling=constrained,symbol = asterisk,view=[-1..5,-3..3]):
Rotation
unassign('xt','yt'):
#gc():
zt:=8:#8 rainures ou faisceaux
xt:=Vector(63,[]):
yt:=Vector(63,[]):
xt:=Vector((2*n-1),zt,[]):
yt:=Vector((2*n-1),zt,[]):
j:=0:
for k from 0 to zt-1 do
j:=0:
phi:=2*Pi*k/zt:
cs:=cos(phi):
sn:=sin(phi):
for kk from 1 to 2*n-1 do
j:=j+1:
xt[j][k]:=evalf(xx[kk]*cs-yy[kk]*sn):
yt[j][k]:=evalf(xx[kk]*sn+yy[kk]*cs):
od:
od:
N1:=j:
points:=seq(seq([xt[i][j], yt[i][j]], j=0..zt-1), i=1..2*n-1):
p_cross:= pointplot([points], scaling = constrained, color = black,linestyle=solid, filled=[yellow]):
polygonplot([points], color = yellow, scaling = constrained);
NULL;
display([p_cross]);#How to draw this cross with a line without points. Thank you.