On va écrire des procédures de param`etre n qui représente le
nombre de côtés de l'isopolygône.
Lsarc(n) renvoie la liste des sommets des arcs qui forment la
trajectoire de A.
Lpoly(n) renvoie la liste des positions successives de la figure formée
par P l'isopolgône de centre O, et S le segment
OA. On pourra ainsi faire facilement une animation.
tracerarc(n) ou tracer(n) trace la trajectoire lorsque
la "roue" a fait 2 tours complets.
longtrajet(n) renvoie la longueur d'une arche : le résultat est
approché, mais on peut supprimer evalf pour avoir un résultat exact
lorsque n=3,4,6.
On tape :
Lsarc(n):={ local L,j; L:=[point(0)]; for (j:=1;j<n;j++){ L:=concat(L,normal(rotation(j,-2*pi/n,L[j-1]))); } return(L); }; Lpoly(n):={ local LP,j,P,S; P:=normal(isopolygone(0,1,n)); S:=segment(0,evalf(1/2+i/2/tan(pi/n))); LP:=[[P,S]]; for (j:=0;j<2*n;j++){ LP:=concat(LP,[rotation(j+1,evalf(-pi/n),LP[2*j]),rotation(j+1,evalf(-2*pi/n),LP[2*j])]) } return LP; }; tracerarc(n):={ local A,B,Ls; Ls:=evalf(Lsarc(n)); A:=seq(arc(Ls[k],Ls[k+1],evalf(-2*pi/n)),k,0,n-2); B:=translation(n,A); return concat(A,B); }; //ou encore tracer(n):={ local A,B,j,Ls; Ls:=evalf(Lsarc(n)); A:=[arc(Ls[0],Ls[1],evalf(-2*pi/n))]; for (j:=1;j<n-1;j++){ A:=concat(A,arc(Ls[j],Ls[j+1],-2*pi/n)); } B:=translation(n,A); return(A,B) }; longtrajet(n):={ local dist,k,C,R; dist:=0 for (k:=0;k<(n-1);k++){ arc((Lsarc(n))[k],(Lsarc(n))[k+1],-pi/3,C,R); dist:=evalf(dist+R*pi/3); }; return normal(dist); }On tape par exemple, pour avoir une animation :