Subversion Repositories wimsdev

Rev

Rev 18513 | Rev 18529 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

!if $wims_read_parm!=slib_header
  !goto proc
!endif
slib_title=Pavage hyperbolique du disque de Poincaré
slib_author=Bernadette, Perrin-Riou
slib_parms=3\
,vecteur représentant les paramètres de la tuile\
0.01,eps\
size=600 color=[black,white] depl=0 type=, option (mots) : size= color=[] html/url fill depl= type= alt

slib_out=dessin d'un pavage hyperbolique ou code ou url selon les cas \
  associé à un polygone tangentiel ou de type regular.
slib_comment=La forme de la tuile est spécifiée de la manière suivante \
  (les d_i sont des entiers supérieurs à 3): les angles du polygone sont la suite des \
    2*pi/d_1, ..., 2*pi/d_n et le polygone est un polygone tangentiel, c'est-à-dire un\
    polygone convexe admettant un cercle inscrit.\
   Ce pavage existe si les d_i sont pairs et pas toujours si ce n'est pas le cas ...\
  Si le type est <span class=tt">"regular"</span>, deux paramètres suffisent,\
  le polygone est un polygone à d_1 côtés égaux et d_1 angles égaux à 2*pi/d_2.\
  Le pavage (qui est théoriquement infini) est limité au cercle de rayon 1-eps (eps>0.04).\
  Cependant, le nombre de polygones dessinés est limité à 500.\
  Si eps est un entier, seules les esp premières tuiles sont dessinées.

  !!!<br>On peut appliquer la transformation de Moebius z->(a*z+b)/(\bar{b}z+\bar{a})\
  !!!codé par [a,b,0] ou z->(a*\bar{z}+b)/(\bar{b}\bar{z}+\bar{a}) codé par [a,b,1]\
  !!!avec |a|>|b|; elle envoie 0 sur b/\bar{a} et le point 1 de l'horizon sur\
  !!!a/\bar{a}.
slib_example=[8,8,4,8],0.01,html color=blue\
[4,8,10],0.01,html\
[4,8,6,4,6,6],0.01,html\
[8,8,4,8],0.01,html color=blue\
[34,5,34],0.1,html fill=[1]\
[6,8,10],0.1,html color=[blue,grey] fill\
[6,8,10],0.1,color=blue html depl=0.5+I*0.5\
[6,8,10],6,html color=blue\
[5,8,3,8],0.04,color=black html\
[5,8,3,8],0.04,color=black html depl=-0.5+I*0.5\
[6,8,10],0.1,html fill=[1,5,7]\
[34,5,34],0.1,html fill=[1]\
[5,8],0.01,html color=black type=regular\
[4,8],0.01,html color=black type=regular\
[6,8,10],0.1,html fill=[1,5,7]\
[4,8,9,8,6],0.01,html
!exit
:proc

!reset slib_Test slib_type slib_bound slib_size slib_color slib_dessin slib_dessin1 slib_dessin2 slib_dessin3 slib_depl slib_fill
!distribute items $wims_read_parm into slib_data,slib_bound,slib_option
!set slib_gpprog=hyptiling
!if $slib_bound<0.01
  !!reset slib_bound
!endif
!set wims_multiexec=$wims_multiexec pari
!default slib_bound=0.01
!set slib_size=!getopt size in $slib_option
!default slib_size=600
!set slib_color=!getopt color in $slib_option
!set slib_color=!declosing $slib_color
!if fill iswordof $slib_option
  !set slib_pol=fhyppolygon
  !default slib_color=black,white
!else
  !set slib_pol=hyppolygon
  !default slib_color=black,black
!endif
!set slib_color=$slib_color,$(slib_color[1])
!set slib_color=$(slib_color[1,2])
!set slib_fill=!getopt fill in $slib_option
!set slib_fill=!declosing $slib_fill
!set slib_type=!getopt type in $slib_option
!set slib_depl=!getopt depl in $slib_option
!default slib_depl=0
!set slib_pqr=!declosing $slib_data
!set slib_pqr=!exec pari [$slib_pqr]
!if $slib_type=
  !set slib_n=!itemcnt $slib_pqr
  !set slib_testexist=!exec pari a=[$slib_pqr];test=vecsum(vector($slib_n,i,1/a[i]))>=($slib_n-2)/2;a=concat(a,a[1]);for(i=2,$slib_n,if(a[i]%2==1, test+=a[i-1]!=a[i+1])); test
  !if $slib_testexist>0
    !set slib_out=error $slib_testexist>0
    !exit
  !endif
!endif
!if $slib_type issametext regular
  !if $[1/$(slib_pqr[1])+1/$(slib_pqr[2])]>=1/2
    slib_out=Error $slib_type
    !exit
  !endif
  !set slib_pqr=!makelist $(slib_pqr[2]) for x=1 to $(slib_pqr[1])
!endif
!set slib_testint=!exec pari t=[$slib_pqr]; t-round(t)==0
!if $slib_testint!=1
  slib_out=Error integers
  !exit
!endif
!if $(slib_header_$slib_gpprog)=
  !readproc gp/$slib_gpprog.gp
  !set slib_hyptiling=!exec pari tikz=0;$(slib_header_$slib_gpprog);
!endif
!set slib_hyptiling=!exec pari wwww=catalan([$slib_pqr],$slib_bound,$slib_depl)[1];default(realprecision,3);wims_export(wwww)
!set slib_data=!trim $slib_hyptiling
!! depends only on $slib_data -- could be an "offhypdraw"
!set slib_data=!declosing $slib_data
!distribute items $slib_data into slib_som, slib_face
slib_som=!declosing $slib_som
slib_face=!declosing $slib_face
slib_facecnt=!rowcnt $slib_face
!for slib_k=1 to $slib_facecnt
  !reset slib_tmp slib_test slib_col
  !set slib_ff=$(slib_face[$slib_k;])
  !set slib_col=$(slib_color[1+$(slib_ff[$[$(slib_ff[1])+2]])])
  !if $slib_k isin $slib_fill
    !set slib_pol1=fhyppolygon
  !else
    !set slib_pol1=$slib_pol
  !endif
  !set slib_tmp=!replace internal ; by , in $slib_pol1 $(slib_col),$(slib_som[$(slib_ff[2..$(slib_ff[1])+1]);])
  !set slib_col=black
  !if $slib_k<500
    !set slib_dessin=!append line $slib_tmp to $slib_dessin
  !else
    !goto out
    !if $slib_k<800
      !set slib_dessin1=!append line $slib_tmp to $slib_dessin1
    !else
      !if $slib_k<2400
        !set slib_dessin2=!append line $slib_tmp to $slib_dessin2
      !else
        !set slib_dessin3=!append line $slib_tmp to $slib_dessin3
      !endif
    !endif
  !endif
:end
!next
:out
!set slib_range=-1,1
!set slib_out=xrange $slib_range\
yrange $slib_range\
circles black,0,0,1\
$slib_dessin

$slib_dessin1
$slib_dessin2\
$slib_dessin3

!if url iswordof $slib_option or html iswordof $slib_option
  !set insdraw_size=$slib_size,$slib_size
  !insdraw $slib_out
  !set slib_out=$ins_url
  !if html iswordof $slib_option
    !if alt iswordof $slib_option
      !set slib_alt=[$slib_pqr]
    !else
      !reset slib_alt
    !endif
    !set slib_out=<img src="$ins_url" alt="$slib_alt">
  !else
    !set slib_out=$slib_out,$insdraw_size
  !endif
!endif