Rev 17173 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
20 | reyssat | 1 | !if $wims_read_parm!=slib_header |
13587 | bpr | 2 | !goto proc |
20 | reyssat | 3 | !endif |
4158 | bpr | 4 | |
4351 | bpr | 5 | slib_author=Bernadette, Perrin-Riou |
4158 | bpr | 6 | |
4172 | bpr | 7 | slib_example=5,2,[a,b,c,d],blue,red\ |
8 | 5,2,[a,b,c,d],blue,red,html |
||
9 | |||
3265 | bpr | 10 | slib_require=pari |
20 | reyssat | 11 | !exit |
12 | |||
13 | :proc |
||
14 | |||
17946 | bpr | 15 | !distribute item $wims_read_parm into slib_n,slib_s,slib_text,slib_color1,slib_color2,\ |
16 | slib_option, slib_segment slib_dess |
||
20 | reyssat | 17 | |
18 | !default slib_s=2 |
||
19 | slib_color1=!declosing $slib_color1 |
||
20 | slib_color2=!declosing $slib_color2 |
||
21 | !default slib_color1=blue |
||
22 | !default slib_color2=green |
||
17946 | bpr | 23 | !!default slib_text=!values x for x=1 to $slib_n |
20 | reyssat | 24 | |
25 | slib_text=!declosing $slib_text |
||
26 | !if [ isin $slib_s |
||
12676 | bpr | 27 | slib_G=!declosing $slib_s |
20 | reyssat | 28 | !else |
14860 | bpr | 29 | slib_liste= |
17946 | bpr | 30 | !for slib_i=1 to $slib_n |
14860 | bpr | 31 | slib_liste1=!values 1 for x=1 to $slib_s |
32 | slib_liste0=!values 0 for x=1 to $[$slib_n-$slib_i-$slib_s] |
||
33 | slib_liste2=!shuffle $slib_liste1,$slib_liste0 |
||
34 | slib_liste2=1,$slib_liste2 |
||
35 | slib_liste2=!item 1 to $[$slib_n-$slib_i+1] of $slib_liste2 |
||
36 | slib_liste=!append item $slib_liste2 to $slib_liste |
||
37 | !next slib_i |
||
38 | slib_liste=!nonempty items $slib_liste |
||
17946 | bpr | 39 | slib_G=!exec pari slib_n=$slib_n;slib_liste=[$slib_liste];slib_M=matrix(slib_n,slib_n,slib_i,slib_j, if(slib_i < slib_j,slib_liste[slib_n*(slib_n-1)/2-(slib_n-slib_i+1)*(slib_n-slib_i)/2 +slib_j-slib_i]));for(slib_i=2,slib_n-1,if(slib_M[,slib_i]==0,slib_M[1,slib_i]=1);if(slib_M[slib_i,]==0,slib_M[slib_i,slib_n]=1));slib_M[1,slib_n]=0; slib_M |
20 | reyssat | 40 | |
41 | !endif |
||
42 | slib_GG=!translate internal ; to $\ |
||
43 | $ in $slib_G |
||
44 | |||
45 | ########################## |
||
8321 | bpr | 46 | slib_niveau=!exec pari slib_n=$slib_n;slib_M=Mat([$slib_G]);slib_niveau=matrix(slib_n,slib_n);slib_niveau[1,1]=1;slib_degp=vector(slib_n,i,sum(x=1,slib_n,slib_M[x,i]));for(slib_k=1,slib_n-1,for(slib_i=1,slib_n,if(slib_niveau[slib_k,slib_i]!=0,for(slib_j=1,slib_n,if(slib_M[slib_i,slib_j]!=0,slib_degp[slib_j]-=1;if(slib_degp[slib_j]==0,slib_niveau[slib_k+1,slib_j]=1));););););slib_niveau |
20 | reyssat | 47 | slib_height=!exec pari slib_n=$slib_n;slib_niveau=Mat([$slib_niveau]);slib_k=slib_n;for(slib_i=1,slib_n,if(slib_niveau[slib_i,]==0,slib_k=slib_i-1;break));print(slib_k); |
48 | |||
17946 | bpr | 49 | slib_width=!exec pari slib_niveau=Mat([$slib_niveau]); vecmax(vector($slib_height,i, sum(j=1,$slib_n, slib_niveau[i,j]))) |
20 | reyssat | 50 | |
51 | #hauteur des paraboles sur lesquelles sont mis les points |
||
17946 | bpr | 52 | slib_listeb=!values ($slib_width/2+1-x)*0.98111111/$slib_width for x=1 to $[ceil($slib_width/2)] |
53 | slib_listeb=!makelist x,-x for x in $slib_listeb |
||
54 | slib_niveau=!exec pari slib_niveau=Mat([$slib_niveau]); matrix($slib_height,$slib_n,i,j,slib_niveau[i,j]) |
||
55 | slib_position=!exec pari matrix($slib_n,2) |
||
20 | reyssat | 56 | slib_position=!translate internal ; to $\ |
57 | $ in $slib_position |
||
58 | slib_niveau1=!translate internal ; to $\ |
||
59 | $ in $slib_niveau |
||
60 | slib_sign=1 |
||
61 | !for slib_i=1 to $slib_height |
||
12676 | bpr | 62 | slib_eps1=!item $slib_i of $slib_eps |
17946 | bpr | 63 | slib_ligne=!line $slib_i of $slib_niveau1 |
12676 | bpr | 64 | slib_test=0 |
17946 | bpr | 65 | slib_total=!replace internal , by + in $slib_ligne |
12676 | bpr | 66 | slib_total=$[$slib_total] |
67 | !if $slib_total=1 |
||
68 | slib_sign=$[-$slib_sign] |
||
69 | !endif |
||
20 | reyssat | 70 | |
17946 | bpr | 71 | slib_dist=$[round($slib_width/$slib_total)] |
72 | !for slib_j=1 to $slib_n |
||
12676 | bpr | 73 | slib_pt=!item $slib_j of $slib_ligne |
74 | !if $slib_pt <>0 |
||
75 | !advance slib_test |
||
76 | slib_bb=!item $[($slib_test)*$slib_dist] of $slib_listeb |
||
77 | slib_position=!replace internal line number $slib_j by $[$slib_i-1], $[$slib_sign*$slib_bb*$slib_i*($slib_height -$slib_i)] in $slib_position |
||
78 | !endif |
||
79 | !next slib_j |
||
20 | reyssat | 80 | !next slib_i |
81 | #dessin |
||
82 | #################### |
||
17946 | bpr | 83 | slib_yrange1=$[-$slib_height^2/8-0.5] |
20 | reyssat | 84 | slib_yrange2=$[$slib_height^2/8+0.5] |
85 | #################### |
||
86 | |||
17946 | bpr | 87 | !for slib_i=0 to $[floor($slib_height/2+2)] |
88 | slib_dess=!append line pointfill 2*$slib_i,0,3,3,yellow to $slib_dess |
||
20 | reyssat | 89 | !next slib_i |
90 | # laisser en premier les lignes correspondant aux sommets |
||
17946 | bpr | 91 | !for slib_i=1 to $slib_n |
12676 | bpr | 92 | slib_point=!line $slib_i of $slib_position |
17946 | bpr | 93 | slib_dess=!append line disk $slib_point, 6, $slib_color2 to $slib_dess |
94 | !for slib_j=$slib_i to $slib_n |
||
12676 | bpr | 95 | slib_ligne=!line $slib_i of $slib_GG |
96 | slib_test=!item $slib_j of $slib_ligne |
||
97 | !if $slib_test <> 0 |
||
98 | slib_point1=!line $slib_j of $slib_position |
||
17946 | bpr | 99 | slib_interm=!exec pari ([$slib_point]+2*[$slib_point1])/3 |
100 | slib_segment=!append item $slib_point, $slib_point1 to $slib_segment |
||
101 | slib_dess=!append line arrow $slib_point, $slib_interm, 10, $slib_color1 to $slib_dess |
||
8321 | bpr | 102 | !endif |
12676 | bpr | 103 | !next slib_j |
104 | !if $slib_text<>$empty |
||
105 | slib_texti=!item $slib_i of $slib_text |
||
17946 | bpr | 106 | slib_dess=!append line text black,$slib_point, medium, $slib_texti to $slib_dess |
12676 | bpr | 107 | !endif |
20 | reyssat | 108 | !next slib_i |
17946 | bpr | 109 | slib_dessin=xrange -0.5, $[$slib_height]\ |
110 | yrange $slib_yrange1, $slib_yrange2\ |
||
111 | parallel -0.5,$slib_yrange1,-0.5,$slib_yrange2,1,0, $[$slib_height+2],yellow\ |
||
112 | segments $slib_color1, $slib_segment\ |
||
113 | $slib_dess |
||
114 | slib_out=$slib_dessin |
||
4172 | bpr | 115 | !if url iswordof $slib_option or html iswordof $slib_option |
116 | insdraw_size=450,250 |
||
117 | !insdraw $slib_out |
||
118 | slib_out=$ins_url |
||
119 | !if html iswordof $slib_option |
||
17173 | bpr | 120 | slib_out=<img src="$ins_url" alt=""> |
4908 | bpr | 121 | !else |
12676 | bpr | 122 | slib_out=$slib_out,[$slib_G],[$slib_niveau], [$slib_position],$insdraw_size |
4172 | bpr | 123 | !endif |
12676 | bpr | 124 | !else |
125 | slib_out=$slib_dessin,[$slib_G],[$slib_niveau], [$slib_position] |
||
4172 | bpr | 126 | !endif |