Rev 16841 | Blame | Compare with Previous | Last modification | View Log | RSS feed
!if $wims_read_parm!=slib_header
!goto proc
!endif
slib_title=Polygone tracé à partir des pentes (dessin)
slib_author=Bernadette, Perrin-Riou
slib_parms=3\
,list of slopes or vector of such lists\
,vector of colors [lines, points, axes, grid] or vector of such vectors\
,option: html, url, canvas
slib_author=Bernadette, Perrin-Riou
slib_out= drawing (or data for drawing) of a polygon given by its slopes \
(with repetition : each slope corresponds to an unit on x-axis).
slib_comment=
slib_example=[0,1,3,4,6,8],[red,black,green,grey],html\
[0,1,3,4,6,8],[red,black,green,grey],html canvas\
[[0,2,3,5],[1,3,6,7]],[[red,black,green],[navy,yellow]],html canvas\
[[0,2,3,5],[1,3,6,7],[2,3,7,5]],[[red,black,green],[navy,yellow],[yellow]],html\
[0,1,3,4,6,7],[red,black,green],html\
[0,1,1,1,2,3,4],[red,black],html\
[1/2,1/2,2/3,2/3,2/3],[red,,green],html\
[1/2,-1/2,1/2,4,-1,-3,-5],[red,black,green],html\
[1/2,-1/2,1/2,4,-1,-3,-5],[red,black,green],canvas\
[1/2,-1/2,1/2,4,-1,-3,-5],[red,black,green]
!exit
:proc
!distribute items $wims_read_parm into slib_slope, slib_color,slib_option
!reset slib_Ligne slib_Points
!default slib_cgraph1=black
!default slib_cpoint1=black
!set slib_slope_test=!declosing $slib_slope
!set slib_number=!itemcnt $slib_slope_test
!set slib_test=!item 1 of $slib_slope_test
!if , notin $slib_test
!set slib_number=1
!else
!set slib_slope=!declosing $slib_slope
!set slib_color=!declosing $slib_color
!endif
pari_header_=(polygon (slope,decal)={\
my (a,b, r=1, s, zero) ; nsl=1 ;\
if (slope==0, return(0)) ;\
line=matrix(#slope+1,2);\
a=0 ; b=0 ; s=slope[1] ;\
line[1,1]=0;line[1,2]=0;\
for ( i=1, #slope, if( i < #slope, s1=slope[i+1],s1=jeton) ;\
if(s1 == s, r=r + 1 ,\
r=1 ;\
line[nsl+1,1]=i ; line[nsl+1,2]=b+s ;\
nsl=nsl+1;\
) ;\
b=b+s ; s=s1 ;\
) ;\
[matrix(nsl,2,i,j,line[i,j]+decal)] \
};)
!set pari_header=$pari_header_
!set slib_infini=!exec pari valuation(0,2)
!set slib_slope=!replace internal infty by $slib_infini in $slib_slope
!set slib_x1=-1
!set slib_x2=1
!set slib_y1=-1
!set slib_y2=1
!set slib_size1=2
!set slib_size2=2
!set slib_decal=0
!for slib_t=1 to $slib_number
!set slib_color$slib_t=!declosing $(slib_color[$slib_t])
!distribute items $(slib_color$slib_t) into slib_cgraph$slib_t,slib_cpoint$slib_t,slib_caxe$slib_t,slib_cquad$slib_t
!default slib_cgraph$slib_t=$slib_cgraph1
!default slib_cpoint$slib_t=$slib_cpoint1
!set slib_slope$slib_t=$(slib_slope[$slib_t])
!set slib_slope$slib_t=!declosing $(slib_slope$slib_t)
!set slib_size1$slib_t=!itemcnt $(slib_slope$slib_t)
!set slib_size1=$[max($slib_size1,$(slib_size1$slib_t))]
!set slib_pol$slib_t=!exec pari $pari_header ; polygon([$(slib_slope$slib_t)],$slib_decal)
!set slib_decal=$[$slib_decal + 0.05]
!set slib_polygon$slib_t=!declosing $(slib_pol$slib_t)
!set slib_tmp=$(slib_polygon$slib_t)
!set slib_pointy$slib_t=$(slib_tmp[;2])
!set slib_points$slib_t=!replace internal ; by , in $(slib_polygon$slib_t)
!set slib_zero$slib_t=!declosing $(slib_tmp[2])
!set slib_x2=$[max($(slib_size1$slib_t),$slib_x2)]
!set slib_y1_=!replace internal $slib_infini by in $(slib_pointy$slib_t)
!set slib_y1_=!declosing $(slib_y1_)
!set slib_y1_=!nonempty items $(slib_y1_)
!set slib_y1_=!sort numeric items $slib_y1_
!set slib_y1=$[min($slib_y1,$(slib_y1_[1]))]
!set slib_y2= $[max($slib_y2,$(slib_y1_[-1]))]
!if $(slib_cgraph$slib_t)!=
!set slib_Ligne=!append line polyline $(slib_cgraph$slib_t),$(slib_points$slib_t) to $slib_Ligne
!endif
!if $(slib_cpoint$slib_t)!=
!set slib_Points=!append line points $(slib_cpoint$slib_t),$(slib_points$slib_t) to $slib_Points
!endif
!next
!set slib_x2=$[$slib_x2+1]
!set slib_y1=$[$slib_y1-1]
!set slib_y2=$[$slib_y2+2]
!set slib_size1=$[$slib_size1+2]
!set slib_size2=$[$slib_y2 -$slib_y1 + 3]
!if canvas iswordof $slib_option
!set slib_size_points=2
!else
!set slib_size_points=4
!endif
!set slib_dessin=xrange $slib_x1,$slib_x2\
yrange $slib_y1,$slib_y2
!if $slib_cquad1!=
slib_dessin=$slib_dessin\
parallel $slib_x1,$slib_y1,$slib_x1,$slib_y2,1,0,$slib_size1,$slib_cquad1\
parallel $slib_x1,$slib_y1,$slib_x2,$slib_y1,0,1,$slib_size2,$slib_cquad1
!endif
slib_dessin=$slib_dessin\
linewidth 2
!if $slib_caxe1!=
slib_dessin=$slib_dessin\
hline 0,0,$slib_caxe1\
vline 0,0,$slib_caxe1
!endif
slib_dessin=$slib_dessin\
$slib_Ligne
!if $slib_cpoint1!=
!set slib_dessin=$slib_dessin\
linewidth $slib_size_points\
$slib_Points\
linewidth 1
!endif
slib_out=$slib_dessin
!if canvas isin $slib_option
slib_out=!exec canvasdraw size 300,300\
$slib_out
!else
!if url iswordof $slib_option or html iswordof $slib_option
insdraw_size=300,300
!insdraw $slib_out
slib_out=$ins_url
!if html iswordof $slib_option
slib_out=<img src="$ins_url" alt="">
!else
slib_out=$slib_out,$insdraw_size
!endif
!endif
!endif