Rev 18614 | 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.\ |
||
18530 | bpr | 22 | </li><li>Le cas de type 3 montre le pavage et son dual sur le même dessin.</li></ul>\ |
18529 | bpr | 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).\ |
18614 | bpr | 34 | Cependant, le nombre de polygones dessinés est limité à 400 et même plus dans le cas de canvasdraw.\ |
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,\ |
||
18614 | bpr | 39 | depl=0 :le cercle est tangent au point 0 au polygone.\ |
40 | Dans le cas canvasdraw, il y a limitation du nombre de polygones ... \ |
||
41 | et donc seuls les types 1 et 2 sont possibles pour l'instant (et encore, à suivre). |
||
18513 | bpr | 42 | |
18614 | bpr | 43 | |
18529 | bpr | 44 | type=1: catalan |
45 | type=2: dual de catalan |
||
46 | type=3: les deux |
||
47 | |||
18513 | bpr | 48 | !!!<br>On peut appliquer la transformation de Moebius z->(a*z+b)/(\bar{b}z+\bar{a})\ |
49 | !!!codé par [a,b,0] ou z->(a*\bar{z}+b)/(\bar{b}\bar{z}+\bar{a}) codé par [a,b,1]\ |
||
50 | !!!avec |a|>|b|; elle envoie 0 sur b/\bar{a} et le point 1 de l'horizon sur\ |
||
51 | !!!a/\bar{a}. |
||
18622 | bpr | 52 | slib_example=[4,20,16],0.1,html type=1\ |
53 | [4,8,10],0.1,html type=1\ |
||
18529 | bpr | 54 | [4,8,10],0.01,html color=blue depl=1\ |
18614 | bpr | 55 | [4,8,10],0.01,html color=blue canvasdraw type=2\ |
18530 | bpr | 56 | [4,8,10],0.01,html color=[blue,green] type=3\ |
18614 | bpr | 57 | [8,8,4,8],0.01,html canvasdraw\ |
18530 | bpr | 58 | [8,8,4,8],0.01,html \ |
59 | [4,8,6,4,6,6],0.01,html color=blue type=1\ |
||
60 | [4,8,6,4,6,6],0.01,html color=green type=2\ |
||
61 | [4,8,6,4,6,6],0.01,html color=[blue,green] type=3\ |
||
62 | [34,5,34],0.1,html color=green fill=[1]\ |
||
18457 | bpr | 63 | [6,8,10],0.1,html color=[blue,grey] fill\ |
64 | [6,8,10],0.1,html fill=[1,5,7]\ |
||
18506 | bpr | 65 | [4,8,9,8,6],0.01,html |
18449 | bpr | 66 | !exit |
67 | :proc |
||
68 | |||
18614 | bpr | 69 | !reset slib_Test slib_type slib_type0 slib_bound slib_cnt slib_size slib_color slib_dessin slib_dessin1 slib_dessin2 slib_dessin3 slib_depl slib_fill slib_dual |
18449 | bpr | 70 | !distribute items $wims_read_parm into slib_data,slib_bound,slib_option |
18506 | bpr | 71 | !set slib_gpprog=hyptiling |
18457 | bpr | 72 | !if $slib_bound<0.01 |
73 | !!reset slib_bound |
||
18449 | bpr | 74 | !endif |
18522 | bpr | 75 | !set wims_multiexec=$wims_multiexec pari |
18457 | bpr | 76 | !default slib_bound=0.01 |
18449 | bpr | 77 | !set slib_size=!getopt size in $slib_option |
78 | !default slib_size=600 |
||
79 | !set slib_color=!getopt color in $slib_option |
||
80 | !set slib_color=!declosing $slib_color |
||
18529 | bpr | 81 | !set slib_type=!getopt type in $slib_option |
18530 | bpr | 82 | !default slib_color=black |
18449 | bpr | 83 | !set slib_color=$slib_color,$(slib_color[1]) |
84 | !set slib_color=$(slib_color[1,2]) |
||
85 | !set slib_fill=!getopt fill in $slib_option |
||
86 | !set slib_fill=!declosing $slib_fill |
||
87 | !set slib_depl=!getopt depl in $slib_option |
||
18513 | bpr | 88 | !default slib_depl=0 |
18529 | bpr | 89 | !default slib_type=1 |
18614 | bpr | 90 | !if canvasdraw iswordof $slib_option |
91 | !set slib_cnt=100 |
||
92 | !if $slib_bound>1 |
||
93 | !set slib_cnt=$slib_bound |
||
94 | !else |
||
95 | !if $slib_type=3 |
||
96 | !set slib_cnt=$[$slib_cnt/2] |
||
97 | !endif |
||
98 | !endif |
||
99 | !else |
||
100 | !set slib_cnt=100 |
||
101 | !endif |
||
18449 | bpr | 102 | !set slib_pqr=!declosing $slib_data |
103 | !set slib_pqr=!exec pari [$slib_pqr] |
||
18529 | bpr | 104 | !if regular notin $slib_option |
18502 | bpr | 105 | !set slib_n=!itemcnt $slib_pqr |
18546 | bpr | 106 | !set slib_testexist=!exec pari a=[$slib_pqr];test=vecsum(vector($slib_n,i,1/a[i]))>=($slib_n-2)/2;if(a[1]%2==1, test+=a[$slib_n]!=a[2]);a=concat(a,a[1]);for(i=2,$slib_n,if(a[i]%2==1, test+=a[i-1]!=a[i+1])); test |
18506 | bpr | 107 | !if $slib_testexist>0 |
18508 | bpr | 108 | !set slib_out=error $slib_testexist>0 |
18449 | bpr | 109 | !exit |
110 | !endif |
||
111 | !endif |
||
18529 | bpr | 112 | !if regular isin $slib_option |
18468 | bpr | 113 | !if $[1/$(slib_pqr[1])+1/$(slib_pqr[2])]>=1/2 |
18529 | bpr | 114 | slib_out=Error regular |
18468 | bpr | 115 | !exit |
116 | !endif |
||
18506 | bpr | 117 | !set slib_pqr=!makelist $(slib_pqr[2]) for x=1 to $(slib_pqr[1]) |
18468 | bpr | 118 | !endif |
18506 | bpr | 119 | !set slib_testint=!exec pari t=[$slib_pqr]; t-round(t)==0 |
120 | !if $slib_testint!=1 |
||
121 | slib_out=Error integers |
||
122 | !exit |
||
123 | !endif |
||
18529 | bpr | 124 | !!if $(slib_header_$slib_gpprog)= |
18449 | bpr | 125 | !readproc gp/$slib_gpprog.gp |
18546 | bpr | 126 | !set slib_tiling=!exec pari tikz=0;$(slib_header_$slib_gpprog); |
18529 | bpr | 127 | !!endif |
128 | slib_depl:0 pas au centre |
||
129 | 1 au centre |
||
130 | 1-> 1,2 |
||
131 | 2-> 3,4 |
||
18530 | bpr | 132 | 3- > le faire en deux fois. |
133 | !set slib_type0=$slib_type |
||
134 | !if $slib_type=3 |
||
135 | !set slib_type0=1,2 |
||
136 | !else |
||
137 | !set slib_type0=$slib_type |
||
138 | !endif |
||
18546 | bpr | 139 | !set slib_tiling=!exec pari wwww=wims_catalan([$slib_pqr],$slib_bound,$slib_depl,$(slib_type0[1]));default(realprecision,3);wwww |
140 | !set slib_data=!trim $(slib_tiling[2*$(slib_type0[1])-1,2*$(slib_type0[1])]) |
||
18530 | bpr | 141 | !if $(slib_type0[1])=1 |
142 | !if fill iswordof $slib_option |
||
143 | !set slib_pol=fhyppolygon |
||
144 | !default slib_color=black,white |
||
18449 | bpr | 145 | !else |
18530 | bpr | 146 | !set slib_pol=hyppolygon |
147 | !set slib_col=$(slib_color[1]) |
||
18449 | bpr | 148 | !endif |
18530 | bpr | 149 | !else |
150 | !set slib_pol=hyprays |
||
151 | !set slib_col=$(slib_color[1]) |
||
152 | !endif |
||
18546 | bpr | 153 | !readproc slib/geo2D/offtiling |
18530 | bpr | 154 | !if $slib_type=3 |
155 | !set slib_type0=2 |
||
18546 | bpr | 156 | !set slib_tiling=!exec pari wwww=wims_catalan([$slib_pqr],$slib_bound,$slib_depl,$(slib_type0));default(realprecision,3);wwww |
157 | !set slib_data=!trim $(slib_tiling[2*$(slib_type0)-1,2*$(slib_type0)]) |
||
18530 | bpr | 158 | !set slib_pol=hyprays |
159 | !set slib_col=$(slib_color[2]) |
||
18546 | bpr | 160 | !readproc slib/geo2D/offtiling |
18530 | bpr | 161 | !endif |
162 | |||
18449 | bpr | 163 | !set slib_range=-1,1 |
164 | !set slib_out=xrange $slib_range\ |
||
165 | yrange $slib_range\ |
||
166 | circles black,0,0,1\ |
||
18614 | bpr | 167 | $slib_dessin |
168 | |||
18530 | bpr | 169 | $slib_dessin1\ |
18449 | bpr | 170 | $slib_dessin2\ |
171 | $slib_dessin3 |
||
172 | !if url iswordof $slib_option or html iswordof $slib_option |
||
18614 | bpr | 173 | insdraw_size=$slib_size,$slib_size |
174 | !if canvasdraw isin $slib_option |
||
175 | slib_out=!exec canvasdraw\ |
||
176 | size $insdraw_size\ |
||
177 | $slib_out |
||
178 | !else |
||
179 | !insdraw $slib_out |
||
180 | !set slib_out=$ins_url |
||
181 | !if html iswordof $slib_option |
||
182 | !if alt iswordof $slib_option |
||
183 | !set slib_alt=[$slib_pqr] |
||
184 | !else |
||
185 | !reset slib_alt |
||
186 | !endif |
||
187 | !set slib_out=<img src="$ins_url" alt="$slib_alt"> |
||
18460 | bpr | 188 | !else |
18614 | bpr | 189 | !set slib_out=$slib_out,$insdraw_size |
18460 | bpr | 190 | !endif |
18449 | bpr | 191 | !endif |
192 | !endif |
||
18614 | bpr | 193 | slib_out=$slib_out |