Question: Gathering points to obtain Maltese cross

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.
Please Wait...