Subversion Repositories wimsdev

Rev

Rev 16649 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
16538 bpr 1
!if $wims_read_parm!=slib_header
2
  !goto proc
3
!endif
4
 
16627 bpr 5
slib_author=
16538 bpr 6
slib_parms=6\
7
,[zone de dessin x min,max et y min,max]\
8
,coordonnees des 2 points D=(xb,yb) et F=(xe,ye)\
16559 bpr 9
,(optionnel) sens de la parabole up pour dessus du segment, down en dessous
16538 bpr 10
 
11
slib_title=
12
 
16627 bpr 13
slib_out=3ème point x,y de la courbe par la méthode de Bezier, \
14
  puis les points (éventuellement) modifiés de départ et d'arrivée de la courbe.\
15
  doit pouvoir être amélioré !
16538 bpr 16
 
17
slib_comment=[zone de dessin xmin et xmax,zone de dessin ymin et ymax],\
16619 bpr 18
  coordonnées xb et yb du point D,coordonnées xe et ye du point F,\
16627 bpr 19
  (optionnel) sens de la parabole up dessus et down dessous
16538 bpr 20
 
16649 bpr 21
slib_example=[-10,10,-10,10],8,8,-7,0,down\
22
[-10,10,-10,10],8,8,-7,0,up\
23
[-10,10,-10,10],8,0,-7,8,down\
24
[-10,10,-10,10],8,0,-7,8,up\
25
[-10,10,-10,10],8,0,-7,0,down\
26
[-10,10,-10,10],8,0,-7,0,up\
27
[-10,10,-10,10],-7,0,8,8,down\
28
[-10,10,-10,10],-7,0,8,8,up\
29
[-10,10,-10,10],-7,8,8,0,down\
30
[-10,10,-10,10],-7,8,8,0,up\
31
[-10,10,-10,10],-7,0,8,0,down\
32
[-10,10,-10,10],-7,0,8,0,up\
33
[-10,10,-10,10],8,0,8,8,down\
34
[-10,10,-10,10],8,0,8,8,up\
35
[-10,10,-10,10],8,8,8,0,down\
36
[-10,10,-10,10],8,8,8,0,up\
16538 bpr 37
 
38
!exit
39
 
40
:proc
41
 
42
!!--- init
16633 bpr 43
!reset slib_out slib_med
16538 bpr 44
!distribute items $wims_read_parm into slib_zone,slib_xb,slib_yb,slib_xe,slib_ye,slib_pos
45
!set slib_zone=!declosing $slib_zone
46
!set slib_xmin=$($slib_zone[1])
47
!set slib_xmax=$($slib_zone[2])
48
!set slib_ymin=$($slib_zone[3])
49
!set slib_ymax=$($slib_zone[4])
16619 bpr 50
slib_xy=$slib_xb,$slib_yb,$slib_xe,$slib_ye
16649 bpr 51
!!slib_xyinitial=$slib_xy
52
!!distribute items $slib_xy into slib_xb,slib_yb,slib_xe,slib_ye
16641 bpr 53
!!--- calculs pour trouver down ou up
54
!if $slib_pos=
55
  !set slib_L=$[sqrt((($slib_xe-$slib_xb)^2)+(($slib_ye-$slib_yb)^2))]
56
  !set slib_xm=$[($slib_xe+$slib_xb)/2]
57
  !set slib_ym=$[($slib_ye+$slib_yb)/2]
58
  !set slib_m=$[max($[$slib_xmax-$slib_xmin],$[$slib_ymax-$slib_ymin])]
59
  !set slib_b=$[min($[$slib_xmax-$slib_xm],$[$slib_ymax-$slib_ym])]
60
  !set slib_d=$[min($[$slib_xm-$slib_xmin],$[$slib_ym-$slib_ymin])]
61
  !set slib_s=$[max($[($slib_m-$slib_L)/4],$[$slib_m/10])]
62
  !if $slib_s < $slib_b
63
    !set slib_pos=up
64
  !else
65
    !set slib_pos=down
66
  !endif
67
!endif
68
!!on change un peu les extrémités
16619 bpr 69
!distribute item 0,0,0,0, into slib_signxb,slib_signyb,slib_signxe,slib_signye
16635 bpr 70
!set slib_ss=1
16627 bpr 71
!if $slib_pos=up
72
  !set slib_ss=1
16635 bpr 73
!endif
74
!if $slib_pos=down
16627 bpr 75
  !set slib_ss=-1
76
!endif
16619 bpr 77
!if $slib_xb < $slib_xe and $slib_yb < $slib_ye
16649 bpr 78
    !distribute item 0,$slib_ss,0,($slib_ss) into slib_signxb,slib_signyb,slib_signxe,slib_signye
16619 bpr 79
!endif
80
!if $slib_xb < $slib_xe and $slib_yb > $slib_ye
16649 bpr 81
  !distribute item 0,($slib_ss),0,($slib_ss) into slib_signxb,slib_signyb,slib_signxe,slib_signye
