On tape dans un éditeur de programmes :
illusion11():={ local L; L:=NULL; L:=L,segment(-2,-2+4*i); L:=L,segment(0,4*i); L:=L,segment(-2,-2-sqrt(3)/2-i/2); L:=L,segment(-2,-2+sqrt(3)/2-i/2); L:=L,segment(-2+4*i,-2-sqrt(3)/2+4*i+i/2); L:=L,segment(-2+4*i,-2+sqrt(3)/2+4*i+i/2); L:=L,segment(0,-sqrt(3)/2+i/2); L:=L,segment(0,sqrt(3)/2+i/2); retourne L; }:; illusion12():={ local L; L:=NULL; L:=L,segment(4*i,-sqrt(3)/2+4*i-i/2); L:=L,segment(4*i,sqrt(3)/2+4*i-i/2); L:=L,segment(2,3+4*i); L:=L,segment(2.5+i,4.5+i); L:=L,segment(2.5+2*i,4.5+2*i); L:=L,segment(5,4+4*i); retourne L; }:;
Puis on compile avec OK ou avec F9.
On tape dans un niveau de géométrie :
illusion11();
illusion12();
On obtient (les longueurs des segments parallèles ne semblent pas égales) :
On tape dans un éditeur de programmes :
illusion2():={ local j,L; L:=NULL; pour j de 1 jusque 13 faire L:=L,cercle(0,2*j); fpour; L:=L,carre(-13*(1+i),13*(1-i)); retourne L; }:;
Puis on compile avec OK ou avec F9.
On tape dans un niveau de géométrie :
illusion2();
On obtient un carré dont les côtés sembles incurvés :
On tape dans un éditeur de programmes :
raies():={ local L,j,A,B,xa,ya; L:=NULL; xa:=-22; pour j de 1 jusque 6 faire A:=point(xa+i*22); B:=point(xa+4+i*22); L:=L,triangle(0,A,B,affichage=rempli); L:=L,triangle(0,-A,-B,affichage=rempli); xa:=xa+8; fpour; ya:=-18; pour j de 1 jusque 5 faire A:=point(-22+i*ya); B:=point(-22+i*(ya+4)); L:=L,triangle(0,A,B,affichage=rempli); L:=L,triangle(0,-A,-B,affichage=rempli); ya:=ya+8; fpour; L:=L,affichage(carre(-2*(1+i),2*(1-i)),rempli); retourne L; }:; bande():={ local L,j,xa,A,B,C,D; L:=NULL; xa:=-13; A:=point(xa+i*11); B:=point(xa+2+i*11); C:=point((xa+6)*12/11.+i*12); D:=point((xa+4)*12/11.+i*12); L:=L,polygone(A,B,C,D,affichage=7+rempli); L:=L,polygone(-A,-B,-C,-D,affichage=7+rempli); xa:=xa+2; pour j de 1 jusque 2 faire A:=point(xa+i*11); B:=point(xa+2+i*11); C:=point((xa+6)*12/11.+i*12); D:=point((xa+4)*12/11.+i*12); L:=L,polygone(A,B,C,D,affichage=rempli); L:=L,polygone(-A,-B,-C,-D,affichage=rempli); xa:=xa+2; A:=point(xa+i*11); B:=point(xa+2+i*11); C:=point((xa+6)*12/11.+i*12); D:=point((xa+4)*12/11.+i*12); L:=L,polygone(A,B,C,D,affichage=7+rempli); L:=L,polygone(-A,-B,-C,-D,affichage=7+rempli); xa:=xa+2; fpour; A:=point(xa+i*11); B:=point(xa+2+i*11); C:=point((xa+4)+i*11); D:=point((xa+6)+i*11); L:=L,polygone(A,B,i*11.25,C,D,i*11.75,affichage=rempli), polygone(-A,-B,-i*11.25,-C,-D,-i*11.75,affichage=rempli); xa:=3; pour j de 1 jusque 2 faire A:=point(xa+i*11); B:=point(xa+2+i*11); C:=point((xa-2)*12/11.+i*12); D:=point((xa-4)*12/11.+i*12); L:=L,polygone(A,B,C,D,affichage=7+rempli); L:=L,polygone(-A,-B,-C,-D,affichage=7+rempli); xa:=xa+2; A:=point(xa+i*11); B:=point(xa+2+i*11); C:=point((xa-2)*12/11.+i*12); D:=point((xa-4)*12/11.+i*12); L:=L,polygone(A,B,C,D,affichage=rempli); L:=L,polygone(-A,-B,-C,-D,affichage=rempli); xa:=xa+2; fpour; A:=point(xa+i*11); B:=point(xa+2+i*11); C:=point((xa-2)*12/11.+i*12); D:=point((xa-4)*12/11.+i*12); L:=L,polygone(A,B,C,D,affichage=7+rempli); L:=L,polygone(-A,-B,-C,-D,affichage=7+rempli); retourne L; }:; bande1():={ local L,j,ya,A,B,C,D; L:=NULL; ya:=-9 pour j de 1 jusque 2 faire A:=point(ya*i-11); B:=point((ya+2)*i-11); C:=point((ya-2)*i*12/11.-12); D:=point((ya-4)*12/11.*i-12); L:=L,polygone(A,B,C,D,affichage=rempli); L:=L,polygone(-A,-B,-C,-D,affichage=rempli); ya:=ya+2; A:=point(ya*i-11); B:=point((ya+2)*i-11); C:=point((ya-2)*12/11.*i-12); D:=point((ya-4)*12/11.*i-12); L:=L,polygone(A,B,C,D,affichage=7+rempli); L:=L,polygone(-A,-B,-C,-D,affichage=7+rempli); ya:=ya+2; fpour; A:=point(ya*i-11); B:=point((ya+2)*i-11); C:=point((ya-2)*i*12/11.-12); D:=point((ya-4)*12/11.*i+-12); L:=L,polygone(A,B,C,D,affichage=rempli); L:=L,polygone(-A,-B,-C,-D,affichage=rempli); ya:=ya+2; A:=point((ya+2)*i*12/11.-12); B:=point((ya)*i*12/11.-12); C:=point((ya-2)*i*12/11.-12); D:=point((ya-4)*i*12/11.-12); L:=L,polygone(A,B,-11.75,C,D,-11.25,affichage=7+rempli), polygone(-A,-B,11.75,-C,-D,11.25,affichage=7+rempli); ya:=1; pour j de 1 jusque 2 faire A:=point((ya-2)*i-11); B:=point((ya)*i-11); C:=point((ya+4)*12/11.*i-12); D:=point((ya+2)*12/11.*i-12); L:=L,polygone(A,B,C,D,affichage=rempli); L:=L,polygone(-A,-B,-C,-D,affichage=rempli); ya:=ya+2; A:=point((ya-2)*i-11); B:=point((ya)*i-11); C:=point((ya+4)*12/11.*i-12); D:=point((ya+2)*12/11.*i-12); L:=L,polygone(A,B,C,D,affichage=7+rempli); L:=L,polygone(-A,-B,-C,-D,affichage=7+rempli); ya:=ya+2; fpour; A:=point((ya-2)*i-11); B:=point(ya*i-11); C:=point((ya+4)*12/11.*i-12); D:=point((ya+2)*12/11.*i-12); L:=L,polygone(A,B,C,D,affichage=rempli); L:=L,polygone(-A,-B,-C,-D,affichage=rempli); retourne L; }:; bande2():={ local L,j,ya,A,B,C,D; L:=NULL; ya:=-13; A:=point((ya+1)*i+11.6); B:=point((ya+2)*i+11); C:=point((ya+6)*12/11.*i+12); D:=point((ya+4)*12/11.*i+12); L:=L,polygone(A,B,C,D,affichage=rempli); L:=L,polygone(-A,-B,-C,-D,affichage=rempli); ya:=ya+2; pour j de 1 jusque 2 faire A:=point(ya*i+11); B:=point((ya+2)*i+11); C:=point((ya+6)*i*12/11.+12); D:=point((ya+4)*12/11.*i+12); L:=L,polygone(A,B,C,D,affichage=7+rempli); L:=L,polygone(-A,-B,-C,-D,affichage=7+rempli); ya:=ya+2; A:=point(ya*i+11); B:=point((ya+2)*i+11); C:=point((ya+6)*12/11.*i+12); D:=point((ya+4)*12/11.*i+12); L:=L,polygone(A,B,C,D,affichage=rempli); L:=L,polygone(-A,-B,-C,-D,affichage=rempli); ya:=ya+2; fpour; A:=point((ya)*i+11):; B:=point((ya+2)*i+11):; C:=point((ya+3)*i+11.75):; D:=point((ya+3)*i+11.25):; L:=L,polygone(B,A,C,D,affichage=7+rempli); L:=L,polygone(-B,-A,-C,-D,affichage=7+rempli); L:=L,polygone(D,11,B,affichage=rempli); L:=L,polygone(-D,-11,-B,affichage=rempli); retourne L,conj(L); }:; illusion31():={ retourne raies(),bande(),bande1(); }:; illusion32():={ retourne raies(),bande(),bande2(); }:;
Puis on compile avec OK ou avec F9.
On tape dans un niveau de géométrie :
illusion31();
On obtient un carré dont les côtés sembles incurvés :
On tape dans un niveau de géométrie :
illusion32();
On obtient un carré dont les côtés sembles incurvés :
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)); }:; illusion32(); affichage(lx(0,1),4+line_width_5); affichage(lc(3.4+0.6*i,0.5),4+line_width_5); affichage(la(6+1.1*i,0.9),4+line_width_5); affichage(ls(10+1.7*i,1.3),4+line_width_5); affichage(symetrie(droite(x=0),lc(3.4+0.6*i,0.5)),4+line_width_5); affichage(la(-6+1.1*i,0.9),4+line_width_5); affichage(conj(ls(-10-1.7*i,1.3)),4+line_width_5);
On obtient :