fltkcolor00 0 0
Si le rayon de l'étoile centrale est R et celui de l'étoile suivante est
r on a la relation :
r*sin(2*/5) = R*sin(
/5)
et on a trouvé que les sommets en "creux" sont situés sur un cercle de
rayon :
l = R*(3 - )/2
On sait que :
sin(2*/5)2 = 1 - cos(2*
/5)2 = (5 +
)/8
sin(/5)2 = 1 - cos(
/5)2 = (5 -
)/8
donc
(5 + )*r2 = R2*(5 -
) = 20/(5 +
)
soit
r = 2*R*/(5 +
) = 2*R/(1 +
) = R*(
- 1)/2
De plus le centre de l'étoile suivante est situé à :
l + r = R*(3 - )/2 + R*(- 1 +
)/2 = R.
On tape :
etoiles(z0,r,a):={ local j,k,R,L,nr,nz0; L:=[etoile(z0,r,a)]; R:=r; for (j:=0;j<5;j++){ nr:=2*R/(1+sqrt(5)); nz0:=z0+R*exp(2*i*j*pi/5+i*a); for (k:=1;k<5;k++){ L:=append(L,etoile(evalf(nz0),nr,a)); r:=nr; nr:=2*r/(1+sqrt(5)); nz0:=nz0+r*exp(2*i*j*pi/5+i*a); } } return L; }:;On tape :
Si on veut faire la même chose avec une ètoile à 7 branches on tape:
etoil7(z0,r,a):={ local j,l,somet,p,L,pa; z0:=evalf(z0); r:=evalf(r); a:=evalf(a); //l:=evalf(r*(3-sqrt(5))/2); l:=evalf(r*cos(2*pi/7)/cos(pi/7)); somet:=[z0+l*exp(i*a),z0+r*exp(i*(a+evalf(pi)/7))]; L:=somet; for (j:=1;j<7;j++){ L:=concat(L,rotation(z0,2*j*evalf(pi)/7,somet)); } p:=polygone(L); return p; }:; etoile7(z0,r,a):={ return affichage(etoil7(z0,r,a),rempli); }:; etoiles7(z0,r,a):={ local j,k,R,L,nr,nz0,nl,l; L:=[etoile7(z0,r,a)]; R:=r; l:=evalf(R*cos(2*pi/7)/cos(pi/7)); for (j:=0;j<7;j++){ nr:=evalf(R*sin(pi/7)/sin(2*pi/7)); nz0:=z0+(l+nr)*exp(2*i*j*pi/7+i*a); for (k:=1;k<7;k++){ L:=append(L,etoile7(evalf(nz0),nr,a)); r:=nr; nr:=r*sin(pi/7)/sin(2*pi/7); nl:=evalf(r*cos(2*pi/7)/cos(pi/7)); nz0:=nz0+(nl+nr)*exp(2*i*j*pi/7+i*a); } } return L; }:;Le logo de Xcas est obtenu avec : On tape :
etoilo(z0,r,a):={ local j,l,somet,p,L,pa; z0:=evalf(z0); r:=evalf(r); a:=evalf(a); l:=evalf(r*(3-sqrt(7))/2); somet:=[z0+l*exp(i*a),z0+r*exp(i*(a+evalf(pi/7)))]; L:=somet; for (j:=1;j<7;j++){ L:=concat(L,rotation(z0,2*j*evalf(pi/7),somet)); } p:=polygone(L); return p; }:; etoilog(z0,r,a):={ return affichage(etoilo(z0,r,a),rempli); }:; logox(z0,r,a,c):={ local j,k,R,L,nr,nz0; L:=[affichage(etoilo(z0,r,a),c+rempli)]; R:=r; for (j:=0;j<7;j++){ nr:=2*R/(1+sqrt(7)); nz0:=z0+R*exp(2*i*j*pi/7+i*a); for (k:=1;k<7;k++){ L:=append(L,affichage(etoilo(evalf(nz0),nr,a), c+(j+1)*k+rempli)); r:=nr; nr:=2*r/(1+sqrt(7)); nz0:=nz0+r*exp(2*i*j*pi/7+i*a); } } return L; }:; lx(z0,r):={ return(segment(z0+r*(-1-i),z0+r*(1+i)), segment(z0+r*(1-i),z0+r*(-1+i))); }:; lc(z0,r):={ return (cercle(z0,r,pi/4,7*pi/4)); }:; la(z0,r):={ return(segment(z0+r*(-1-i),z0+r*i), segment(z0+r*(1-i),z0+r*i), segment(z0+r*-0.5,z0+r*0.5)); }:; ls(z0,r):={ return (segment(z0+r*(-1/2-i),z0-r*i), segment(z0+r*(1/2+i),z0+r*i), cercle(z0+r*i/2,r/2,pi/2,3*pi/2), cercle(z0-r*i/2,r/2,-pi/2,pi/2)); }:; logoxcas(z0,r,a,c):={ return logox(z0,r,a,c), affichage(lx(evalf(z0-2*r*exp(i*a),r*0.2)), line_width_3+c+4), affichage(lc(evalf(z0-2*r*exp(-2*i*pi/7+i*a),0.2*r)), line_width_3+c+3), affichage(la(evalf(z0-2*r*exp(-4*i*pi/7+i*a),0.2*r)), line_width_3+c+2), affichage(ls(evalf(z0-2*r*exp(-6*i*pi/7+i*a),0.2*r)), line_width_3+c+1); };On tape :