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 |