Subversion Repositories wimsdev

Rev

Rev 18522 | Rev 18530 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
18449 bpr 1
!if $wims_read_parm!=slib_header
2
  !goto proc
3
!endif
4
slib_title=Pavage hyperbolique du disque de Poincaré
5
slib_author=Bernadette, Perrin-Riou
6
slib_parms=3\
18529 bpr 7
,vecteur représentant les paramètres de configuration du pavage\
18449 bpr 8
0.01,eps\
18529 bpr 9
size=600 color=[black,white] depl=0 type=1, option (mots) : size= color=[] html/url fill depl= type= alt
18449 bpr 10
 
11
slib_out=dessin d'un pavage hyperbolique ou code ou url selon les cas \
18529 bpr 12
  associé à un polygone tangentiel ou régulier.
13
slib_comment=Les pavages considérés sont <ul><li>cas de type 1:\
14
  transitifs sur l'ensemble des polygones (faces) et le premier paramètre est\
15
    la configuration de faces [d_1, ... , d_n],\
16
    c'est-à-dire la suite des types de faces\
17
    (nombre de sommets) pour chacun des sommets d'une face (pavage de Catalan);\
18
    </li><li>\
19
    cas de type 2: transitifs sur l'ensemble des sommets et le premier paramètre est\
20
    la configuration de sommets [d_1, ... , d_n],\
21
    c'est-à-dire la suite des types de faces (nombre de sommets) ayant un sommet commun.\
22
  </li></ul>\
23
  Dans le premier cas, la tuile de base est un polygone tangentiel\
24
    (polygone convexe admettant un cercle inscrit) dont les angles\
25
    sont la suite des 2*pi/d_1, ..., 2*pi/d_n.\
26
  Dans le deuxième cas, le pavage est dual du pavage de type 1 de configuration de faces\
27
  [d_1, ... , d_n].<br>\
28
 Dans le cas <span class=tt">"regular"</span>, deux paramètres suffisent,\
29
  le polygone est un polygone à d_1 côtés égaux et d_1 angles égaux à 2*pi/d_2.<br>\
30
   Ces pavages existent si sum_i=1^n 1/d_i<(n-2)/2 et si les d_i sont pairs.\
31
  Il semble qu'on puisse affaiblir cette deuxième condition en supposant que\
32
  pour tout i et j, d_i est pair ou d_{i-j}=d_{i+j}.<br>\
18449 bpr 33
  Le pavage (qui est théoriquement infini) est limité au cercle de rayon 1-eps (eps>0.04).\
18459 bpr 34
  Cependant, le nombre de polygones dessinés est limité à 500.\
18529 bpr 35
  Si eps est un entier, seules les esp premières tuiles sont dessinées.\
36
  <br>\
37
  L'option depl change le centrage initial du polygone de base: entre autre,\
38
  depl=1: le centre du polygone de départ est 0,\
39
  depl=0 le cercle est tangent au point 0 au polygone.
18513 bpr 40
 
18529 bpr 41
  type=1: catalan
42
  type=2: dual de catalan
43
  type=3: les deux
44
 
18513 bpr 45
  !!!<br>On peut appliquer la transformation de Moebius z->(a*z+b)/(\bar{b}z+\bar{a})\
46
  !!!codé par [a,b,0] ou z->(a*\bar{z}+b)/(\bar{b}\bar{z}+\bar{a}) codé par [a,b,1]\
47
  !!!avec |a|>|b|; elle envoie 0 sur b/\bar{a} et le point 1 de l'horizon sur\
48
  !!!a/\bar{a}.
18529 bpr 49
slib_example=[4,8,10],0.1,html type=1\
50
[4,8,10],0.01,html color=blue depl=1\
51
[4,8,10],0.01,html color=blue type=2\
52
[8,8,4,8],0.01,html color=blue type=1\
53
[8,8,4,8],0.01,html color=blue type=2\
18522 bpr 54
[4,8,6,4,6,6],0.01,html\
55
[34,5,34],0.1,html fill=[1]\
18457 bpr 56
[6,8,10],0.1,html color=[blue,grey] fill\
57
[6,8,10],0.1,html fill=[1,5,7]\
18506 bpr 58
[4,8,9,8,6],0.01,html
18449 bpr 59
!exit
60
:proc
61
 
18529 bpr 62
!reset slib_Test slib_type slib_bound slib_size slib_color slib_dessin slib_dessin1 slib_dessin2 slib_dessin3 slib_depl slib_fill slib_dual
18449 bpr 63
!distribute items $wims_read_parm into slib_data,slib_bound,slib_option
18506 bpr 64
!set slib_gpprog=hyptiling
18457 bpr 65
!if $slib_bound<0.01
66
  !!reset slib_bound
18449 bpr 67
!endif
18522 bpr 68
!set wims_multiexec=$wims_multiexec pari
18457 bpr 69
!default slib_bound=0.01
18449 bpr 70
!set slib_size=!getopt size in $slib_option
71
!default slib_size=600
72
!set slib_color=!getopt color in $slib_option
73
!set slib_color=!declosing $slib_color
18529 bpr 74
!set slib_type=!getopt type in $slib_option
75
!default slib_type=1
76
!if $slib_type=1
77
  !if fill iswordof $slib_option
78
    !set slib_pol=fhyppolygon
79
    !default slib_color=black,white
80
  !else
81
    !set slib_pol=hyppolygon
82
    !default slib_color=black
83
  !endif
84
!endif
85
!if $slib_type=2
86
  !set slib_pol=hyprays
18449 bpr 87
  !default slib_color=black,black