16619 bpr 82
!endif
83
!if $slib_xb < $slib_xe and $slib_yb = $slib_ye
16649 bpr 84
  !distribute item 0,$slib_ss,0,$slib_ss into slib_signxb,slib_signyb,slib_signxe,slib_signye
16619 bpr 85
!endif
86
!if $slib_xb > $slib_xe and $slib_yb < $slib_ye
16649 bpr 87
  !distribute item 0,$slib_ss,0,$slib_ss into slib_signxb,slib_signyb,slib_signxe,slib_signye
16619 bpr 88
!endif
89
!if $slib_xb > $slib_xe and $slib_yb > $slib_ye
16649 bpr 90
  !distribute item 0,$slib_ss,0,$slib_ss into slib_signxb,slib_signyb,slib_signxe,slib_signye
16619 bpr 91
!endif
92
!if $slib_xb > $slib_xe and $slib_yb = $slib_ye
16649 bpr 93
  !distribute item 0,$slib_ss,0,$slib_ss into slib_signxb,slib_signyb,slib_signxe,slib_signye
16619 bpr 94
!endif
95
!if $slib_xb = $slib_xe and $slib_yb > $slib_ye
16627 bpr 96
  !distribute item $slib_ss,0,$slib_ss,0 into slib_signxb,slib_signyb,slib_signxe,slib_signye
16619 bpr 97
!endif
98
!if $slib_xb = $slib_xe and $slib_yb < $slib_ye
16627 bpr 99
  !distribute item $slib_ss,0,$slib_ss,0 into slib_signxb,slib_signyb,slib_signxe,slib_signye
16619 bpr 100
!endif
101
!set slib_med=!getopt med in $wims_read_parm
102
!if $(slib_med[1])=0
103
  !distribute items 0,0 into slib_signxb,slib_signyb
104
!endif
105
!if $(slib_med[2])=0
106
  !distribute items 0,0 into slib_signxe,slib_signye
107
!endif
108
!set slib_tmp=0.15
109
slib_tmp=($slib_signxb)*$slib_tmp,($slib_signyb)*$slib_tmp,($slib_signxe)*$slib_tmp,($slib_signye)*$slib_tmp
110
slib_xy=!exec pari [$slib_xy]+3*[$slib_tmp]
16538 bpr 111
 
16619 bpr 112
!distribute items $slib_xy into slib_xb,slib_yb,slib_xe,slib_ye
16538 bpr 113
!!--- calculs preliminaires
114
!set slib_L=$[sqrt((($slib_xe-$slib_xb)^2)+(($slib_ye-$slib_yb)^2))]
115
 
116
!set slib_xm=$[($slib_xe+$slib_xb)/2]
117
!set slib_ym=$[($slib_ye+$slib_yb)/2]
118
 
119
!set slib_m=$[max($[$slib_xmax-$slib_xmin],$[$slib_ymax-$slib_ymin])]
120
!set slib_b=$[min($[$slib_xmax-$slib_xm],$[$slib_ymax-$slib_ym])]
121
!set slib_d=$[min($[$slib_xm-$slib_xmin],$[$slib_ym-$slib_ymin])]
122
 
123
!set slib_s=$[max($[($slib_m-$slib_L)/4],$[$slib_m/10])]
124
 
16559 bpr 125
!if $slib_pos issametext up
16538 bpr 126
  !set slib_h=$[min($slib_s,$slib_b)]
127
!else
16559 bpr 128
  !if $slib_pos issametext down
16538 bpr 129
    !set slib_h=$[-min($slib_s,$slib_d)]
130
  !endif
131
!endif
132
 
133
!!--- determination XC,YC
134
 
16541 bpr 135
!if $[abs(($slib_xb-$slib_xe))] < 1.E-6
16538 bpr 136
  !set slib_xc=$[$slib_xb+$slib_h]
137
  !set slib_yc=$slib_ym
138
!else
139
  !set slib_r=$[($slib_ye-($slib_yb))/($slib_xe-($slib_xb))]
140
  !set slib_xc=$[-($slib_h*$slib_r/(1+($slib_r)^2)^0.5) + (($slib_xb+$slib_xe)/2)]
141
  !set slib_yc=$[($slib_h/((1+($slib_r)^2)^0.5)) + (($slib_yb+$slib_ye)/2)]
142
!endif
143
 
16619 bpr 144
slib_out=$slib_xc,$slib_yc,$slib_xy
16649 bpr 145
 
146
!!for debug
147
!!!slib_out=!exec canvasdraw\
148
!!!size 400,400\
149
!!!xrange $(slib_zone[1,2])\
150
!!!yrange $(slib_zone[3,4])\
151
!!!grid 1,1,grey\
152
!!!linewidth 4\
153
!!!points red, $slib_xyinitial\
154
!!!linewidth 1\
155
!!!curvedarrows blue,$(slib_out[3,4,1,2,5,6])
156