File: hyptiling

package info (click to toggle)
wims 2%3A4.29a%2Bdfsg1-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 185,704 kB
  • sloc: xml: 366,687; javascript: 120,570; ansic: 62,341; java: 62,170; sh: 7,744; perl: 3,937; yacc: 3,217; cpp: 1,915; lex: 1,805; makefile: 1,084; lisp: 914; pascal: 601; python: 520; php: 318; asm: 7
file content (201 lines) | stat: -rw-r--r-- 7,059 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
!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 reprsentant les paramtres de la tuile)\
0.01,eps\
size=600 color=[black,white] depl=[1,0,0] type=triangle, 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 de type triangle, kite, parallelogram ou regular.

slib_comment=La forme de la tuile est spcifie par le type (les d_i sont suprieurs  3):\
  <ul><li><span class="tt">triangle</span>: les angles du triangle de base sont 2*pi/d_1, 2*pi/d_2, 2*pi/d_3\
    avec 1/d_1+1/d_2+1/d_3<1/2, si l'un est impair, les deux autres sont gaux;</li>\
  <li><span class="tt">kite</span> (cerf-volant): les angles sont 2Pi/d_1, 2Pi/d_2, 2Pi/d_3, 2Pi/d_2 \
    avec 1/d_1+2/d_2+1/d_3<1, si d_2 est impair, d_1=d_3</li>\
  <li><span class="tt">parallelogram</span>: 1/d_1+1/d_2<1/2,\
    deux angles 2*pi/d_1 et 2*pi/d_2, dpend d'un paramtre mu strictement plus petit que  1,\
    si d_1 ou d_2 est impair, on doit prendre mu=1/2. </li>\
  <li><span class="tt">regular</span>: avec 1/d_1+1/d_2<1/2, polygone  d_1 cts gaux,\
    et d_1 angles gaux  2*pi/d_2.</li>\
  </ul>\
  Le pavage (qui est thoriquement infini) est limit au cercle de rayon 1-eps (eps>0.04).\
  Cependant, le nombre de polygones dessins est limit  500.\
  Si eps est un entier, seules les esp premires tuiles sont dessines.\
  <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=[4,8,10],0.01,html\
[8,8,4],0.01,html color=blue type=kite\
[5,8,3],0.01,color=black html type=kite\
[6,8,10],0.1,html color=[blue,grey] fill\
[6,8,10],0.1,color=blue html depl=[1,0.5,1]\
[6,8,10],6,html color=blue\
[5,8,3],0.04,color=black html type=kite\
[5,8,3],0.04,color=black html type=kite depl=[1,0.5,1]\
[4,6,0.7],0.01, html type=parallelogram\
[6,8,10],0.1,html fill=[1,5,7]\
[5,6,0.5],0.01, html color=[grey,blue] type=parallelogram fill=[1,2,3,4,5,6,7]\
[34,5,34],0.1,html\
[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,6,0.7],0.01, html type=parallelogram

!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=pavage_hyper
!if $slib_bound<0.01
  !!reset slib_bound
!endif
!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
!if $slib_type=$empty
  !set slib_type=triangle
!endif
!set slib_depl=!getopt depl in $slib_option
!default slib_depl=1,0,0
!set slib_pqr=!declosing $slib_data
!set slib_pqr=!exec pari [$slib_pqr]
!if $(slib_pqr[1])<=2 or $(slib_pqr[2])<=2 or ($slib_type notwordof regular parallelogram and $(slib_pqr[3])<=2)
  slib_out=Error pas d'angle plat
  !exit
!endif
!if $slib_type issametext kite
  !if ($[$(slib_pqr[2])%2]=1 and $(slib_pqr[1])!=$(slib_pqr[3]))\
  or $[1/$(slib_pqr[1])+2/$(slib_pqr[2])+1/$(slib_pqr[3])]>1
    slib_out=Error $slib_type
    !exit
  !endif
  !set slib_testint=!exec pari t=[$slib_pqr]; t-round(t)==0
  !if $slib_testint!=1
    slib_out= Error integers
  !exit
  !endif
!endif
!if $slib_type issametext parallelogram
  !if $[1/$(slib_pqr[1])+1/$(slib_pqr[2])]>=1/2 or $(slib_pqr[3])>=1 or \
    (($[$(slib_pqr[2])%2]=1 or $[$(slib_pqr[2])%2]=1) and $(slib_pqr[3])!=1/2)
    slib_out=Error $slib_type
    !exit
  !endif
  !set slib_testint=!exec pari t=[$(slib_pqr[1,2])]; t-round(t)==0
  !if $slib_testint!=1
    slib_out= Error integers
    !exit
  !endif
!endif
!if $slib_type issametext triangle
  !if 1/$(slib_pqr[1]) + 1/$(slib_pqr[2])+1/$(slib_pqr[3])>=1/2 or\
    ($[$(slib_pqr[1])%2]=1 and $(slib_pqr[2])!=$(slib_pqr[3])) or\
    ($[$(slib_pqr[2])%2]=1 and $(slib_pqr[1])!=$(slib_pqr[3])) or\
    ($[$(slib_pqr[3])%2]=1 and $(slib_pqr[2])!=$(slib_pqr[1]))
    slib_out=Error $slib_type
    !exit
  !endif
  !set slib_testint=!exec pari t=[$slib_pqr]; t-round(t)==0
  !if $slib_testint!=1
    slib_out=Error triangle
    !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_testint=!exec pari t=[$slib_pqr]; t-round(t)==0
  !if $slib_testint!=1
    slib_out=Error integers
    !exit
  !endif
!endif
!set wims_multiexec=$wims_multiexec pari
!if $slib_header_coxhyp=
  !readproc gp/$slib_gpprog.gp
  !set slib_coxhyp=!exec pari tikz=0;$slib_header_coxhyp;
!endif
!set slib_coxhyp=!exec pari wwww=$slib_type($slib_pqr,$slib_bound,[$slib_depl]);default(realprecision,3);wwww
!set slib_data=!trim $slib_coxhyp
!! 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