//Le dessin obtenu a partir d'un triangle ABC direct peut //etre decrit de facon recursive si on a C=similitude(A,k,t,B), //soit C1=similitude(A,k,t,C) : //spiraler(A,B,C,0)=triangle(A,B,C) // si n>0, spiraler(A,B,C,n)=triangle(A,B,C) puis //spiraler(A,C,C1,n-1) //n=nombre de triangles a construire=nombre d'appels recursifs spiraler(A,B,C,n):={ local k,t; k:=longueur(A,C)/longueur(A,B); t:=angle(A,B,C); if (n>0) { triangle(A,B,C); B:=C; C:=similitude(A,k,t,B); spiraler(A,B,C,n-1); } else triangle(A,B,C); };On peut écrire un programme légèrement diffèrent pour ne pas faire deux fois le même trait.
//meme dessin que spiraler(A,B,C,n) //mais sans repasser sur le meme trait //si on a C=similitude(A,k,t,B), soit C1=similitude(A,k,t,C) //spiralers(A,B,C,0)=triangle(A,B,C) et si n>0, //spiralers(A,B,C,n)=segment AB et BC puis spiralers(A,C,C1,n-1) spiralers(A,B,C,n):={ local k,t; k:=longueur(A,C)/longueur(A,B); t:=angle(A,B,C); if (n>0) { segment(A,B); segment(B,C); B:=C; C:=similitude(A,k,t,B); spiralers(A,B,C,n-1); } else triangle(A,B,C); };2/ la procédure récursive spiraler1s(A,B,C,n)
^
n,n*t,B) et
Cn=similitude(A,k^
n,n*t,C)=similitude(A,k,t,C(n-1)).
//meme dessin que spiraler(A,B,C,n) mais autre facon de voir //la recursivite spiraler1(A,B,C,0)=triangle(A,B,C) si n>0, //spiraler1(A,B,C,n)=dernier triangle AMN et spiraler1(A,B,C,n-1) //sans repasser sur le meme trait : //spiraler1s(A,B,C,0)=triangle(A,B,C) et si n>0, //spiraler1s(A,B,C,n)=segments AN et MN et spiraler1s(A,B,C,n-1) spiraler1s(A,B,C,n):={ local k,t; k:=longueur(A,C)/longueur(A,B); t:=angle(A,B,C); if (n>0) { M:=similitude(A,k^n,n*t,B); N:=similitude(A,k,t,M); segment(M,N); segment(A,N); spiraler1s(A,B,C,n-1); } else triangle(A,B,C); };