Subversion Repositories wimsdev

Rev

Rev 10990 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

!if $wims_read_parm!=slib_header
  !goto proc
!endif

slib_author=Bernadette, Perrin-Riou
slib_title=Polygone quelconque
slib_out=Random convex polygon
slib_parms=3\
,number of edges\
,color: if it is a vector of colors, the measure of the edges is written in the second color\
,option: html,url
slib_require=pari
slib_example=6,red,html\
8,[blue,black],html\
4,blue,html\
3,[blue,grey]\
3,[blue,grey],points

!exit

:proc
slib_out=
!distribute items $wims_read_parm into slib_n,slib_color,slib_option
slib_color=!declosing $slib_color
slib_m=0
!if $(slib_color[2])!=$empty
  slib_m=1
!endif
!default slib_color=green
slib_size1=50
!default slib_n=8
slib_et=!randint 1,2
slib_echelle=1.4
slib_rayon=2
slib_angle=0
slib_size=$[$slib_size1*$slib_echelle+1]
!reset slib_Point slib_Mesure slib_Dessin slib_Position
!for slib_a=1 to $slib_n
  slib_anglem=$slib_angle
  slib_angle=!randint 100*$slib_a/$slib_n +10 ,100*($slib_a+1)/$slib_n - 10
  slib_angle=$[$slib_angle/100]
  slib_anglem=$[($slib_angle + $slib_anglem)/2]
  slib_rayonm=$slib_rayon
  !if $slib_et=1
    slib_rayon=!randint $[$slib_size1/3],$slib_size1
  !else
    !if $slib_rayon > $[$slib_size1/2]
      slib_rayon=!randint $[$slib_size1/3],$[$slib_size1/2]
    !else
      slib_rayon=!randint max($[$slib_rayon+2],$[$slib_size1/10]), $[$slib_size1]
    !endif
  !endif
  slib_rayonm=$[$slib_echelle*($slib_rayon + $slib_rayonm)/2]
  slib_Point=!append line $[cos(2*pi*$slib_angle)*$slib_rayon], $[sin(2*pi*$slib_angle)*$slib_rayon] to $slib_Point
  !if $slib_a>1
    slib_mesure = $[sqrt(($(slib_Point[$slib_a-1;1]) - $(slib_Point[$slib_a;1]))^2 + ($(slib_Point[$slib_a-1;2]) - $(slib_Point[$slib_a;2]))^2)]
    slib_positionx = $[$slib_echelle*($(slib_Point[$slib_a-1;1]) + $(slib_Point[$slib_a;1]))/2]
    slib_positiony= $[$slib_echelle*($(slib_Point[$slib_a-1;2]) + $(slib_Point[$slib_a;2]))/2]
    slib_positionx=$[($[cos(2*pi*$slib_anglem)*$slib_rayonm]+$slib_positionx)/2]
    slib_positiony=$[($[sin(2*pi*$slib_anglem)*$slib_rayonm]+$slib_positiony)/2]
    slib_Position=!append line $slib_positionx,$slib_positiony to $slib_Position
    slib_Mesure=!append item $slib_mesure to $slib_Mesure
  !else
    slib_angle1=$slib_angle
    slib_rayon1=$slib_rayon
  !endif
!next slib_a

slib_mesure = $[sqrt(($(slib_Point[$slib_n;1]) - $(slib_Point[1;1]))^2 + ($(slib_Point[$slib_n;2]) - $(slib_Point[1;2]))^2)]
slib_positionx = $[$slib_echelle*($(slib_Point[$slib_n;1]) + $(slib_Point[1;1]))/2]
slib_positiony = $[$slib_echelle*($(slib_Point[$slib_n;2]) + $(slib_Point[1;2]))/2]
!!slib_positionx= $[($[cos(2*pi*($slib_angle+$slib_angle1)/2)*$slib_rayon]+$slib_positionx)/2]
!!slib_positiony= $[($[sin(2*pi*($slib_angle+$slib_angle1)/2)*$slib_rayon]+$slib_positiony)/2]
slib_Position=$slib_Position\
$slib_positionx,$slib_positiony

slib_Mesure=!append item $slib_mesure to $slib_Mesure
slib_Mesure=!exec pari round([$slib_Mesure])
slib_Point2=!lines2items $slib_Point
!if points iswordof $slib_option
  slib_out=$slib_Point2\
  $slib_Mesure
  !goto end
!endif
slib_Dessin= xrange -$slib_size,$slib_size\
yrange -$slib_size,$slib_size\
linewidth 2\
polygon $(slib_color[1]),$slib_Point2
!if $slib_m=1
  !for slib_j=1 to $slib_n
    slib_Dessin=$slib_Dessin\
text $(slib_color[2]),$(slib_Position[$slib_j;]),large,$(slib_Mesure[$slib_j])
  !next
!endif
slib_out=$slib_Dessin

insdraw_size=300,300
!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,$slib_Mesure
  !endif
!endif

:end