88
!endif
18529 bpr 89
 
18449 bpr 90
!set slib_color=$slib_color,$(slib_color[1])
91
!set slib_color=$(slib_color[1,2])
92
!set slib_fill=!getopt fill in $slib_option
93
!set slib_fill=!declosing $slib_fill
94
!set slib_type=!getopt type in $slib_option
95
!set slib_depl=!getopt depl in $slib_option
18513 bpr 96
!default slib_depl=0
18529 bpr 97
!default slib_type=1
18449 bpr 98
!set slib_pqr=!declosing $slib_data
99
!set slib_pqr=!exec pari [$slib_pqr]
18529 bpr 100
!if regular notin $slib_option
18502 bpr 101
  !set slib_n=!itemcnt $slib_pqr
18506 bpr 102
  !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
103
  !if $slib_testexist>0
18508 bpr 104
    !set slib_out=error $slib_testexist>0
18449 bpr 105
    !exit
106
  !endif
107
!endif
18529 bpr 108
!if regular isin $slib_option
18468 bpr 109
  !if $[1/$(slib_pqr[1])+1/$(slib_pqr[2])]>=1/2
18529 bpr 110
    slib_out=Error regular
18468 bpr 111
    !exit
112
  !endif
18506 bpr 113
  !set slib_pqr=!makelist $(slib_pqr[2]) for x=1 to $(slib_pqr[1])
18468 bpr 114
!endif
18506 bpr 115
!set slib_testint=!exec pari t=[$slib_pqr]; t-round(t)==0
116
!if $slib_testint!=1
117
  slib_out=Error integers
118
  !exit
119
!endif
18529 bpr 120
!!if $(slib_header_$slib_gpprog)=
18449 bpr 121
  !readproc gp/$slib_gpprog.gp
18506 bpr 122
  !set slib_hyptiling=!exec pari tikz=0;$(slib_header_$slib_gpprog);
18529 bpr 123
!!endif
124
slib_depl:0 pas au centre
125
1 au centre
126
 
127
1-> 1,2
128
2-> 3,4
129
!set slib_hyptiling=!exec pari wwww=wims_catalan([$slib_pqr],$slib_bound,$slib_depl,$slib_type);default(realprecision,3);wwww
130
!set slib_data=!trim $(slib_hyptiling[2*$slib_type-1,2*$slib_type])
18461 bpr 131
!! depends only on $slib_data -- could be an "offhypdraw"
18449 bpr 132
!set slib_data=!declosing $slib_data
18529 bpr 133
!distribute items $slib_data into slib_som,slib_face
134
 
18461 bpr 135
slib_som=!declosing $slib_som
136
slib_face=!declosing $slib_face
18529 bpr 137
slib_facecnt=!itemcnt $slib_face
18461 bpr 138
!for slib_k=1 to $slib_facecnt
18449 bpr 139
  !reset slib_tmp slib_test slib_col
18529 bpr 140
  !set slib_ff=!declosing $(slib_face[$slib_k])
141
  !if $slib_type=2
142
    !set slib_ffcnt=!itemcnt $slib_ff
143
    !set slib_ff=$slib_ffcnt,$slib_ff,1
144
  !endif
145
  !set slib_ffcnt=!itemcnt $slib_ff
18461 bpr 146
  !set slib_col=$(slib_color[1+$(slib_ff[$[$(slib_ff[1])+2]])])
18449 bpr 147
  !if $slib_k isin $slib_fill
18529 bpr 148
    !set slib_pol1=f$slib_pol
18449 bpr 149
  !else
150
    !set slib_pol1=$slib_pol
151
  !endif
18529 bpr 152
  !set slib_tmp=$slib_pol1 $(slib_col)
153
  !set slib_tmp=!append item $(slib_som[$(slib_ff[2..$(slib_ff[1])+1]);]) to $slib_tmp
154
  !set slib_tmp=!replace internal ; by , in $slib_tmp
18449 bpr 155
  !if $slib_k<500
156
    !set slib_dessin=!append line $slib_tmp to $slib_dessin
157
  !else
18459 bpr 158
    !goto out
18449 bpr 159
    !if $slib_k<800
160
      !set slib_dessin1=!append line $slib_tmp to $slib_dessin1
161
    !else
162
      !if $slib_k<2400
163
        !set slib_dessin2=!append line $slib_tmp to $slib_dessin2
164
      !else
165
        !set slib_dessin3=!append line $slib_tmp to $slib_dessin3
166
      !endif
167
    !endif
168
  !endif
169
:end
170
!next
18459 bpr 171
:out
18529 bpr 172
 
18449 bpr 173
!set slib_range=-1,1
174
!set slib_out=xrange $slib_range\
175
yrange $slib_range\
176
circles black,0,0,1\
18529 bpr 177
$slib_dessin\
178
$slib_dessin1
18459 bpr 179
 
18449 bpr 180
$slib_dessin2\
181
$slib_dessin3
182
 
183
!if url iswordof $slib_option or html iswordof $slib_option
184
  !set insdraw_size=$slib_size,$slib_size
185
  !insdraw $slib_out
186
  !set slib_out=$ins_url
187
  !if html iswordof $slib_option
18460 bpr 188
    !if alt iswordof $slib_option
189
      !set slib_alt=[$slib_pqr]
190
    !else
191
      !reset slib_alt
192
    !endif
18461 bpr 193
    !set slib_out=<img src="$ins_url" alt="$slib_alt">
18449 bpr 194
  !else
195
    !set slib_out=$slib_out,$insdraw_size
196
  !endif
197
!endif