2 %%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software
4 %%CreationDate: Sun Mar 23 09:54:17 2008
7 %%BoundingBox: 0 0 596 842
8 %%DocumentPaperSizes: a4
10 %DVIPSWebPage: (www.radicaleye.com)
11 %DVIPSCommandLine: dvips test_08
12 %DVIPSParameters: dpi=600
13 %DVIPSSource: TeX output 2008.03.23:0954
14 %%BeginProcSet: tex.pro 0 0
16 /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
17 N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
18 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
19 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
20 landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
21 mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
22 matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
23 exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
24 statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
25 N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
26 /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
27 /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
28 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
29 df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
30 definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
31 }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
32 B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
33 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
34 /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
35 setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
36 restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
37 /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
38 }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
39 bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
40 mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
41 SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
42 userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
43 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
44 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
45 /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
46 /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
47 (LaserWriter 16/600)]{A length product length le{A length product exch 0
48 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
49 end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
50 grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
51 imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
52 exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
53 fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
54 delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
55 B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
56 p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
57 rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
60 %%BeginProcSet: pstricks.pro 0 0
62 % PostScript prologue for pstricks.tex.
63 % Version 1.02, 2007/09/13
64 % For distribution and copyright, see pstricks.tex.
66 /tx@Dict 200 dict def tx@Dict begin
68 /CM { matrix currentmatrix } bind def
69 /SLW /setlinewidth load def
70 /CLW /currentlinewidth load def
71 /CP /currentpoint load def
72 /ED { exch def } bind def
74 /T /translate load def
77 /Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def % return 0 for negative arguments
78 /Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known
79 /ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter)
80 /Div { dup 0 eq { pop } { div } ifelse } def % control the division
81 /Tan { dup sin exch cos Div } def % sin(x)/cos(x) x in degrees
82 /NET { neg exch neg exch T } def % change coordinate system to the negative one
83 /Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, expects 2 parameter
84 /Pyth2 { % Pythagoras, xA yA xB yB
85 3 -1 roll % xA xB yB yA
87 3 1 roll % yB-yA xA xB
90 /PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian
91 %----------------- hv added 20050516 ---------------
93 /TwoPi 6.28318530718 def
94 /Euler 2.71828182846 def
95 /RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees
96 /DegtoRad { Pi mul 180 div } bind def % viceversa
97 %----------------- hv end---------------------------
98 /PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def
99 /PathLength { flattenpath /z 0 def
100 { /y1 ED /x1 ED /y2 y1 def /x2 x1 def
101 }{ /y ED /x ED PathLength@ } {} { /y y2 def /x x2 def PathLength@ }
102 /pathforall load stopped { pop pop pop pop } if z } def
103 /STP { .996264 dup scale } def
104 /STV { SDict begin normalscale end STP } def
106 %%-------------- DG begin patch 15 ---------------%%
107 %/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def
108 %PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y
109 %mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul
110 %/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ]
111 %0 } ifelse setdash stroke } def
113 dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse
114 /b ED /x1 ED /y1 ED /x ED /y ED
115 /z y x add y1 add x1 add def
116 /Coef b a .5 sub 2 mul y mul sub z Div round
117 z mul a .5 sub 2 mul y mul add b exch Div def
122 x1 0 gt y1 0 gt or x 0 gt or y 0 gt and
123 { [ y x y1 x1 ] 1 a sub y mul }
127 %%-------------- DG end patch 15 ---------------%%
130 /a ED /z ED /y CLW def
141 [ 0 b b z Div round Div dup 0 le { pop 1 } if ]
142 a 0 gt { 0 }{ y 2 div a -2 gt { neg }if } ifelse
143 setdash 1 setlinecap stroke
146 /LineFill { % hv ------------ patch 7 -------------
148 abs /hatchWidthInc ED
151 a 0 dtransform round exch round exch
154 idtransform pop /a ED
155 .25 .25 itransform pathbbox
157 a Div ceiling cvi /x2 ED /y1 ED
158 a Div cvi /x1 ED /y2 y2 y1 sub def
163 /setstrokeadjust known { true setstrokeadjust } if
165 x1 a mul y1 moveto 0 y2 rlineto stroke
167 hatchWidthInc 0 gt { CLW add } if
169 hatchSepInc 0 gt hatchWidthInc 0 gt or {
170 /a a hatchSepInc add def
171 CLW hatchWidthInc add SLW
177 %gsave abs CLW add /a ED a 0 dtransform round exch round exch
178 %2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25
179 %% DG/SR modification begin - Dec. 12, 1997 - Patch 2
180 %%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
181 %itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
182 %% DG/SR modification end
183 %Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict
184 %/setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1
185 %% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
186 %% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore }
188 %a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore
190 %% DG/SR modification end
192 /BeginArrow { ADict begin
197 3 index sub exch Atan
201 /EndArrow { @mtrx setmatrix CP grestore end } def
208 { 0 h T 1 -1 scale } if
210 0 0 L w h L w neg a neg rlineto
216 z -2 div CLW 2 div moveto
222 CLW mul add dup CLW sub 2 div
223 /x ED mul CLW add /y ED /z CLW 2 div def
225 x neg CLW 2 div L x CLW 2 div L x y L stroke
230 CLW mul add dup 2 div
231 /x ED mul /y ED /mtrx CM def
232 0 CLW 2 div T x y mul 0 ne { x y scale } if
234 .85 .5 .35 0 0 0 curveto
235 -.35 0 -.85 .5 -1 1 curveto
236 mtrx setmatrix stroke 0 CLW moveto
239 /SD { 0 360 arc fill } def
241 /EndDot { % DS is the dot size
242 { /z DS def } { /z 0 def } ifelse
243 /b ED 0 z DS SD b { 0 z DS CLW sub SD } if
244 0 DS z add CLW 4 div sub moveto } def
246 /Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
247 /closepath load } /pathforall load stopped { pop pop pop pop CP /moveto
248 load } if ] cvx newpath 3 1 roll T exec } def
250 /NArray { aload length 2 div dup dup cvi eq not { exch pop } if /n exch
252 /NArray { % holds the coordinates and on top of stack the showpoints boolean
254 counttomark 2 div dup cvi /n ED
255 n eq not { exch pop } if
256 f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
260 { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def
262 CP 4 2 roll ArrowB L pop pop
265 /Arcto { /a [ 6 -2 roll ] cvx def a r /arcto load stopped { 5 } { 4 }
266 ifelse { pop } repeat a } def
267 /CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
268 and { pop pop /n n 1 sub def } if } def
269 /Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop }
270 repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1
271 ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1
272 moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto
273 Lineto pop pop closepath } ifelse } def
279 dup 0 eq { pop } { CLW mul neg
282 /h d a sin Div h add def
283 /w d a cos Div w add def } ifelse
284 mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 div
285 /ArrowA { moveto } def
288 closepath mtrx setmatrix } def
289 % DG modification begin - Jan. 15, 1997
290 %/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq {
291 %pop } { CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
292 %div dup cos exch sin Div mul sub def } ifelse mark 0 d w neg d 0 h w d 0
293 %d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
295 /Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup
296 CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
297 div dup cos exch sin Div mul sub def mark 0 d w neg d 0 h w d 0
298 d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
299 % DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
302 % DG/SR modification end
303 /CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth
305 /CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth
307 /CC { /l0 l1 def /x1 x dx sub def /y1 y dy sub def /dx0 dx1 def /dy0 dy1
308 def CCA /dx dx0 l1 c exp mul dx1 l0 c exp mul add def /dy dy0 l1 c exp
309 mul dy1 l0 c exp mul add def /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos
310 abs b exp a mul dx dy Pyth Div 2 div def /x2 x l0 dx mul m mul sub def
311 /y2 y l0 dy mul m mul sub def /dx l1 dx mul m mul neg def /dy l1 dy mul
313 /IC { /c c 1 add def c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if }
314 ifelse /a a 2 mul 3 div 45 cos b exp div def CCA /dx 0 def /dy 0 def }
316 /BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
317 /NC { CC x1 y1 x2 y2 x y curveto } def
318 /EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
319 /BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
320 /NAC { x2 y2 x y curveto CC x1 y1 } def
321 /EAC { x2 y2 x y ArrowB curveto pop pop } def
324 { n { pop pop } repeat }
325 { BOC /n n 3 sub def n { NC } repeat EOC } ifelse
327 /AltCurve { { false NArray n 2 mul 2 roll [ n 2 mul 3 sub 1 roll ] aload
328 /Points ED n 2 mul -2 roll } { false NArray } ifelse n 4 lt { n { pop
329 pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse } def
330 /ClosedCurve { NArray n 3 lt { n { pop pop } repeat } { n 3 gt {
331 CheckClosed } if 6 copy n 2 mul 6 add 6 roll IC CC x y moveto n { NC }
332 repeat closepath pop pop } ifelse } def
333 /SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
334 /ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
335 /SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore }
337 /FontDot { DS 2 mul dup matrix scale matrix concatmatrix exch matrix
338 rotate matrix concatmatrix exch findfont exch makefont setfont } def
339 /Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
340 x1 y1 lineto closepath } def
341 /OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1
342 y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div
343 exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse
344 /b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto
345 x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath }
347 /Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add
348 /y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq {
349 pop pop Rect } { OvalFrame } ifelse } def
350 /BezierNArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop
351 } if n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat f { ]
352 aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def
353 /OpenBezier { BezierNArray n 1 eq { pop pop } { ArrowA n 4 sub 3 idiv { 6
354 2 roll 4 2 roll curveto } repeat 6 2 roll 4 2 roll ArrowB curveto }
356 /ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv {
357 6 2 roll 4 2 roll curveto } repeat closepath } ifelse } def
358 /BezierShowPoints { gsave Points aload length 2 div cvi /n ED moveto n 1
359 sub { lineto } repeat CLW 2 div SLW [ 4 4 ] 0 setdash stroke grestore }
361 /Parab { /y0 exch def /x0 exch def /y1 exch def /x1 exch def /dx x0 x1
362 sub 3 div def /dy y0 y1 sub 3 div def x0 dx sub y0 dy add x1 y1 ArrowA
363 x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB curveto /Points [ x1 y1 x0
364 y0 x0 2 mul x1 sub y1 ] def } def
370 cvi dup 1 lt { pop 1 } if
372 s div dup 0 eq { pop 1 } if
373 /dy ED s div dup 0 eq { pop 1 } if
374 /dx ED dy div round dy mul
375 /y0 ED dx div round dx mul
376 /x0 ED dy div round cvi
377 /y2 ED dx div round cvi
378 /x2 ED dy div round cvi
379 /y1 ED dx div round cvi
381 /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def
382 /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def
384 /z1 b 4 div CLW 2 div add def
385 % /Helvetica findfont b scalefont setfont
386 /b b .95 mul CLW 2 div add def } if
387 systemdict /setstrokeadjust known
388 { true setstrokeadjust /t { } def }
389 { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add
390 exch itransform } bind def } ifelse
391 gsave n 0 gt { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse
393 /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def
394 /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def
395 x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if
396 { i dx mul dup y0 moveto
398 { gsave c i a cvs dup stringwidth pop
399 /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse
400 h 0 gt {b neg}{z1} ifelse
401 rmoveto show grestore } if
409 % DG/SR modification begin - Nov. 7, 1997 - Patch 1
410 %{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash }
411 { 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash }
412 % DG/SR modification end
413 { 2 setlinecap } ifelse
415 /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def
416 /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def
417 y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if
418 { newpath i dy mul dup x0 exch moveto
419 b 0 gt { gsave c i a cvs dup stringwidth pop
421 w 0 gt {z1 z2 add neg} {z1} ifelse
422 h 0 gt {z1} {b neg} ifelse
423 rmoveto show grestore } if
434 newpath 0 -1000 moveto clip
440 pop pop pop r a e d PtoC y add exch x add
441 exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
445 /Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def
447 /ArcAdjust { %%%% Vincent Guirardel
448 % given a target length (targetLength) and an initial angle (angle0) [in the stack],
449 % let M(angle0)=(rx*cos(angle0),ry*sin(angle0))=(x0,y0).
450 % This computes an angle t such that (x0,y0) is at distance
451 % targetLength from the point M(t)=(rx*cos(t),ry*sin(t)).
452 % NOTE: this an absolute angle, it does not have to be added or substracted to angle0
453 % contrary to TvZ's code.
454 % To achieve, this, one iterates the following process: start with some angle t,
455 % compute the point M' at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)].
456 % Now take t' (= new angle) so that (0,0) M(t') and M' are aligned.
458 % Another difference with TvZ's code is that we need d (=add/sub) to be defined.
459 % the value of d = add/sub is used to know on which side we have to move.
460 % It is only used in the initialisation of the angle before the iteration.
462 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
463 % Input stack: 1: target length 2: initial angle
464 % variables used : rx, ry, d (=add/sub)
466 /targetLength ED /angle0 ED
467 /x0 rx angle0 cos mul def
468 /y0 ry angle0 sin mul def
469 % we are looking for an angle t such that (x0,y0) is at distance targetLength
470 % from the point M(t)=(rx*cos(t),ry*sin(t)))
471 %initialisation of angle (using 1st order approx = TvZ's code)
472 targetLength 57.2958 mul
473 angle0 sin rx mul dup mul
474 angle0 cos ry mul dup mul
476 % if initialisation angle is two large (more than 90 degrees) set it to 90 degrees
477 % (if the ellipse is very curved at the point where we draw the arrow, %
478 % the value can be much more than 360 degrees !)
479 % this should avoid going on the wrong side (more than 180 degrees) or go near
480 % a bad attractive point (at 180 degrees)
481 dup 90 ge { pop 90 } if
482 angle0 exch d % add or sub
483 % maximum number of times to iterate the iterative procedure:
484 % iterative procedure: takes an angle t on top of stack, computes a
485 % better angle (and put it on top of stack)
487 % compute distance D between (x0,y0) and M(t)
488 dup cos rx mul x0 sub dup mul exch sin ry mul y0 sub dup mul add sqrt
489 % if D almost equals targetLength, we stop
490 dup targetLength sub abs 1e-5 le { pop exit } if
491 % stack now contains D t
492 % compute the point M(t') at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]:
493 % M(t')= ( (x(t)-x0)*targetLength/d+x0 , (y(t)-y0)*targetLength/d+y0 )
494 exch dup cos rx mul x0 sub exch sin ry mul y0 sub
495 % stack contains: y(t)-y0, x(t)-x0, d
496 2 index Div targetLength mul y0 add ry Div exch
497 2 index Div targetLength mul x0 add rx Div
498 % stack contains x(t')/rx , y(t')/ry , d
499 % now compute t', and remove D from stack
502 % we don't look at what happened... in particular, if targetLength is greater
503 % than the diameter of the ellipse...
504 % the final angle will be around /angle0 + 180. maybe we should treat this pathological case...
505 % after iteration, stack contains an angle t such that M(t) is the tail of the arrow
506 % to give back the result as a an angle relative to angle0 we could add the following line:
507 % angle0 sub 0 exch d
509 % begin bug fix 2006-01-11
510 % we want to adjust the new angle t' by a multiple of 360 so that | t'-angle0 | <= 180
511 %(we don't want to make the ellipse turn more or less than it should)...
512 dup angle0 sub dup abs 180 gt { 180 add 360 div floor 360 mul sub } { pop } ifelse
517 /d ED % is add or sub
518 /b ED % arrow procedure
523 clip % Set clippath far from arrow.
525 0 1 0 0 b % Draw arrow to determine length.
527 % Length of arrow is on top of stack. Next 3 numbers are junk.
529 a1 exch ArcAdjust % Angular position of base of arrow.
532 a2 cos rx mul xOrig add % hv 2007-08-29 x->xOrig
533 a2 sin ry mul yOrig add % hv 2007-08-29 y->yOrig
534 a1 cos rx mul xOrig add %
535 a1 sin ry mul yOrig add %
536 % Now arrow tip coor and base coor are on stack.
537 b pop pop pop pop % Draw arrow, and discard coordinates.
539 % change value of d (test it by looking if `` 1 1 d '' gives 2 or not )
540 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse
542 % resets original value of d
543 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse % Adjust angle to give overlap.
545 %%------------------ tvz/DG/hv (2004-05-10) end -------------------%%
547 /Rot { CP CP translate 3 -1 roll neg rotate NET } def
550 tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if
551 /TMatrix [ TMatrix CM ] cvx def
553 a Rot /RAngle [ RAngle dup a add ] cvx def
556 /RotEnd { /TMatrix [ TMatrix setmatrix ] cvx def /RAngle [ RAngle pop ] cvx def } def
558 /PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
559 /PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def
560 /PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def
561 /Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s
562 abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b
563 div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } {
564 h1 abs h sub dup s mul abs } ifelse } def
565 /UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s
566 mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q
567 { x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add
569 /BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { Visible
570 /IfVisible true def } if } { IfVisible { Invisible /IfVisible false def
572 /InitOL { /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def
573 /Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit
574 neg exch neg exch idtransform T moveto } def /BOL { BeginOL } def
575 /IfVisible true def } def
578 /AlgParser { tx@AlgToPs begin AlgToPs end } def
579 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
580 /tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin
581 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
582 % PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12
585 % FS -> F | +FS | -FS
588 % literal->number|var|var[E]|func(params)
590 % number->TOBEFINISHED
591 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
592 %% E expression, T term, SF signed factor, F factor, P power
593 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
595 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
597 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
598 %% C->E<condition_operators>E
599 %% STR index -> STR index+lenExpr
600 /AnalyzeCond { AnalyzeExpr ReadCondOp AnalyzeExpr EvalCondOp } def
601 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
602 %% analyze Expression List (separator , or | )
603 %% STR index -> STR index+lenExpr
605 %% { NextNonBlankChar pop AnalyzeExpr%%dup Strlen eq { exit } if NextNonBlankChar
606 %% NextNonBlankChar dup 0 eq { pop exit } if
607 %% dup 44 ne 1 index 124 ne and { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } if
608 %% pop NextNonBlankChar dup 0 eq { exit } if 124 ne { PROBLEMCONTACTBILLOU } if 1 add NextNonBlankChar 0 eq {toto} if } loop
609 %% AnalyzeListOfEPostHook
613 { NextNonBlankChar pop AnalyzeExpr
614 NotFirst { EvalListOfExpr } { /NotFirst true def } ifelse
615 dup Strlen eq { exit } if NextNonBlankChar
616 dup 44 ne 1 index 124 ne and
617 { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse }
619 AnalyzeListOfEPostHook
621 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
623 %% STR index -> STR index+lenExpr
625 AnalyzePreHook AnalyzeTerm IsEndingExpr
626 { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
627 { { RollOp 1 add NextNonBlankChar pop AnalyzeTerm PreEvalHook EvalAddSub IsEndingExpr { pop exit } if } loop }
631 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
635 AnalyzePreHook AnalyzeSignedFactor IsEndingTerm
636 { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
637 { { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor PreEvalHook EvalMulDiv IsEndingTerm { pop exit } if} loop }
641 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
642 %% FS -> F | +FS | -FS
644 /AnalyzeSignedFactor {
645 AnalyzePreHook 2 copy get dup IsUnaryOp
646 { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor EvalUnaryOp }
647 { pop AnalyzeFactor }
648 ifelse AnalyzePostHook
650 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
654 AnalyzePreHook AnalyzePower IsEndingFactor
655 { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
656 { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower IsEndingFactor { pop exit } if} loop }
657 ifelse AnalyzePostHook
659 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
663 %% depending of first char either a number, or a literal
664 2 copy get dup 40 eq%%an open par
665 { pop 1 add NextNonBlankChar pop AnalyzeExpr 1 add NextNonBlankChar pop }
669 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
670 %% STR index STR[index] -> STR index
671 %/AnalyzeLiteral { IsNumber { EvalNumber } { EvalLiteral } ifelse } def
672 /AnalyzeLiteral { dup IsUnaryOp exch IsNumber or { EvalNumber } { EvalLiteral } ifelse } def%%dr 09102006
673 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
676 /IsUnaryOp { dup 43 eq exch 45 eq or } bind def
677 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
678 %% a number can contain only : 0123456789.
680 /IsNumber { dup 48 ge exch dup 57 le 3 -1 roll and exch 46 eq or } bind def
681 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
682 %% STR index -> STR index number
683 %% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
684 %% STR index -> STR index' number
686 exch dup 3 -1 roll dup 3 1 roll
688 { 1 add 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsNumber not { exit } if pop } loop
689 dup 101 eq exch 69 eq or
690 %%% there is a "e" or "E" -> read exponant
691 { 1 add 2 copy get dup IsUnaryOp
692 { pop 1 add 2 copy get } if
693 { IsNumber not { exit } if 1 add 2 copy get } loop }
696 3 -1 roll exch 1 index sub getinterval
698 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
699 %% a number can contain only : 0123456789.
701 /IsCondOp { dup 30 eq exch dup 60 ge exch 62 le and or } bind def
702 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
703 %% STR index -> STR index number
704 %% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
705 %% STR index -> STR index' number
707 NextNonBlankChar 1 index 4 1 roll
708 { IsCondOp not { exit } if 1 add 2 copy get } loop
710 exch 1 index sub getinterval 3 1 roll
712 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
713 %% a literal can contain only : 0123456789.
716 dup 48 ge exch dup 57 le 3 -1 roll and exch
717 dup 65 ge exch dup 90 le 3 -1 roll and 3 -1 roll or exch
718 dup 97 ge exch 122 le and or } bind def
719 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
720 %% a literal can be of the form [a-zA-Z][a-zA-Z0-9]*\(\((Expression)\)|\(\[Expression\]\)\)?
721 %% STR index -> literal STR index' nextchr
723 exch dup 3 -1 roll dup 3 1 roll
725 { 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsLiteral not { exit } if pop 1 add } loop
726 4 1 roll dup 5 1 roll 3 -1 roll exch 1 index sub getinterval 4 1 roll
728 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
729 %% expr is ended by end of str or a clpar
730 %% STR index -> STR index STR[index] T/F
733 %% if end of str is reached -> end !
735 %% ending chr -> clpar, comma, |, <, >, =, !,
741 exch dup 60 ge exch 62 le and or or or or or}
743 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
744 %% expr is ended by end of str or a +-
745 %% STR index -> STR index STR[index] T/F
746 /IsEndingTerm { IsEndingExpr { true } { dup dup 43 eq exch 45 eq or } ifelse } def
747 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
748 %% expr is ended by end of str or */
749 %% STR index -> STR index STR[index] T/F
750 /IsEndingFactor { IsEndingTerm { true } { dup dup 42 eq exch 47 eq or } ifelse } def
751 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
752 %% expr is ended by end of str or ^
753 %% STR index -> STR index STR[index] T/F
754 /IsEndingPower { IsEndingFactor { true } { dup 94 eq } ifelse } def
755 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
756 %% STR index -> STR index STR[index]
757 /NextNonBlankChar { { dup Strlen eq { 0 exit } if 2 copy get dup neBlkChar { exit } if pop 1 add } loop } bind def
758 /neBlkChar { dup 32 ne exch dup 10 ne exch 9 ne and and } bind def
759 %%%%%%%%%%%%%%%%%%%%%%%%
762 /BRKtrue {/BRK true def} def
763 /BRKStop {BRK {BRKtoto} if } def
764 /BRKEvalStop {BRK exch if } def
765 /BRKBRK2true {BRK {BRK2true} if } def
767 /BRK2true {/BRK2 true def} def
768 /BRK2Stop {BRK2 {BRK2toto} if } def/BRK {false} def
770 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
771 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
772 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
773 /tx@AlgToPs 12 dict def tx@AlgToPs begin
774 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
775 %% algExpr -> PSVector
776 /AlgToPs { tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE pop pop EndingSequence end } def
777 /EndingSequence { ExpressionVector aload length /end cvx exch 1 add array astore } def
778 /InitParser { /ExpressionVector [ /tx@AddMathFunc cvx /begin cvx ] def dup length /Strlen exch def 0 } def
780 /EvalListOfExpr {} def%
782 ReadNumber cvr /ExpressionVector ExpressionVector aload length dup 3 add -1 roll cvx
783 exch 1 add array astore def NextNonBlankChar pop } def
785 /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
786 43 eq { /add } { /sub } ifelse cvx exch 1 add array astore def
789 /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
790 42 eq { /mul } { /div } ifelse cvx exch 1 add array astore def
793 /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
794 pop /exp cvx exch 1 add array astore def
798 dup 40 eq%%% there is an open par -> function call
800 dup (Sum) eq { EvalSum }
801 { dup (IfTE) eq { EvalCond }
802 { dup (Derive) eq { pop EvalDerive }
803 { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc
804 /ExpressionVector ExpressionVector aload length dup 5 add -1 roll cvn cvx
805 exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse }
806 { /ExpressionVector ExpressionVector aload length dup 6 add -1 roll cvn cvx exch 1 add array astore def
807 dup 91 eq%%% there is an open bracket -> vector element
808 { pop 1 add NextNonBlankChar pop AnalyzeExpr
809 /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def 1 add }
810 { pop NextNonBlankChar pop }
814 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
815 %% the derive function : Derive(n,f(x))
816 %% firstparindex lastparindex ->
818 %% manage the function descripiton
819 1 add ReadNumber 3 1 roll NextNonBlankChar
820 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
821 1 add NextNonBlankChar pop
824 { pop AnalyzeExpr 3 -1 roll pop 1 add }
825 { 1 sub 3 1 roll (x) exch tx@Derive begin DeriveIndexed end 4 -1 roll
826 { (x) tx@Derive begin Derive end } repeat
827 ExpressionVector exch /ExpressionVector [] def
829 /ExpressionVector 1 index 3 add -1 roll aload length dup 3 add -1 roll /l2 exch def /l1 exch def
830 l1 l2 add 1 add l2 neg roll l1 l2 add array astore def 3 -1 roll pop 1 add
831 1 index length /Strlen exch def } ifelse
834 pop 1 add NextNonBlankChar pop
835 %% read the variable name
836 ReadLiteral pop NextNonBlankChar
837 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
838 %% read the initial value
839 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
840 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
841 %% read the increment value
842 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
843 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
844 %% read the limit value
845 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
846 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
847 /ExpressionVector ExpressionVector aload length dup 7 add -3 roll 0 4 1 roll
848 5 -1 roll 4 add array astore def
849 %% keep ExpressionVector for later and create a new one for internal Sum computation
850 ExpressionVector 3 1 roll /ExpressionVector [ 6 -1 roll cvn /exch cvx /def cvx ] def
851 1 add NextNonBlankChar pop AnalyzeExpr
853 /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def
854 /ExpressionVector 4 -1 roll aload length ExpressionVector cvx /for cvx 3 -1 roll 2 add
855 array astore def 3 -1 roll pop 1 add
857 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
858 %% Convert to radians if trigo function call
861 dup (cos) eq 1 index (sin) eq or exch (tan) eq or
862 { /ExpressionVector ExpressionVector aload length 3.14159265359 /div cvx 180 /mul cvx 5 -1 roll 4 add
867 pop 1 add AnalyzeCond NextNonBlankChar
868 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
869 ExpressionVector 3 1 roll /ExpressionVector [] def
870 1 add AnalyzeExpr ExpressionVector 3 1 roll /ExpressionVector [] def
871 NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
873 NextNonBlankChar 41 ne { ANALYZER_ERROR_missing_ending parenthesis_in_IfTE } if
875 /ExpressionVector 6 -1 roll aload length dup
876 6 add -1 roll cvx exch dup 4 add -1 roll cvx /ifelse cvx 3 -1 roll 3 add array astore def
882 dup (=) eq { /eq } {%
883 dup (<) eq { /lt } {%
884 dup (>) eq { /gt } {%
885 dup (>=) eq { /ge } {%
886 dup (<=) eq { /ge } {%
887 dup (!=) eq { /ne } { ERROR_non_valid_conditional_operator }
888 ifelse } ifelse } ifelse } ifelse } ifelse } ifelse
890 /ExpressionVector ExpressionVector aload length dup 3 add -1 roll exch 1 add array astore def } def
892 3 -1 roll 45 eq { /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def } if
894 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
896 /AnalyzePreHook {} bind def
897 /PreEvalHook {} bind def
898 /AnalyzeListOfEPostHook {} bind def
899 /AnalyzePostHook {} def
900 /RollOp { 3 1 roll } bind def
901 end%%%tx@CoreAnalyzerDict
902 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
903 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
904 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
905 /tx@Derive 41 dict def tx@Derive begin
906 %%increase ^^ for each function added
907 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
908 %% algExpr variable -> PSVector
910 10240 string 3 1 roll 0 3 1 roll
912 tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE end
915 /InitParser { dup length /Strlen exch def 0 } def
916 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
917 %% algExpr variable index -> PSVector
919 3 1 roll 10240 string 3 1 roll 0 3 1 roll
921 tx@CoreAnalyzerDict begin InitParser pop 4 -1 roll AnalyzeExpr 4 -2 roll pop pop 4 -2 roll exch pop end
923 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
926 4 2 roll 2 copy 9 -1 roll dup length 4 1 roll putinterval add AddPipe
927 2 copy 7 -1 roll dup length 4 1 roll putinterval add
929 2 copy pop 0 6 2 roll GetIntervalNewStr 5 1 roll 2 copy 0 exch getinterval 6 1 roll } def
930 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
933 4 -2 roll 4 index (0) eq
934 { (0) StrConcat 7 -1 roll pop }
936 { AddSub AddOpPar true } { false } ifelse
937 3 1 roll 5 index StrConcat 3 -1 roll { AddClPar } if } ifelse
938 2 copy pop 0 6 2 roll GetIntervalNewStr
939 7 -2 roll pop pop 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
941 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
943 /EvalNumber { ReadNumber (0) 6 2 roll } def
944 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
948 { pop true }%% du=0 nothing added
949 { dup length exch 5 index 5 index 3 -1 roll putinterval 4 -1 roll add 3 1 roll false }
952 { pop { (0) } { 4 -2 roll 2 copy pop 0 6 2 roll GetIntervalNewStr } ifelse }%%dv=0
954 { 5 -2 roll 7 index 45 eq { AddSub } if false } %%nothing yet added
955 { 5 -2 roll 7 index 43 eq%%something yet added
956 { AddAdd false } { AddSub AddOpPar true } ifelse }
958 3 -1 roll StrConcat 10 -1 roll { AddClPar } if
959 2 copy pop 0 6 2 roll GetIntervalNewStr }
961 mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
963 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
965 /EvalMulDiv { 6 index 42 eq {EvalMul} {EvalDiv} ifelse } def
966 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
969 4 -2 roll 7 index dup (0) eq
973 { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
974 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if
977 5 1 roll 5 index (0) eq
978 { 5 -1 roll not { (0) StrConcat } if }%%dv=0
979 { 5 -1 roll { AddAdd } if
981 { 8 index StrConcat }
982 { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
986 2 copy pop 0 6 2 roll GetIntervalNewStr
987 mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
989 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
990 %% (u/v)'=(u'*v-u*v')/v^2
993 4 index (0) eq%%dv=0 -> u'/v
994 { 7 index (0) eq { (0) StrConcat } { AddOpPar 7 index StrConcat AddClPar AddDiv 5 index StrConcat } ifelse }
999 { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
1000 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if}%%du!=0
1004 { 8 index StrConcat }
1005 { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
1008 2 copy GetIntervalNewStr 3 1 roll pop 0 AddOpPar 3 -1 roll StrConcat AddClPar
1009 AddDiv AddOpPar 5 index StrConcat AddClPar 2 copy (^2) putinterval 2 add }
1011 2 copy pop 0 6 2 roll GetIntervalNewStr
1012 mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
1014 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1015 %% str1 index str2 -> str1 index
1016 /StrConcat { dup length 4 2 roll 2 copy 6 -1 roll putinterval 3 -1 roll add } bind def
1017 /GetIntervalNewStr { 0 exch getinterval dup length string copy } bind def
1018 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1019 %% (u^v)'=(u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
1021 4 -2 roll 7 index (0) eq
1022 {%%if du=0 then (u^v)'=v'ln(u)u^v
1024 { (0) StrConcat }%%if dv=0 then (u^v)'=0
1025 { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if
1026 8 index (e) ne { (ln\() StrConcat 8 index StrConcat (\)*) StrConcat } if
1027 AddOpPar 8 index StrConcat (\)^\() StrConcat 5 index StrConcat AddClPar } ifelse
1031 {%%if dv=0 then (u^v)'=vu'u^(v-1)
1032 5 index dup IsStrNumber
1035 { dup dup (1) eq exch (1.0) eq or
1038 7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 1
1039 { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 09102006
1040 (*\() StrConcat 8 index StrConcat (\)) StrConcat
1041 5 index dup dup (2) eq exch (2.0) eq or
1042 { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse }
1043 { pop AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat
1044 5 index StrConcat (-1\)) StrConcat } ifelse
1046 {%%if dv!=0 and du!=0 then (u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
1047 7 index (1) ne { AddOpPar 7 index StrConcat (\)*) StrConcat } if
1048 AddOpPar 5 index StrConcat (\)*\() StrConcat
1049 8 index StrConcat (\)^\() StrConcat
1050 5 index StrConcat (-1\)+\() StrConcat
1051 4 index (1) ne { 4 index StrConcat (\)*\() StrConcat } if
1052 8 index StrConcat (\)^\() StrConcat
1053 5 index StrConcat (\)*ln\() StrConcat
1054 8 index StrConcat AddClPar
1057 2 copy pop 0 6 2 roll GetIntervalNewStr
1058 mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
1060 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1061 %% str -> true/false
1064 { dup 48 lt exch dup 57 gt 3 -1 roll or
1068 and and and { pop false } if } forall
1070 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1071 %% literal switch -> func call, vector, variables
1073 ReadLiteral dup 40 eq%%% there is an open par -> function call
1074 { pop (EvalFunc_ ) 9 4 index StrConcat 0 exch getinterval cvn cvx exec }
1075 { dup 91 eq%%% there is an open bracket -> vector element
1076 { ERROR_vector_not_yet_implemented }
1077 { pop EvalVariable }
1081 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1082 %% first last parpos Expr[first:parpos-1] ->
1083 /EvalVariable { 2 index Variable eq { (1) } { (0) } ifelse 4 -1 roll exch 6 2 roll } def
1084 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1087 4 2 roll 4 index (1) ne
1088 { AddOpPar 4 index StrConcat (\)*) StrConcat } if
1089 (Eval ) 4 8 index StrConcat 0 exch getinterval cvn cvx exec
1090 2 copy pop 0 6 2 roll GetIntervalNewStr
1091 mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
1093 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1094 %% Func derivative -> Eval<func>
1097 { (cos\() StrConcat 5 index StrConcat AddClPar } if
1098 PostCommonFunc } def
1101 { (\(-sin\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
1102 PostCommonFunc } def
1105 { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/cos\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
1106 PostCommonFunc } def
1109 { (1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
1110 PostCommonFunc } def
1113 { (-1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
1114 PostCommonFunc } def
1117 { (1/\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
1118 PostCommonFunc } def
1121 { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\() StrConcat 5 index StrConcat AddClPar } if
1122 PostCommonFunc } def
1125 { (exp\() StrConcat 5 index StrConcat AddClPar } if
1126 PostCommonFunc } def
1129 { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
1130 PostCommonFunc } def
1132 PreCommonFunc { ERROR_no_variable_expression_in_Fact } if
1133 PostCommonFunc } def
1136 { (ch\() StrConcat 5 index StrConcat AddClPar } if
1137 PostCommonFunc } def
1140 { (sh\() StrConcat 5 index StrConcat AddClPar } if
1141 PostCommonFunc } def
1144 { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/ch\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
1145 PostCommonFunc } def
1148 { (1/sqrt\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
1149 PostCommonFunc } def
1152 { (1/sqrt\(\() StrConcat 5 index StrConcat (\)^2-1\)\)) StrConcat } if
1153 PostCommonFunc } def
1156 { (1/\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
1157 PostCommonFunc } def
1158 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1160 1 add NextNonBlankChar pop 3 -1 roll 5 1 roll AnalyzeExpr 1 add NextNonBlankChar pop
1161 4 2 roll 4 index (0) eq
1162 { (0) StrConcat false }
1163 { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if true } ifelse
1166 2 copy pop 0 6 2 roll GetIntervalNewStr
1167 mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
1170 1 add ReadNumber cvi 1 add dup cvr log 1 add cvi string cvs
1171 4 -1 roll pop 5 1 roll 1 add NextNonBlankChar pop AnalyzeExpr 1 add
1172 4 -2 roll (Derive\() StrConcat 7 -1 roll StrConcat (,) StrConcat 6 -1 roll StrConcat AddClPar
1173 2 copy pop 0 6 2 roll GetIntervalNewStr 6 -1 roll pop 2 index 6 index dup 4 index exch sub getinterval
1175 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1176 %% literal switch -> func call, vector, variables
1178 1 add NextNonBlankChar pop
1179 %% read the variable name
1180 ReadLiteral pop 3 -1 roll pop NextNonBlankChar
1181 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
1182 %% read the initial value
1183 1 add NextNonBlankChar pop ReadNumber pop
1184 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
1185 %% read the increment value
1186 1 add NextNonBlankChar pop ReadNumber pop
1187 2 copy get 44 ne { ANALYZER_ERROR_missing_third_comma_in_Sum } if
1188 %% read the limit value
1189 1 add NextNonBlankChar pop ReadNumber pop
1190 2 copy get 44 ne { ANALYZER_ERROR_missing_fourth_comma_in_Sum } if
1191 1 add NextNonBlankChar pop dup 6 1 roll 3 -1 roll pop AnalyzeExpr 1 add NextNonBlankChar pop
1192 4 -2 roll 3 index 8 index dup 9 index exch sub getinterval StrConcat
1193 4 index StrConcat AddClPar
1194 2 copy pop 0 6 2 roll GetIntervalNewStr
1195 mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
1197 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1198 %% literal switch -> func call, vector, variables
1200 3 -1 roll pop 1 add NextNonBlankChar pop SkipCond
1202 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
1203 1 add NextNonBlankChar pop dup 5 1 roll
1204 AnalyzeExpr NextNonBlankChar
1205 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
1206 1 add NextNonBlankChar pop
1207 AnalyzeExpr 1 add NextNonBlankChar pop
1208 4 -2 roll 3 index 10 index dup 11 index exch sub getinterval StrConcat
1209 6 index StrConcat (,) StrConcat 4 index StrConcat AddClPar
1210 2 copy pop 0 6 2 roll GetIntervalNewStr
1211 mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
1213 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1214 %% advance in str until a comma is found (no error detection!)
1215 %% str index -> str index'
1216 /SkipCond { { 1 add 2 copy get 44 eq {exit } if } loop } bind def
1217 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1218 %% Convert to radians if trigo function call
1221 dup (cos) eq 1 index (sin) eq or exch (tan) eq or
1222 { /ExpressionVector ExpressionVector aload length 3.14159265359 /div cvx 180 /mul cvx 5 -1 roll 4 add
1226 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1227 %% No derivative for condition....
1228 /EvalCondOp { 3 -1 roll pop } bind def
1229 /PutIntervalOneAdd {putinterval 1 add} bind def
1230 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1231 %% Add open parenthesis in string at the given index
1232 %% str index -> str index+1
1233 /AddOpPar {2 copy (\() PutIntervalOneAdd} bind def
1234 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1235 %% Add close parenthesis in string at the given index
1236 %% str index -> str index+1
1237 /AddClPar {2 copy (\)) PutIntervalOneAdd} bind def
1238 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1239 %% Add 0 in string at the given index
1240 %% str index -> str index+1
1241 /AddZero {2 copy (0) PutIntervalOneAdd} bind def
1242 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1243 %% Add open parenthesis in string at the given index
1244 %% str index -> str index+1
1245 /AddMul {2 copy (*) PutIntervalOneAdd} bind def
1246 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1247 %% Add open parenthesis in string at the given index
1248 %% str index -> str index+1
1249 /AddDiv {2 copy (/) PutIntervalOneAdd} bind def
1250 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1251 %% Add a plus sign in string at the given index
1252 %% str index -> str index+1
1253 /AddAdd {2 copy (+) PutIntervalOneAdd} bind def
1254 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1255 %% Add a minus sign in string at the given index
1256 %% str index -> str index+1
1257 /AddSub {2 copy (-) PutIntervalOneAdd} bind def
1258 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1259 %% Add a pipe sign in string at the given index
1260 %% str index -> str index+1
1261 /AddPipe {2 copy (|) PutIntervalOneAdd} bind def
1262 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1264 /AnalyzePreHook { dup 5 1 roll } bind def
1266 /AnalyzePostHook { 7 -1 roll pop } bind def
1267 /AnalyzeListOfEPostHook { 6 -1 roll mark 6 1 roll cleartomark } bind def
1268 /RollOp { 5 1 roll } bind def
1269 end%%%tx@CoreAnalyzerDict
1270 /tx@AddMathFunc 12 dict def tx@AddMathFunc begin
1271 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1273 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1274 %% function arcsine in radians asin(x)=atan(x/sqrt(1-x^2))
1277 dup abs 1 gt { EQDFasinrangeerror } if
1278 dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if 90 div 1.57079632680 mul
1280 %% function arccosine in radians acos(x)=atan(sqrt(1-x^2)/x)
1283 dup abs 1 gt { EQDFacosrangeerror } if
1284 dup dup mul 1 exch sub sqrt exch atan 90 div 1.57079632680 mul
1286 %% function arctangent in radians
1288 /atg { 1 atan dup 90 gt { 360 sub } if 90 div 1.57079632680 mul } bind def
1289 %% HYPERBOLIC FUNCTIONS
1290 /sh { dup Ex exch neg Ex sub 2 div } def
1291 /ch { dup Ex exch neg Ex add 2 div } def
1292 /th { dup sh exch ch div } def
1293 /Argsh { dup dup mul 1 add sqrt add ln } def
1294 /Argch { dup dup mul 1 sub sqrt add ln } def
1295 /Argth { dup 1 add exch 1 exch sub div ln 2 div } def
1296 %% modified exponential funtion for 0
1298 /Exp { dup 0 eq { pop pop 1 } { exp } ifelse } bind def
1299 %% modified exponential funtion for 0
1301 /Ex { 2.71828182846 exch exp } bind def
1303 %% factorial function
1305 /Fact { 1 exch 2 exch 1 exch { mul } for } bind def
1306 /fact { Fact } bind def
1307 /PI 3.14159265358 def
1308 /e 2.71828182846 def
1314 %%BeginProcSet: pst-dots.pro 0 0
1316 %% PostScript prologue for pstricks.tex.
1317 %% Version 2.00, Suggestion of 2006/12/19
1318 %% For distribution, see pstricks.tex.
1320 %% Timothy Van Zandt <tvz@Princeton.EDU>
1322 %% Modified by Etienne Riga - Dec. 16, 1999
1323 %% Modified by Herbert Voss (hv) - 2004/12/27
1324 %% Modified by Etienne Riga - 2005/01/01 (er)
1325 %% to add /Diamond, /SolidDiamond and /BoldDiamond
1329 /FontMatrix [.001 0 0 .001 0 0] def
1330 /FontBBox [-571.5 -742.5 571.5 742.5] def
1331 % /FontBBox [-1000 -1000 1000 1000] def
1332 % See end of file in /BuildGlyph
1333 /Encoding 256 array def
1334 0 1 255 {Encoding exch/.notdef put} for
1336 dup (b) 0 get /Bullet put
1337 dup (c) 0 get /Circle put
1338 dup (C) 0 get /BoldCircle put
1339 dup (u) 0 get /SolidTriangle put
1340 dup (t) 0 get /Triangle put
1341 dup (T) 0 get /BoldTriangle put
1342 dup (r) 0 get /SolidSquare put
1343 dup (s) 0 get /Square put
1344 dup (S) 0 get /BoldSquare put
1345 dup (q) 0 get /SolidPentagon put
1346 dup (p) 0 get /Pentagon put
1347 dup (P) 0 get /BoldPentagon put
1349 dup (k) 0 get /Asterisk put
1350 dup (K) 0 get /BoldAsterisk put
1351 dup (J) 0 get /SolidAsterisk put
1352 dup (h) 0 get /Hexagon put
1353 dup (H) 0 get /BoldHexagon put
1354 dup (G) 0 get /SolidHexagon put
1355 dup (a) 0 get /Add put
1356 dup (A) 0 get /BoldAdd put
1357 dup (x) 0 get /Mul put
1358 dup (X) 0 get /BoldMul put
1359 dup (m) 0 get /Oplus put
1360 dup (M) 0 get /BOplus put
1361 dup (e) 0 get /SolidOplus put
1362 dup (n) 0 get /Otimes put
1363 dup (N) 0 get /BOtimes put
1364 dup (E) 0 get /SolidOtimes put
1365 dup (i) 0 get /Bar put
1366 dup (I) 0 get /BoldBar put
1367 dup (l) 0 get /SolidDiamond put
1368 dup (d) 0 get /Diamond put
1369 (D) 0 get /BoldDiamond put
1371 /CharProcs 47 dict def
1373 /CirclePath {0 0 500 0 360 arc closepath} def
1374 /Bullet {CirclePath fill} def
1375 /Circle {CirclePath .9 .9 scale CirclePath eofill} def
1376 /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def
1377 /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto
1379 /SolidTriangle {TrianglePath fill} def
1380 /Triangle {TrianglePath .85 .85 scale TrianglePath eofill} def
1381 /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def
1382 /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto
1384 /SolidSquare {SquarePath fill} def
1385 /Square {SquarePath .89 .89 scale SquarePath eofill} def
1386 /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def
1387 /PentagonPath {-337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto
1388 0 574.7 lineto -546.6 177.6 lineto closepath} def
1389 /SolidPentagon {PentagonPath fill} def
1390 /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def
1391 /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def
1392 %-------------- hv begin 2004/07/25 from: er 2003/03/24
1393 /HexagonPath {0 550 moveto -476 275 lineto -476 -275 lineto
1394 0 -550 lineto 476 -275 lineto 476 275 lineto closepath} def
1395 /SolidHexagon {HexagonPath fill} def
1396 /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def
1397 /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def
1398 /AsteriskPath {20 0 moveto 10 250 180 500 0 500 curveto
1399 -180 500 -10 250 -20 0 curveto closepath} def
1400 /Asterisk {AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath
1401 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath
1403 /Basterp {50 250 220 500 0 500 curveto
1404 -220 500 -50 250 -50 30 cos 100 mul curveto} def
1405 /BoldAsteriskPath {50 30 cos 100 mul moveto Basterp
1406 60 rotate Basterp 60 rotate Basterp
1407 60 rotate Basterp 60 rotate Basterp
1408 60 rotate Basterp closepath} def
1409 /BoldAsterisk {BoldAsteriskPath fill} def
1410 /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def
1411 /CrossPath {40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto
1412 -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto
1413 40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath} def
1414 /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto
1415 -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto
1416 80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath} def
1417 /Add {CrossPath fill} def
1418 /Mul {45 rotate CrossPath fill} def
1419 /BoldAdd {BoldCrossPath fill} def
1420 /BoldMul {45 rotate BoldCrossPath fill} def
1421 /Oplus {CirclePath .9 .9 scale CirclePath eofill
1422 .775 .775 scale CrossPath fill} def
1423 /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def
1424 /BOplus {CirclePath .8 .8 scale CirclePath eofill
1425 .775 .775 scale BoldCrossPath fill} def
1426 /Otimes {CirclePath .9 .9 scale CirclePath eofill
1427 45 rotate .775 .775 scale CrossPath fill} def
1428 /BOtimes {CirclePath .8 .8 scale CirclePath eofill
1429 45 rotate .775 .775 scale BoldCrossPath fill } def
1430 /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def
1431 /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto
1433 /Bar {BarPath fill} def
1434 /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto
1436 /BoldBar {BoldBarPath fill} def
1437 /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto
1438 428.5 0 lineto closepath} def
1439 /SolidDiamond {DiamondPath fill} def
1440 /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def
1441 /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def
1448 % Metrics 1 index get exec 0
1450 % BBoxes 3 index get exec
1451 -1000 -1000 1000 1000
1452 % -571.5 -742.5 571.5 742.5
1454 CharProcs begin load exec end
1458 1 index /Encoding get exch get
1459 1 index /BuildGlyph get exec
1462 /PSTricksDotFont exch definefont pop
1466 %%BeginProcSet: pst-node.pro 0 0
1468 % PostScript prologue for pst-node.tex.
1469 % Version 97 patch 1, 97/05/09.
1470 % For distribution, see pstricks.tex.
1472 /tx@NodeDict 400 dict def tx@NodeDict begin
1473 tx@Dict begin /T /translate load def end
1474 /NewNode { gsave /next ED dict dup 3 1 roll def exch { dup 3 1 roll def }
1475 if begin tx@Dict begin STV CP T exec end /NodeMtrx CM def next end
1477 /InitPnode { /Y ED /X ED /NodePos { NodeSep Cos mul NodeSep Sin mul } def
1479 /InitCnode { /r ED /Y ED /X ED /NodePos { NodeSep r add dup Cos mul exch
1481 /GetRnodePos { Cos 0 gt { /dx r NodeSep add def } { /dx l NodeSep sub def
1482 } ifelse Sin 0 gt { /dy u NodeSep add def } { /dy d NodeSep sub def }
1483 ifelse dx Sin mul abs dy Cos mul abs gt { dy Cos mul Sin div dy } { dx
1484 dup Sin mul Cos Div } ifelse } def
1485 /InitRnode { /Y ED /X ED X sub /r ED /l X neg def Y add neg /d ED Y sub
1486 /u ED /NodePos { GetRnodePos } def } def
1487 /DiaNodePos { w h mul w Sin mul abs h Cos mul abs add Div NodeSep add dup
1488 Cos mul exch Sin mul } def
1489 /TriNodePos { Sin s lt { d NodeSep sub dup Cos mul Sin Div exch } { w h
1490 mul w Sin mul h Cos abs mul add Div NodeSep add dup Cos mul exch Sin mul
1492 /InitTriNode { sub 2 div exch 2 div exch 2 copy T 2 copy 4 index index /d
1493 ED pop pop pop pop -90 mul rotate /NodeMtrx CM def /X 0 def /Y 0 def d
1494 sub abs neg /d ED d add /h ED 2 div h mul h d sub Div /w ED /s d w Atan
1495 sin def /NodePos { TriNodePos } def } def
1496 /OvalNodePos { /ww w NodeSep add def /hh h NodeSep add def Sin ww mul Cos
1497 hh mul Atan dup cos ww mul exch sin hh mul } def
1498 /GetCenter { begin X Y NodeMtrx transform CM itransform end } def
1499 /XYPos { dup sin exch cos Do /Cos ED /Sin ED /Dist ED Cos 0 gt { Dist
1500 Dist Sin mul Cos div } { Cos 0 lt { Dist neg Dist Sin mul Cos div neg }
1501 { 0 Dist Sin mul } ifelse } ifelse Do } def
1502 /GetEdge { dup 0 eq { pop begin 1 0 NodeMtrx dtransform CM idtransform
1503 exch atan sub dup sin /Sin ED cos /Cos ED /NodeSep ED NodePos NodeMtrx
1504 dtransform CM idtransform end } { 1 eq {{exch}} {{}} ifelse /Do ED pop
1505 XYPos } ifelse } def
1506 /AddOffset { 1 index 0 eq { pop pop } { 2 copy 5 2 roll cos mul add 4 1
1507 roll sin mul sub exch } ifelse } def
1508 /GetEdgeA { NodeSepA AngleA NodeA NodeSepTypeA GetEdge OffsetA AngleA
1509 AddOffset yA add /yA1 ED xA add /xA1 ED } def
1510 /GetEdgeB { NodeSepB AngleB NodeB NodeSepTypeB GetEdge OffsetB AngleB
1511 AddOffset yB add /yB1 ED xB add /xB1 ED } def
1512 /GetArmA { ArmTypeA 0 eq { /xA2 ArmA AngleA cos mul xA1 add def /yA2 ArmA
1513 AngleA sin mul yA1 add def } { ArmTypeA 1 eq {{exch}} {{}} ifelse /Do ED
1514 ArmA AngleA XYPos OffsetA AngleA AddOffset yA add /yA2 ED xA add /xA2 ED
1516 /GetArmB { ArmTypeB 0 eq { /xB2 ArmB AngleB cos mul xB1 add def /yB2 ArmB
1517 AngleB sin mul yB1 add def } { ArmTypeB 1 eq {{exch}} {{}} ifelse /Do ED
1518 ArmB AngleB XYPos OffsetB AngleB AddOffset yB add /yB2 ED xB add /xB2 ED
1520 /InitNC { /b ED /a ED /NodeSepTypeB ED /NodeSepTypeA ED /NodeSepB ED
1521 /NodeSepA ED /OffsetB ED /OffsetA ED tx@NodeDict a known tx@NodeDict b
1522 known and dup { /NodeA a load def /NodeB b load def NodeA GetCenter /yA
1523 ED /xA ED NodeB GetCenter /yB ED /xB ED } if } def
1524 /LPutLine { 4 copy 3 -1 roll sub neg 3 1 roll sub Atan /NAngle ED 1 t sub
1525 mul 3 1 roll 1 t sub mul 4 1 roll t mul add /Y ED t mul add /X ED } def
1526 /LPutLines { mark LPutVar counttomark 2 div 1 sub /n ED t floor dup n gt
1527 { pop n 1 sub /t 1 def } { dup t sub neg /t ED } ifelse cvi 2 mul { pop
1528 } repeat LPutLine cleartomark } def
1529 /BezierMidpoint { /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED
1530 /t ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3
1531 mul cx sub def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx
1532 sub def /ay y3 y0 sub cy sub by sub def ax t 3 exp mul bx t t mul mul
1533 add cx t mul add x0 add ay t 3 exp mul by t t mul mul add cy t mul add
1534 y0 add 3 ay t t mul mul mul 2 by t mul mul add cy add 3 ax t t mul mul
1535 mul 2 bx t mul mul add cx add atan /NAngle ED /Y ED /X ED } def
1536 /HPosBegin { yB yA ge { /t 1 t sub def } if /Y yB yA sub t mul yA add def
1538 /HPosEnd { /X Y yyA sub yyB yyA sub Div xxB xxA sub mul xxA add def
1539 /NAngle yyB yyA sub xxB xxA sub Atan def } def
1540 /HPutLine { HPosBegin /yyA ED /xxA ED /yyB ED /xxB ED HPosEnd } def
1541 /HPutLines { HPosBegin yB yA ge { /check { le } def } { /check { ge } def
1542 } ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { dup Y check { exit
1543 } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark HPosEnd
1545 /VPosBegin { xB xA lt { /t 1 t sub def } if /X xB xA sub t mul xA add def
1547 /VPosEnd { /Y X xxA sub xxB xxA sub Div yyB yyA sub mul yyA add def
1548 /NAngle yyB yyA sub xxB xxA sub Atan def } def
1549 /VPutLine { VPosBegin /yyA ED /xxA ED /yyB ED /xxB ED VPosEnd } def
1550 /VPutLines { VPosBegin xB xA ge { /check { le } def } { /check { ge } def
1551 } ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { 1 index X check {
1552 exit } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark
1554 /HPutCurve { gsave newpath /SaveLPutVar /LPutVar load def LPutVar 8 -2
1555 roll moveto curveto flattenpath /LPutVar [ {} {} {} {} pathforall ] cvx
1556 def grestore exec /LPutVar /SaveLPutVar load def } def
1557 /NCCoor { /AngleA yB yA sub xB xA sub Atan def /AngleB AngleA 180 add def
1558 GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 xA1 yA1 ] cvx def /LPutPos {
1559 LPutVar LPutLine } def /HPutPos { LPutVar HPutLine } def /VPutPos {
1560 LPutVar VPutLine } def LPutVar } def
1561 /NCLine { NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB lineto pop pop
1563 /NCLines { false NArray n 0 eq { NCLine } { 2 copy yA sub exch xA sub
1564 Atan /AngleA ED n 2 mul dup index exch index yB sub exch xB sub Atan
1565 /AngleB ED GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 n 2 mul 4 add 4 roll xA1
1566 yA1 ] cvx def mark LPutVar tx@Dict begin false Line end /LPutPos {
1567 LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
1569 /NCCurve { GetEdgeA GetEdgeB xA1 xB1 sub yA1 yB1 sub Pyth 2 div dup 3 -1
1570 roll mul /ArmA ED mul /ArmB ED /ArmTypeA 0 def /ArmTypeB 0 def GetArmA
1571 GetArmB xA2 yA2 xA1 yA1 tx@Dict begin ArrowA end xB2 yB2 xB1 yB1 tx@Dict
1572 begin ArrowB end curveto /LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ]
1573 cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines
1574 } HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def } def
1575 /NCAngles { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate
1576 def xA2 yA2 mtrx transform pop xB2 yB2 mtrx transform exch pop mtrx
1577 itransform /y0 ED /x0 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 x0 y0 xA2
1578 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end /LPutVar [ xB1
1579 yB1 xB2 yB2 x0 y0 xA2 yA2 xA1 yA1 ] cvx def /LPutPos { LPutLines } def
1580 /HPutPos { HPutLines } def /VPutPos { VPutLines } def } def
1581 /NCAngle { GetEdgeA GetEdgeB GetArmB /mtrx AngleA matrix rotate def xB2
1582 yB2 mtrx itransform pop xA1 yA1 mtrx itransform exch pop mtrx transform
1583 /y0 ED /x0 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 x0 y0 xA1 yA1
1584 tx@Dict begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA1 yA1 ]
1585 cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
1586 VPutLines } def } def
1587 /NCBar { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate def
1588 xA2 yA2 mtrx itransform pop xB2 yB2 mtrx itransform pop sub dup 0 mtrx
1589 transform 3 -1 roll 0 gt { /yB2 exch yB2 add def /xB2 exch xB2 add def }
1590 { /yA2 exch neg yA2 add def /xA2 exch neg xA2 add def } ifelse mark ArmB
1591 0 ne { xB1 yB1 } if xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict
1592 begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx
1593 def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
1594 VPutLines } def } def
1595 /NCDiag { GetEdgeA GetEdgeB GetArmA GetArmB mark ArmB 0 ne { xB1 yB1 } if
1596 xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end
1597 /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
1598 LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
1600 /NCDiagg { GetEdgeA GetArmA yB yA2 sub xB xA2 sub Atan 180 add /AngleB ED
1601 GetEdgeB mark xB1 yB1 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin
1602 false Line end /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
1603 LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
1605 /NCLoop { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate
1606 def xA2 yA2 mtrx transform loopsize add /yA3 ED /xA3 ED /xB3 xB2 yB2
1607 mtrx transform pop def xB3 yA3 mtrx itransform /yB3 ED /xB3 ED xA3 yA3
1608 mtrx itransform /yA3 ED /xA3 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2
1609 xB3 yB3 xA3 yA3 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false
1610 Line end /LPutVar [ xB1 yB1 xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 xA1 yA1 ]
1611 cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
1612 VPutLines } def } def
1613 % DG/SR modification begin - May 9, 1997 - Patch 1
1614 %/NCCircle { 0 0 NodesepA nodeA \tx@GetEdge pop xA sub 2 div dup 2 exp r
1615 %r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
1616 %exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
1617 %mul add dup 5 1 roll 90 sub \tx@PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
1618 /NCCircle { NodeSepA 0 NodeA 0 GetEdge pop 2 div dup 2 exp r
1619 r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
1620 exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
1621 mul add dup 5 1 roll 90 sub PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
1622 % DG/SR modification end
1623 } def /HPutPos { LPutPos } def /VPutPos { LPutPos } def r AngleA 90 sub a add
1624 AngleA 270 add a sub tx@Dict begin /angleB ED /angleA ED /r ED /c 57.2957 r
1625 Div def /y ED /x ED } def
1626 /NCBox { /d ED /h ED /AngleB yB yA sub xB xA sub Atan def /AngleA AngleB
1627 180 add def GetEdgeA GetEdgeB /dx d AngleB sin mul def /dy d AngleB cos
1628 mul neg def /hx h AngleB sin mul neg def /hy h AngleB cos mul def
1629 /LPutVar [ xA1 hx add yA1 hy add xB1 hx add yB1 hy add xB1 dx add yB1 dy
1630 add xA1 dx add yA1 dy add ] cvx def /LPutPos { LPutLines } def /HPutPos
1631 { xB yB xA yA LPutLine } def /VPutPos { HPutPos } def mark LPutVar
1632 tx@Dict begin false Polygon end } def
1633 /NCArcBox { /l ED neg /d ED /h ED /a ED /AngleA yB yA sub xB xA sub Atan
1634 def /AngleB AngleA 180 add def /tA AngleA a sub 90 add def /tB tA a 2
1635 mul add def /r xB xA sub tA cos tB cos sub Div dup 0 eq { pop 1 } if def
1636 /x0 xA r tA cos mul add def /y0 yA r tA sin mul add def /c 57.2958 r div
1637 def /AngleA AngleA a sub 180 add def /AngleB AngleB a add 180 add def
1638 GetEdgeA GetEdgeB /AngleA tA 180 add yA yA1 sub xA xA1 sub Pyth c mul
1639 sub def /AngleB tB 180 add yB yB1 sub xB xB1 sub Pyth c mul add def l 0
1640 eq { x0 y0 r h add AngleA AngleB arc x0 y0 r d add AngleB AngleA arcn }
1641 { x0 y0 translate /tA AngleA l c mul add def /tB AngleB l c mul sub def
1642 0 0 r h add tA tB arc r h add AngleB PtoC r d add AngleB PtoC 2 copy 6 2
1643 roll l arcto 4 { pop } repeat r d add tB PtoC l arcto 4 { pop } repeat 0
1644 0 r d add tB tA arcn r d add AngleA PtoC r h add AngleA PtoC 2 copy 6 2
1645 roll l arcto 4 { pop } repeat r h add tA PtoC l arcto 4 { pop } repeat }
1646 ifelse closepath /LPutVar [ x0 y0 r AngleA AngleB h d ] cvx def /LPutPos
1647 { LPutVar /d ED /h ED /AngleB ED /AngleA ED /r ED /y0 ED /x0 ED t 1 le {
1648 r h add AngleA 1 t sub mul AngleB t mul add dup 90 add /NAngle ED PtoC }
1649 { t 2 lt { /NAngle AngleB 180 add def r 2 t sub h mul t 1 sub d mul add
1650 add AngleB PtoC } { t 3 lt { r d add AngleB 3 t sub mul AngleA 2 t sub
1651 mul add dup 90 sub /NAngle ED PtoC } { /NAngle AngleA 180 add def r 4 t
1652 sub d mul t 3 sub h mul add add AngleA PtoC } ifelse } ifelse } ifelse
1653 y0 add /Y ED x0 add /X ED } def /HPutPos { LPutPos } def /VPutPos {
1655 /Tfan { /AngleA yB yA sub xB xA sub Atan def GetEdgeA w xA1 xB sub yA1 yB
1656 sub Pyth Pyth w Div CLW 2 div mul 2 div dup AngleA sin mul yA1 add /yA1
1657 ED AngleA cos mul xA1 add /xA1 ED /LPutVar [ xA1 yA1 m { xB w add yB xB
1658 w sub yB } { xB yB w sub xB yB w add } ifelse xA1 yA1 ] cvx def /LPutPos
1659 { LPutLines } def /VPutPos@ { LPutVar flag { 8 4 roll pop pop pop pop }
1660 { pop pop pop pop 4 2 roll } ifelse } def /VPutPos { VPutPos@ VPutLine }
1661 def /HPutPos { VPutPos@ HPutLine } def mark LPutVar tx@Dict begin
1662 /ArrowA { moveto } def /ArrowB { } def false Line closepath end } def
1663 /LPutCoor { NAngle tx@Dict begin /NAngle ED end gsave CM STV CP Y sub neg
1664 exch X sub neg exch moveto setmatrix CP grestore } def
1665 /LPut { tx@NodeDict /LPutPos known { LPutPos } { CP /Y ED /X ED /NAngle 0
1666 def } ifelse LPutCoor } def
1667 /HPutAdjust { Sin Cos mul 0 eq { 0 } { d Cos mul Sin div flag not { neg }
1668 if h Cos mul Sin div flag { neg } if 2 copy gt { pop } { exch pop }
1669 ifelse } ifelse s add flag { r add neg } { l add } ifelse X add /X ED }
1671 /VPutAdjust { Sin Cos mul 0 eq { 0 } { l Sin mul Cos div flag { neg } if
1672 r Sin mul Cos div flag not { neg } if 2 copy gt { pop } { exch pop }
1673 ifelse } ifelse s add flag { d add } { h add neg } ifelse Y add /Y ED }
1679 %%BeginProcSet: solides.pro 0 0
1681 % PostScript prologue for pst-solides3d.tex.
1682 % Version 3.05, 2008/03/21
1684 %% COPYRIGHT 2008 by Jean-Paul Vignault, Manuel Luque
1686 %% This program can be redistributed and/or modified under the terms
1687 %% of the LaTeX Project Public License Distributed from CTAN
1688 %% archives in directory macros/latex/base/lppl.txt.
1690 /SolidesDict 100 dict def
1691 /SolidesbisDict 100 dict def
1694 %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1695 %% %% les variables globales gerees par PSTricks %%
1696 %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1697 %% %% les lignes dessous sont a decommenter si l on veut utiliser le
1698 %% %% fichier solides.pro independamment du package PSTricks
1703 %% /XpointVue {Dobs Cos1Cos2 mul} def
1704 %% /YpointVue {Dobs Sin1Cos2 mul} def
1705 %% /ZpointVue {Dobs Sin2 mul} def
1707 %% /solidhollow false def
1708 %% /solidbiface false def
1710 %% /tracelignedeniveau? true def
1711 %% /hauteurlignedeniveau 1 def
1712 %% /couleurlignedeniveau {rouge} def
1713 %% /linewidthlignedeniveau 4 def
1714 %% /solidgrid true def
1715 /aretescachees true def
1716 /defaultsolidmode 2 def
1717 /activationgestioncouleurs true def
1725 /angle_repere 90 def
1731 [6.25 3.75] 1.25 setdash
1733 /stockcurrentcpath {} def
1734 /newarrowpath {} def
1735 /chaine 15 string def
1737 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1738 %% choix d une fonte accentuee pour le .ps %%
1739 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1740 /ReEncode { exch findfont
1741 dup length dict begin { 1 index /FID eq {pop pop} {def} ifelse
1742 }forall /Encoding ISOLatin1Encoding def currentdict end definefont
1744 /Font /Times-Roman /ISOfont ReEncode /ISOfont def
1745 %Font findfont 10 scalefont setfont
1747 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1748 %% extrait de color.pro pour pouvoir recuperer ses couleurs %%
1749 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1750 /GreenYellow{0.15 0 0.69 0 setcmykcolor}def
1751 /Yellow{0 0 1 0 setcmykcolor}def
1752 /Goldenrod{0 0.10 0.84 0 setcmykcolor}def
1753 /Dandelion{0 0.29 0.84 0 setcmykcolor}def
1754 /Apricot{0 0.32 0.52 0 setcmykcolor}def
1755 /Peach{0 0.50 0.70 0 setcmykcolor}def
1756 /Melon{0 0.46 0.50 0 setcmykcolor}def
1757 /YellowOrange{0 0.42 1 0 setcmykcolor}def
1758 /Orange{0 0.61 0.87 0 setcmykcolor}def
1759 /BurntOrange{0 0.51 1 0 setcmykcolor}def
1760 /Bittersweet{0 0.75 1 0.24 setcmykcolor}def
1761 /RedOrange{0 0.77 0.87 0 setcmykcolor}def
1762 /Mahogany{0 0.85 0.87 0.35 setcmykcolor}def
1763 /Maroon{0 0.87 0.68 0.32 setcmykcolor}def
1764 /BrickRed{0 0.89 0.94 0.28 setcmykcolor}def
1765 /Red{0 1 1 0 setcmykcolor}def
1766 /OrangeRed{0 1 0.50 0 setcmykcolor}def
1767 /RubineRed{0 1 0.13 0 setcmykcolor}def
1768 /WildStrawberry{0 0.96 0.39 0 setcmykcolor}def
1769 /Salmon{0 0.53 0.38 0 setcmykcolor}def
1770 /CarnationPink{0 0.63 0 0 setcmykcolor}def
1771 /Magenta{0 1 0 0 setcmykcolor}def
1772 /VioletRed{0 0.81 0 0 setcmykcolor}def
1773 /Rhodamine{0 0.82 0 0 setcmykcolor}def
1774 /Mulberry{0.34 0.90 0 0.02 setcmykcolor}def
1775 /RedViolet{0.07 0.90 0 0.34 setcmykcolor}def
1776 /Fuchsia{0.47 0.91 0 0.08 setcmykcolor}def
1777 /Lavender{0 0.48 0 0 setcmykcolor}def
1778 /Thistle{0.12 0.59 0 0 setcmykcolor}def
1779 /Orchid{0.32 0.64 0 0 setcmykcolor}def
1780 /DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}def
1781 /Purple{0.45 0.86 0 0 setcmykcolor}def
1782 /Plum{0.50 1 0 0 setcmykcolor}def
1783 /Violet{0.79 0.88 0 0 setcmykcolor}def
1784 /RoyalPurple{0.75 0.90 0 0 setcmykcolor}def
1785 /BlueViolet{0.86 0.91 0 0.04 setcmykcolor}def
1786 /Periwinkle{0.57 0.55 0 0 setcmykcolor}def
1787 /CadetBlue{0.62 0.57 0.23 0 setcmykcolor}def
1788 /CornflowerBlue{0.65 0.13 0 0 setcmykcolor}def
1789 /MidnightBlue{0.98 0.13 0 0.43 setcmykcolor}def
1790 /NavyBlue{0.94 0.54 0 0 setcmykcolor}def
1791 /RoyalBlue{1 0.50 0 0 setcmykcolor}def
1792 /Blue{1 1 0 0 setcmykcolor}def
1793 /Cerulean{0.94 0.11 0 0 setcmykcolor}def
1794 /Cyan{1 0 0 0 setcmykcolor}def
1795 /ProcessBlue{0.96 0 0 0 setcmykcolor}def
1796 /SkyBlue{0.62 0 0.12 0 setcmykcolor}def
1797 /Turquoise{0.85 0 0.20 0 setcmykcolor}def
1798 /TealBlue{0.86 0 0.34 0.02 setcmykcolor}def
1799 /Aquamarine{0.82 0 0.30 0 setcmykcolor}def
1800 /BlueGreen{0.85 0 0.33 0 setcmykcolor}def
1801 /Emerald{1 0 0.50 0 setcmykcolor}def
1802 /JungleGreen{0.99 0 0.52 0 setcmykcolor}def
1803 /SeaGreen{0.69 0 0.50 0 setcmykcolor}def
1804 /Green{1 0 1 0 setcmykcolor}def
1805 /ForestGreen{0.91 0 0.88 0.12 setcmykcolor}def
1806 /PineGreen{0.92 0 0.59 0.25 setcmykcolor}def
1807 /LimeGreen{0.50 0 1 0 setcmykcolor}def
1808 /YellowGreen{0.44 0 0.74 0 setcmykcolor}def
1809 /SpringGreen{0.26 0 0.76 0 setcmykcolor}def
1810 /OliveGreen{0.64 0 0.95 0.40 setcmykcolor}def
1811 /RawSienna{0 0.72 1 0.45 setcmykcolor}def
1812 /Sepia{0 0.83 1 0.70 setcmykcolor}def
1813 /Brown{0 0.81 1 0.60 setcmykcolor}def
1814 /Tan{0.14 0.42 0.56 0 setcmykcolor}def
1815 /Gray{0 0 0 0.50 setcmykcolor}def
1816 /Black{0 0 0 1 setcmykcolor}def
1817 /White{0 0 0 0 setcmykcolor}def
1818 %% fin de l extrait color.pro
1820 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1821 %%%% autres couleurs %%%%
1822 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1824 /bleu {0 0 1 setrgbcolor} def
1825 /rouge {1 0 0 setrgbcolor} def
1826 /vert {0 .5 0 setrgbcolor} def
1827 /gris {.4 .4 .4 setrgbcolor} def
1828 /jaune {1 1 0 setrgbcolor} def
1829 /noir {0 0 0 setrgbcolor} def
1830 /blanc {1 1 1 setrgbcolor} def
1831 /orange {1 .65 0 setrgbcolor} def
1832 /rose {1 .01 .58 setrgbcolor} def
1833 /cyan {1 0 0 0 setcmykcolor} def
1834 /magenta {0 1 0 0 setcmykcolor} def
1836 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1837 %%%% definition du point de vue %%%%
1838 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1839 %% pour la 3D conventionnelle
1840 %% Dony : graphisme scientifique : page 187
1843 %% calcul des coefficients de la matrice
1844 %% de transformation
1845 /Sin1 {THETA sin} def
1847 /Cos1 {THETA cos} def
1849 /Cos1Sin2 {Cos1 Sin2 mul} def
1850 /Sin1Sin2 {Sin1 Sin2 mul} def
1851 /Cos1Cos2 {Cos1 Cos2 mul} def
1852 /Sin1Cos2 {Sin1 Cos2 mul} def
1860 Xabscisse Sin1 mul neg Yordonnee Cos1 mul add
1863 Xabscisse Cos1Sin2 mul neg Yordonnee Sin1Sin2 mul sub Zcote Cos2
1867 Xabscisse neg Cos1Cos2 mul Yordonnee Sin1Cos2 mul sub Zcote Sin2
1870 %% maintenant on depose les resultats sur la pile
1871 Decran xObservateur mul zObservateur div cm
1872 Decran yObservateur mul zObservateur div cm
1886 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1887 %%%% jps modifie pour PSTricks %%%%
1888 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1890 /solid {continu} def
1891 /dashed {pointilles} def
1893 %%% les 3 procedures utilisees pour transformer les depots de AlgToPs en nombres
1913 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1914 %%%% geometrie basique %%%%
1915 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1917 %% syntaxe~: [x1 y1 ... xn yn] ligne
1928 %% syntaxe~: [x1 y1 ... xn yn] ligne_
1937 %% syntaxe~: [x1 y1 ... xn yn] polygone
1940 /startest {true} def
1956 currentlinewidth 0 eq {} {stroke} ifelse
1960 %% syntaxe : x y point
1972 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1973 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1975 %%%% insertion librairie jps %%%%
1977 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1978 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1980 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1981 %%%% le repere jps %%%%
1982 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1984 %%%%% ### AAAopacity ###
1985 %% les parametres pour la gestion de la transparence
1987 /strokeopacity exch def
1990 /fillopacity exch def
1992 %% d apres un code de Jean-Michel Sarlat
1993 %% http://melusine.eu.org/syracuse/swf/pdf2swf/setdash/
1994 %% Mise en reserve de la procedure stroke originelle.
1995 /sysstroke {systemdict /stroke get exec} def
1996 /sysfill {systemdict /fill get exec} def
1997 % Mise en place de la nouvelle procedure
1999 /strokeopacity where {
2004 .setopacityalpha sysstroke
2007 /fillopacity where {
2012 .setopacityalpha sysfill
2015 %%%%% ### AAAscale ###
2016 %%%%%%%%%%%%%%%% les deplacements a l echelle %%%%%%%%%%%%%%%%%%%
2018 /v@ct_I {xunit 0} def
2019 /v@ct_J {angle_repere cos yunit mul angle_repere sin yunit mul} def
2028 /gtransform-1 {} def
2042 xtranslate ytranslate
2043 3 1 roll %% xA yB yA xB
2044 4 1 roll %% xB xA yB yA
2045 sub neg 3 1 roll %% yB-yA xB xA
2051 xtranslate ytranslate
2052 3 1 roll %% xA yB yA xB
2053 4 1 roll %% xB xA yB yA
2054 sub neg 3 1 roll %% yB-yA xB xA
2060 /Y exch yscale-1 def
2061 /X exch xscale-1 def
2062 /y Y yunit angle_repere sin mul div def
2063 /x X y yunit mul angle_repere cos mul sub xunit div def
2094 %%%%% ### fin insertion ###
2096 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2098 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2100 %%%%% ### isbool ###
2101 %% syntaxe : any isbool --> booleen
2103 type (booleantype) cvn eq
2106 %%%%% ### isarray ###
2107 %% syntaxe : any isarray --> booleen
2109 type (arraytype) cvn eq
2112 %%%%% ### isstring ###
2113 %% syntaxe : any isstring --> booleen
2115 type (stringtype) cvn eq
2118 %%%%% ### isinteger ###
2119 %% syntaxe : any isinteger --> booleen
2121 type (integertype) cvn eq
2125 %% syntaxe : any isnum --> booleen
2131 %%%%% ### isreal ###
2132 %% syntaxe : any isreal --> booleen
2134 type (realtype) cvn eq
2138 %% syntaxe : A B eqp3d --> booleen = true si les points A et B sont identiques
2140 %% x1 y1 z1 x2 y2 z2
2141 4 -1 roll %% x1 y1 x2 y2 z2 z1
2145 pop pop pop pop false
2149 %% syntaxe : A B eqp --> booleen = true si les points A et B sont identiques
2163 %% syntaxe : z z' eqc --> true si z = z', false sinon
2168 %%%%% ### fin insertion ###
2170 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2171 %%%% conversions de types %%%%
2172 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2174 %%%%% ### astr2str ###
2175 %% syntaxe : array str astr2str --> str
2176 %% convertit le contenu de array en chaines de caracteres puis les
2177 %% concatene avec str, en inserant un caractere "space" apres chaque
2178 %% element du tableau array
2187 table 0 n 1 sub getinterval
2188 table n 1 sub get ( ) cvs
2196 %%%%% ### numstr2array ###
2197 %% syntaxe : str numstr2array -> array
2198 %% ou str est une chaine de nombres entiers separes par des espaces
2199 %% et array est constitue des elements numeriques entiers de string.
2201 %% (0 12 4 54) --> [0 12 4 54]
2218 exch 10 mul 48 sub add
2228 %% syntaxe : array numstr2array -> array
2229 /arraynumstr2arrayarray {
2230 {numstr2array} apply
2233 %%%%% ### fin insertion ###
2235 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2236 %%%% macros de projection %%%%
2237 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2239 %%%%% ### projtext ###
2248 %% c est un planprojpath
2249 /type_plan_proj true def
2256 %% c est un solidprojpath
2257 /type_plan_proj false def
2264 %% y a-t-il un alpha
2265 2 copy pop issolid {
2277 x0 y0 z0 table mybool projpath
2279 solid i alpha str2 mybool projpath
2286 %% syntaxe : str x0 y0 z0 [normal_vect] ultextp3d --> -
2287 %% syntaxe : str x0 y0 z0 [normal_vect] bool ultextp3d --> -
2288 %% syntaxe : str1 solid i str2 ultextp3d --> -
2289 %% syntaxe : str1 solid i str2 bool ultextp3d --> -
2290 %% syntaxe : str1 solid i alpha str2 bool ultextp3d --> -
2291 /ultextp3d {initpr@jtext ultext_ closepr@jtext} def
2292 /cltextp3d {initpr@jtext cltext_ closepr@jtext} def
2293 /bltextp3d {initpr@jtext bltext_ closepr@jtext} def
2294 /dltextp3d {initpr@jtext bltext_ closepr@jtext} def
2295 /ubtextp3d {initpr@jtext ubtext_ closepr@jtext} def
2296 /cbtextp3d {initpr@jtext cbtext_ closepr@jtext} def
2297 /bbtextp3d {initpr@jtext bbtext_ closepr@jtext} def
2298 /dbtextp3d {initpr@jtext bbtext_ closepr@jtext} def
2299 /uctextp3d {initpr@jtext uctext_ closepr@jtext} def
2300 /cctextp3d {initpr@jtext cctext_ closepr@jtext} def
2301 /bctextp3d {initpr@jtext bctext_ closepr@jtext} def
2302 /dctextp3d {initpr@jtext bctext_ closepr@jtext} def
2303 /urtextp3d {initpr@jtext urtext_ closepr@jtext} def
2304 /crtextp3d {initpr@jtext crtext_ closepr@jtext} def
2305 /brtextp3d {initpr@jtext brtext_ closepr@jtext} def
2306 /drtextp3d {initpr@jtext brtext_ closepr@jtext} def
2308 %%%%% ### currentppathtransform ###
2309 %% syntaxe : {f} currentppathtransform --> applique la transformation f
2310 %% au chemin courant
2311 /currentppathtransform {
2314 %% pour remplacer 'move'
2323 %% pour remplacer 'lineto'
2328 %% pour remplacer 'curveto'
2337 { warpmove } { warpline } { warpcurve } { closepath } pathforall
2342 %% syntaxe : {f} currentpathtransform --> applique la transformation f
2343 %% au chemin courant
2344 /currentpathtransform {
2347 /warp {ptojpoint transform} def
2348 %% pour remplacer 'move'
2357 %% pour remplacer 'lineto'
2362 %% pour remplacer 'curveto'
2371 { warpmove } { warpline } { warpcurve } { closepath } pathforall
2376 %%%%% ### normalvect_to_orthobase ###
2377 %% syntaxe : [normal_vect] normalvect_to_orthobase
2379 /normalvect_to_orthobase {
2382 aload pop normalize3d /normal_vect defpoint3d
2383 normal_vect -1 0 0 eqp3d {
2384 /imageI {0 -1 0} def
2385 /imageK {-1 0 0} def
2388 %% on calcule l image de la base (I,J,K)
2389 /imageJ {normal_vect 1 0 0 vectprod3d normalize3d} def
2390 /imageK {normal_vect} def
2391 /imageI {imageJ imageK vectprod3d} def
2392 1 0 0 imageK angle3d 0 eq {
2393 0 1 0 normal_vect vectprod3d /imageI defpoint3d
2395 normal_vect /imageK defpoint3d
2401 normalize3d /imageK defpoint3d
2402 normalize3d /imageI defpoint3d
2403 imageK imageI vectprod3d /imageJ defpoint3d
2407 /alpha exch 2 div def
2408 normalize3d /imageK defpoint3d
2409 normalize3d /imageI defpoint3d
2410 imageK imageI vectprod3d /imageJ defpoint3d
2411 %% et ensuite, on fait tourner la base autour de imageK
2412 imageI alpha cos mulv3d
2413 imageJ alpha sin mulv3d
2416 imageI alpha sin neg mulv3d
2417 imageJ alpha cos mulv3d
2426 normalize3d /normal_vect defpoint3d
2428 normal_vect -1 0 0 eqp3d {
2429 /imageI {0 -1 0} def
2430 /imageK {-1 0 0} def
2433 %% on calcule l image de la base (I,J,K)
2434 /imageJ {normal_vect 1 0 0 vectprod3d normalize3d} def
2435 /imageK {normal_vect} def
2436 /imageI {imageJ imageK vectprod3d} def
2437 1 0 0 imageK angle3d 0 eq {
2438 0 1 0 normal_vect vectprod3d /imageI defpoint3d
2440 normal_vect /imageK defpoint3d
2445 %% et ensuite, on fait tourner la base autour de imageK
2446 imageI alpha cos mulv3d
2447 imageJ alpha sin mulv3d
2450 imageI alpha sin neg mulv3d
2451 imageJ alpha cos mulv3d
2464 %%%%% ### projpath ###
2465 %% syntaxe : x y z [normal] projpath --> planprojpath
2466 %% syntaxe : x y z [normal] bool projpath --> planprojpath
2467 %% syntaxe : solid i projpath --> solidprojpath
2468 %% syntaxe : solid i bool projpath --> solidprojpath
2469 %% syntaxe : solid i str bool projpath --> solidprojpath
2470 %% syntaxe : solid i alpha str bool projpath --> solidprojpath
2481 mybool solidprojpath
2486 %% syntaxe : solid i str bool solidprojpath --> -
2488 %% syntaxe : solid i alpha str bool solidprojpath --> -
2489 %% projette le chemin courant sur la face i du solide, apres
2490 %% eventuellement une rotation d angle alpha autour de la normale
2491 %% bool : pour savoir si on tient compte de la visibilite
2494 /visibility exch def
2507 (Error : mauvais type d argument dans solidprojpath) ==
2509 /n solid solidnombrefaces def
2511 visibility not solid i solidfacevisible? or {
2512 currentdict /option known {
2515 solid i solidcentreface
2518 solid 0 i solidgetsommetface
2519 solid 1 i solidgetsommetface
2520 vecteur3d normalize3d
2521 solid i solidnormaleface alpha
2522 ] false planprojpath
2527 (Error : indice trop grand dans solidprojpath) ==
2533 %% syntaxe : x y z [normal] bool planprojpath
2536 /visibility exch def
2537 %% on calcule l image de la base (I,J,K)
2538 normalvect_to_orthobase
2546 visibility not x y z imageK planvisible? or {
2553 3dto2d jtoppoint} currentppathtransform
2560 %%%%% ### fin insertion ###
2562 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2563 %%%% fonctions numeriques %%%%
2564 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2566 %%%%% ### courbeparam ###
2568 /resolution exch def
2572 /courbe_dic 2 dict def
2573 courbe_dic /X {} put
2574 courbe_dic /Y {} put
2576 %% syntaxe : tmin tmax C@urbeparam_
2582 /dt tmax@ tmin@ sub resolution 1 sub div def
2583 tmin@ courbe_dic /X get exec
2585 tmin@ courbe_dic /Y get exec
2590 t courbe_dic /X get exec
2592 t courbe_dic /Y get exec
2596 /t t dt add store %% on incremente
2599 tmax@ courbe_dic /X get exec
2601 tmax@ courbe_dic /Y get exec
2607 %% syntaxe : tmin tmax {X} {Y} Courbeparam_
2609 courbe_dic exch /Y exch put
2610 courbe_dic exch /X exch put
2614 %% syntaxe : {X} {Y} courbeparam_
2622 %% syntaxe : tmin tmax {X} {Y} Courbeparam
2631 courbe_dic exch /Y exch put
2632 courbe_dic exch /X exch put
2637 tmin courbe_dic /X get exec
2639 tmin courbe_dic /Y get exec
2641 smoveto %% on commence le chemin
2642 tmin tmax C@urbeparam_
2647 currentdict /option known
2649 /dt tmax tmin sub resolution 1 sub div def
2650 tmin dt add courbe_dic /X get exec
2651 tmin dt add courbe_dic /Y get exec
2652 tmin courbe_dic /X get exec
2653 tmin courbe_dic /Y get exec
2655 tmax dt sub courbe_dic /X get exec
2656 tmax dt sub courbe_dic /Y get exec
2657 tmax courbe_dic /X get exec
2658 tmax courbe_dic /Y get exec
2659 currentdict /dt undef
2666 currentlinewidth 0 eq {} {stroke} ifelse
2672 %% syntaxe : {X} {Y} courbeparam
2690 %% syntaxe : tmin tmax {X} {Y} Courbeparam*
2693 /startest {true} def
2698 %% syntaxe : {X} {Y} courbeparam*
2701 /startest {true} def
2706 %%%%% ### courbe ###
2707 %% syntaxe : {f} courbe
2709 dup isstring %% y a-t-il une option de fin de ligne ?
2725 %% syntaxe : mini maxi {f} Courbe
2738 %% syntaxe : {f} courbe_
2746 %% syntaxe : mini maxi {f} Courbe_
2753 %% syntaxe : mini maxi {f} Courbe*
2756 /startest {true} def
2761 %% syntaxe : {f} courbe*
2764 /startest {true} def
2769 %%%%% ### courbeR2 ###
2770 %% syntaxe : tmin tmax C@urbeR2_
2776 /dt tmax@ tmin@ sub resolution 1 sub div def
2777 tmin@ courbe_dic /X get exec
2783 t courbe_dic /X get exec
2786 /t t dt add store %% on incremente
2789 tmax@ courbe_dic /X get exec
2795 %% syntaxe : tmin tmax {X} CourbeR2_
2797 courbe_dic exch /X exch put
2801 %% syntaxe : {X} courbeR2_
2809 %% syntaxe : tmin tmax {X} CourbeR2
2826 courbe_dic exch /X exch put
2833 currentlinewidth 0 eq {} {stroke} ifelse
2839 %% syntaxe : {X} courbeR2
2846 %% syntaxe : tmin tmax {X} CourbeR2*
2849 /startest {true} def
2854 %% syntaxe : {X} {Y} courbeR2*
2857 /startest {true} def
2862 %%%%% ### courbeR3 ###
2863 %% syntaxe : t1 t2 {f} (option) CourbeR3
2869 /lafonction exch def
2871 currentdict /option known
2878 %% syntaxe : {f} (option) CourbeR3
2880 tmin tmax 3 -1 roll CourbeR3
2883 %%%%% ### fin insertion ###
2885 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2886 %%%% fonctions et constantes mathematiques %%%%
2887 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2890 %%%%%%%%%%% constantes mathematiques %%%%%%%%%%%%%%
2895 %%%%%%%%%%% fonctions mathematiques %%%%%%%%%%%%%%%
2897 /rd {180 pi div mul} def %% transforme des rd en degres
2898 /deg {pi mul 180 div} def %% transforme des degres en rd
2899 /log {ln 10 ln div} def
2900 /Exp {e exch exp} def
2903 /tan {dup sin exch cos div} def
2904 /cotan {dup cos exch sin div} def
2905 /Tan {dup Sin exch Cos div} def
2906 /Cotan {dup Cos exch Sin div} def
2914 /Arctan {arctan deg} def
2917 dup mul neg 1 add sqrt
2921 /Arccos {arccos deg} def
2927 dup mul neg 1 add sqrt
2935 /Arcsin {arcsin deg} def
2936 /cosh {dup Exp exch neg Exp add 2 div} def
2937 /sinh {dup Exp exch neg Exp sub 2 div} def
2938 /tanh {dup sinh exch cosh div} def
2939 /cotanh {dup cosh exch sinh div} def
2940 /argcosh {dup dup mul 1 sub sqrt add ln} def
2941 /argsinh {dup dup mul 1 add sqrt add ln} def
2953 {dup 1 sub factorielle mul}
2961 x m sub dup mul sigma dup mul 2 mul div neg Exp
2962 2 pi mul sigma dup mul mul sqrt div
2965 %% syntaxe : a n modulo
2995 %%%%% ### setcolor ###
2996 %% syntaxe : tableau setcolor
2999 {aload pop setcmykcolor}
3000 {aload pop setrgbcolor}
3005 %% cherche si un elt donne appartient au tableau donne
3006 %% rque : utilise 3 variables locales
3007 %% syntaxe : elt array in --> index boolean
3013 false %% la reponse a priori
3015 liste i get elt eq {
3016 pop %% en enleve la reponse
3017 i true %% pour mettre la bonne
3025 %%%%% ### starfill ###
3026 %% la procedure pour les objets "star"
3027 %% si c est "star" on fait le fillstyle, sinon non
3039 %% syntaxe : u v addv --> u+v
3040 /addv { %% xA yA xB yB
3041 3 1 roll %% xA yB yA xB
3042 4 1 roll %% xB xA yB yA
3043 add 3 1 roll %% yB+yA xB xA
3047 %%%%% ### continu ###
3052 %%%%% ### trigospherique ###
3053 %% passage spherique --> cartesiennes
3054 %% les formules de passage ont été récupérées ici :
3055 %% http://fr.wikipedia.org/wiki/Coordonn%C3%A9es_polaires
3056 %% syntaxe : r theta phi rtp2xyz -> x y z
3062 /x phi sin theta cos mul r mul def
3063 /y phi sin theta sin mul r mul def
3064 /z phi cos r mul def
3069 %% trace d'un arc sur une sphere de centre O
3070 %% syntaxe : r theta1 phi1 r theta2 phi2 arcspherique
3084 1 theta1 phi1 rtp2xyz /u defpoint3d
3085 1 theta2 phi2 rtp2xyz /v defpoint3d
3086 u v vectprod3d u vectprod3d dupp3d norme3d 1 exch div mulv3d /w defpoint3d
3088 /sinalpha u v vectprod3d norme3d def
3089 /cosalpha u v scalprod3d def
3090 /alpha sinalpha cosalpha atan def
3092 /pas alpha n div def
3099 u t cos r mul mulv3d
3100 w t sin r mul mulv3d
3104 currentdict /option known {
3112 %% trace d'un arc sur une sphere de centre O
3113 %% syntaxe : r theta1 phi1 r theta2 phi2 arcspherique
3124 1 theta1 phi1 rtp2xyz /u defpoint3d
3125 1 theta2 phi2 rtp2xyz /v defpoint3d
3126 u v vectprod3d u vectprod3d dupp3d norme3d 1 exch div mulv3d /w defpoint3d
3128 /sinalpha u v vectprod3d norme3d def
3129 /cosalpha u v scalprod3d def
3130 /alpha sinalpha cosalpha atan def
3132 /pas alpha n div def
3138 u t cos r mul mulv3d
3139 w t sin r mul mulv3d
3146 %% trace d'une geodesique sur une sphere de centre O
3147 %% syntaxe : r theta1 phi1 r theta2 phi2 geodesique_sphere
3148 /geodesique_sphere {
3158 1 theta1 phi1 rtp2xyz /u defpoint3d
3159 1 theta2 phi2 rtp2xyz /v defpoint3d
3160 u v vectprod3d u vectprod3d dupp3d norme3d 1 exch div mulv3d /w defpoint3d
3162 /sinalpha u v vectprod3d norme3d def
3163 /cosalpha u v scalprod3d def
3164 /alpha sinalpha cosalpha atan def
3172 u t cos r mul mulv3d
3173 w t sin r mul mulv3d
3182 %% syntaxe : A B C trianglespherique --> trace le rtiangle ABC
3183 %% (coordonnees spheriques)
3184 /trianglespherique* {
3186 /startest {true} def
3191 /trianglespherique {
3198 A rtp2xyz 3dto2d smoveto
3204 currentlinewidth 0 eq {} {stroke} ifelse
3209 %%%%% ### fin insertion ###
3211 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3212 %%%% operations sur les tableaux %%%%
3213 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3215 %%%%% ### duparray ###
3224 %%%%% ### append ###
3225 %% syntaxe : string1 string2 append --> concatene les 2 chaines ou fusionne 2 tableaux
3231 [ tab1 aload pop tab2 aload pop ]
3235 /result str1 length str2 length add string def
3236 str1 result copy pop
3237 result str1 length str2 putinterval
3243 %%%%% ### rollparray ###
3244 %% syntaxe : array n rollparray -> array
3245 %% opere une rotation de n sur les couplets du tableau array
3255 [ table aload pop 2 {n 1 roll} repeat ]
3258 [ table aload pop 2 {n -1 roll} repeat ]
3266 %%%%% ### bubblesort ###
3267 %% syntaxe : array bubblesort --> array2 trie par ordre croissant
3268 %% code de Bill Casselman
3269 %% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
3273 /n a length 1 sub def
3275 % at this point only the n+1 items in the bottom of a remain to
3276 % the sorted largest item in that blocks is to be moved up into
3281 a i get a i 1 add get gt {
3282 % if a[i] > a[i+1] swap a[i] and a[i+1]
3286 % set new a[i] = old a[i+1]
3288 % set new a[i+1] = old a[i]
3299 %% syntaxe : array1 doublebubblesort --> array2 array3, array3 est
3300 %% trie par ordre croissant et array2 correspond a la position des
3301 %% indices de depart, ie si array1 = [3 2 4 1], alors array2 = [3 1 0 2]
3302 %% code de Bill Casselman, modifie par jpv, 15/08/2006
3303 %% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
3307 /n table length 1 sub def
3308 /indices [ 0 1 n {} for ] def
3310 % at this point only the n+1 items in the bottom of a remain to
3311 % the sorted largest item in that blocks is to be moved up into
3316 table i get table i 1 add get gt {
3317 % if a[i] > a[i+1] swap a[i] and a[i+1]
3320 table i table i 1 add get
3321 % set new a[i] = old a[i+1]
3323 % set new a[i+1] = old a[i]
3328 indices i indices i 1 add get
3329 % set new a[i] = old a[i+1]
3331 % set new a[i+1] = old a[i]
3342 %%%%% ### quicksort ###
3343 %% src : http://www.math.ubc.ca/~cass/graphics/text/www/code/sort.inc
3344 %% code de Bill Casselman, modifie par jpv, 18/10/2007
3346 /qsortdict 8 dict def
3350 % args: /comp a L R x
3351 % effect: effects a partition into two pieces [L j] [i R]
3352 % leaves i j on stack
3354 /partition { 8 dict begin
3362 a i get x comp exec not {
3368 x a j get comp exec not {
3379 indices j indices i get
3380 indices i indices j get
3393 % effect: sorts a[L .. R] according to comp
3398 % /c a [L R] /c a [L R]
3400 % /c a [L R] /c a L R L R
3402 % /c a [L R] /c a L R (L+R)/2
3404 % /c a [L R] /c a L R x
3407 % if j > L subsort(a, L, j)
3413 % /c a [L R] i j /c a [L R] i j
3415 % /c a [L R] i j /c a [L R] j
3423 % if i < R subsort(a, i, R)
3437 % effect: sorts the array a
3438 % comp returns truth of x < y for entries in a
3440 /quicksort { qsortdict begin
3453 % ----------------------------------------
3455 %% fin du code de Bill Casselman
3457 %% syntaxe : array1 doublebubblesort --> array2 array3, array3 est
3458 %% trie par ordre croissant et array2 correspond a la position des
3459 %% indices de depart, ie si array1 = [3 2 4 1], alors array2 = [3 1 0 2]
3460 %% code de Bill Casselman, modifie par jpv, 18/10/2007
3461 %% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
3466 a dup length /n exch def
3467 /indices [0 1 n 1 sub {} for ] def
3485 %% syntaxe : [x1 ... xn] (f) apply --> [f(x1) ... f(xn)]
3489 {/fonction exch cvx def}
3490 {/fonction exch def}
3496 liste @i get fonction
3507 %% syntaxe : [x1 ... xn] (f) papply
3511 {/fonction exch cvx def}
3512 {/fonction exch def}
3517 liste length 2 idiv {
3531 %% syntaxe : [x1 ... xn] (f) capply
3535 {/fonction exch cvx def}
3536 {/fonction exch def}
3541 liste length 3 idiv {
3556 %%%%% ### reverse ###
3557 %% syntaxe : array reverse --> inverse l ordre des items dans
3561 /le_tableau exch def
3562 /n le_tableau length def
3573 %% syntaxe : array_points reversep --> inverse l ordre des points dans
3577 /le_tableau exch def
3578 /n le_tableau length 2 idiv def
3590 %% syntaxe : array_points n getp --> le n-ieme point du tableau de
3591 %% points array_points
3599 %%%%% ### fin insertion ###
3601 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3603 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3605 %%%%% ### linear ###
3606 %% syntaxe : M i j any --> depose any dans M en a_ij
3619 %% syntaxe : M i j get_ij --> le coeff c_ij
3626 %% syntaxe : M i L put_Li --> remplace dans M la ligne Li par L
3631 %% syntaxe : M i get_Li --> la ligne Li de M
3636 %%%%% ### fin insertion ###
3638 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3639 %%%% geometrie 3d (calculs) %%%%
3640 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3642 %%%%% ### dupp3d ###
3643 %% duplique le vecteur 3d
3647 /dupv3d {dupp3d} def
3649 %%%%% ### angle3d ###
3650 %% syntaxe : vect1 vect2 angle3d
3653 normalize3d /vect2 defpoint3d
3654 normalize3d /vect1 defpoint3d
3655 /cosalpha vect1 vect2 scalprod3d def
3656 /sinalpha vect1 vect2 vectprod3d norme3d def
3657 sinalpha cosalpha atan
3661 %%%%% ### transformpoint3d ###
3662 %% syntaxe : x y z a11 a21 a31 a12 a22 a32 a13 a23 a33
3663 %% transformpoint3d -> X Y Z
3678 a11 x mul a12 y mul add a13 z mul add
3679 a21 x mul a22 y mul add a23 z mul add
3680 a31 x mul a32 y mul add a33 z mul add
3684 %%%%% ### normalize3d ###
3685 %% rend le vecteur 3d unitaire. Ne fait rien si u=0
3686 /unitaire3d { %% x y z
3689 /norme u norme3d def
3693 u 1 norme div mulv3d
3697 /normalize3d {unitaire3d} def
3700 %% syntaxe : u a mulv --> au
3701 /mulv { %% xA, yA, a
3703 3 1 roll %% xA, a, yA, a
3704 mul 3 1 roll %% ayA, xA, a
3708 %%%%% ### geom3d ###
3709 %% syntaxe : A k1 B k2 barycentre3d -> G, barycentre du systeme
3710 %% [(A, k1) (B, k2)]
3720 1 k1 k2 add div mulv3d
3724 %% syntaxe : array isobarycentre3d --> G
3728 /n table length 3 idiv def
3738 %% syntaxe : M A alpha hompoint3d -> le point M' tel que AM' = alpha AM
3744 A M vecteur3d alpha mulv3d A addv3d
3748 %% syntaxe : M A sympoint3d -> le point M' tel que AM' = -AM
3753 A M vecteur3d -1 mulv3d A addv3d
3757 %% syntaxe : A u translatepoint3d --> B image de A par la translation de vecteur u
3776 % syntaxe : M alpha_x alpha_y alpha_z rotateOpoint3d --> M'
3785 /c1 {RotX cos} bind def
3786 /c2 {RotY cos} bind def
3787 /c3 {RotZ cos} bind def
3788 /s1 {RotX sin} bind def
3789 /s2 {RotY sin} bind def
3790 /s3 {RotZ sin} bind def
3791 /M11 {c2 c3 mul} bind def
3792 /M12 {c3 s1 mul s2 mul c1 s3 mul sub} bind def
3793 /M13 {c1 c3 mul s2 mul s1 s3 mul add} bind def
3794 /M21 {c2 s3 mul} bind def
3795 /M22 {s1 s2 mul s3 mul c1 c3 mul add} bind def
3796 /M23 {s3 s2 mul c1 mul c3 s1 mul sub} bind def
3797 /M31 {s2 neg} bind def
3798 /M32 {s1 c2 mul} bind def
3799 /M33 {c1 c2 mul} bind def
3800 M11 Xpoint mul M12 Ypoint mul add M13 Zpoint mul add
3801 M21 Xpoint mul M22 Ypoint mul add M23 Zpoint mul add
3802 M31 Xpoint mul M32 Ypoint mul add M33 Zpoint mul add
3806 %%%%% ### vecteur3d ###
3807 %% creation du vecteur AB a partir de A et B
3808 /vecteur3d { %% xA yA zA xB yB zB
3822 %%%%% ### vectprod3d ###
3823 %% produit vectoriel de deux vecteurs 3d
3824 /vectprod3d { %% x1 y1 z1 x2 y2 z2
3832 y zp mul z yp mul sub
3833 z xp mul x zp mul sub
3834 x yp mul y xp mul sub
3838 %%%%% ### scalprod3d ###
3839 %% produit scalaire de deux vecteurs 3d
3840 /scalprod3d { %% x1 y1 z1 x2 y2 z2
3848 x xp mul y yp mul add z zp mul add
3852 %%%%% ### papply3d ###
3853 %% syntaxe : [A1 ... An] (f) papply3d --> [f(A1) ... f(An)]
3860 liste length 3 idiv {
3875 %%%%% ### defpoint3d ###
3876 %% creation du point A a partir de xA yA yB et du nom /A
3877 /defpoint3d { %% xA yA zA /nom
3880 [ 4 1 roll ] cvx memo exch
3884 %%%%% ### distance3d ###
3885 /distance3d { %% A B
3890 /getp3d { %% [tableau de points 3d] i --> donne le ieme point du tableau
3899 %%%%% ### norme3d ###
3900 %% norme d un vecteur 3d
3906 x dup mul y dup mul add z dup mul add sqrt
3910 %%%%% ### mulv3d ###
3911 %% (scalaire)*(vecteur 3d) Attention : dans l autre sens !
3912 /mulv3d { %% x y z lambda
3924 %%%%% ### addv3d ###
3925 %% addition de deux vecteurs 3d
3926 /addv3d { %% x1 y1 z1 x2 y2 z2
3940 %%%%% ### milieu3d ###
3941 /milieu3d { %% A B --> I le milieu de [AB]
3956 4 {8 -1 roll} repeat
3964 %%%%% ### ABpoint3d ###
3965 %% syntaxe : A B k ABpoint3d --> M
3966 %% M tel que vect(AM) = k vect (AB)
3978 %%%%% ### angle3doriente ###
3979 %% syntaxe : vect1 vect2 vect3 angle3d
3980 %% vect3 est la normale au plan (vect1, vect2)
3983 normalize3d /vect3 defpoint3d
3984 normalize3d /vect2 defpoint3d
3985 normalize3d /vect1 defpoint3d
3986 /cosalpha vect1 vect2 scalprod3d def
3987 /sinalpha vect1 vect2 vectprod3d vect3 scalprod3d def
3988 sinalpha cosalpha atan
3992 %%%%% ### points3dalignes ###
3993 %% syntaxe : A B C points3dalignes -> bool
3999 A B vecteur3d /u defpoint3d
4000 A C vecteur3d /v defpoint3d
4001 u v vectprod3d norme3d 1E-7 lt
4005 %% syntaxe : M A B point3dsursegment --> true si M in [AB], false sinon
4006 /point3dsursegment {
4011 M A B points3dalignes {
4025 %%%%% ### fin insertion ###
4027 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4028 %%%% geometrie 3d (dessins) %%%%
4029 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4031 %%%%% ### point3d ###
4036 /points3d { %% tableau de points3d
4040 %%%%% ### ligne3d ###
4041 %% [tableau de points3d] option --> trace la ligne brisee
4048 currentdict /option known
4055 %% [tableau de points3d] option --> trace la ligne brisee
4062 currentdict /option known
4069 %%%%% ### tab3dto2d ###
4070 %% transforme un tableau de points 3d en tableau de points 2d
4076 n 1 sub -1 n 3 idiv 2 mul
4084 %%%%% ### polygone3d ###
4085 /polygone3d { %% tableau de points3d
4089 /polygone3d* { %% tableau de points3d
4093 %%%%% ### fin insertion ###
4095 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4096 %%%% gestion du texte %%%%
4097 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4099 %%%%% ### pathtext ###
4100 %% syntaxe : string x y initp@thtext
4120 %% syntaxe : string x y cctext_
4123 llx wx add lly wy add -.5 mulv rmoveto
4143 hadjust neg 0 rmoveto
4151 wx llx add -.5 mul 0 rmoveto
4164 hadjust vadjust rmoveto
4165 llx neg lly neg rmoveto
4171 hadjust neg vadjust rmoveto
4172 wx neg lly neg rmoveto
4179 llx wx add -.5 mul lly neg rmoveto
4185 hadjust vadjust neg rmoveto
4186 llx neg wy neg rmoveto
4192 0 vadjust neg rmoveto
4199 hadjust neg vadjust neg rmoveto
4200 wx neg wy neg rmoveto
4206 0 vadjust neg rmoveto
4207 llx wx add -2 div wy neg rmoveto
4214 llx neg lly wy add -2 div rmoveto
4221 0 lly wy add -2 div rmoveto
4227 hadjust neg 0 rmoveto
4228 wx neg lly wy add -2 div rmoveto
4235 llx wx add lly wy add -.5 mulv rmoveto
4239 %%%%% ### fin insertion ###
4241 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4242 %%%% bibliotheque sur les solides %%%%
4243 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4245 %%%%% ### solide ###
4246 %% solid = [Sommets Faces Colors_Faces InOut_Table]
4250 /solidgetpointstable {solidgetsommets} def
4267 %% syntaxe : solid i solidgetfcolor --> str
4271 solidgetfcolors i get
4275 %% syntaxe : solid i str solidputfcolor --> -
4280 solidgetfcolors i str put
4284 /solidgetinouttable {
4291 /solidputpointstable {solidputsommets} def
4301 /solidputinouttable {
4305 %% syntaxe : any issolid --> booleen, vrai si any est de type solid
4310 candidat length 4 eq {
4311 candidat 0 get isarray
4312 candidat 1 get isarray and
4313 candidat 2 get isarray and
4314 candidat 3 get isarray and
4327 /S solid solidgetsommets def
4328 /F solid solidgetfaces def
4329 /FC solid solidgetfcolors def
4330 /IO solid solidgetinouttable def
4335 FC duparray exch pop
4336 IO duparray exch pop
4341 %% syntaxe : solid array solidputinfaces --> -
4344 /facesinternes exch def
4346 /n2 facesinternes length def
4347 /IO solid solidgetinouttable def
4348 /facesexternes solid solidgetoutfaces def
4349 /n1 facesexternes length def
4351 [facesexternes aload pop facesinternes aload pop]
4356 IO 3 n1 n2 add 1 sub put
4360 %% %% syntaxe : solid array solidputoutfaces --> -
4361 %% /solidputoutfaces {
4363 %% /facesexternes exch def
4365 %% /n1 facesexternes length def
4366 %% /IO solid solidgetinouttable def
4367 %% /facesinternes solid solidgetinfaces def
4368 %% /n2 facesinternes length def
4370 %% [facesexternes aload pop facesinternes aload pop]
4373 %% IO 1 n1 1 sub put
4375 %% IO 3 n1 n2 add 1 sub put
4379 %% syntaxe : solid array solidputoutfaces --> -
4382 /facesexternes exch def
4384 /n1 facesexternes length def
4385 /IO solid solidgetinouttable def
4386 /facesinternes solid solidgetinfaces def
4387 /n2 facesinternes length def
4389 [facesexternes aload pop facesinternes aload pop]
4394 IO 3 n1 n2 add 1 sub put
4398 /solidnombreinfaces {
4401 solid solidwithinfaces {
4402 /IO solid solidgetinouttable def
4403 IO 3 get IO 2 get sub 1 add
4410 /solidnombreoutfaces {
4413 /IO solid solidgetinouttable def
4414 IO 1 get IO 0 get sub 1 add
4418 %% syntaxe : solid solidgetinfaces --> array
4423 (Error : mauvais type d argument dans solidgetinfaces) ==
4426 solid solidwithinfaces {
4427 /IO solid solidgetinouttable def
4428 /F solid solidgetfaces def
4431 /n n2 n1 sub 1 add def
4439 %% syntaxe : solid solidgetoutfaces --> array
4444 (Error : mauvais type d argument dans solidgetoutfaces) ==
4447 /IO solid solidgetinouttable def
4448 /F solid solidgetfaces def
4451 /n n2 n1 sub 1 add def
4456 /tracelignedeniveau? false def
4457 /hauteurlignedeniveau 1 def
4458 /couleurlignedeniveau {rouge} def
4459 /linewidthlignedeniveau 4 def
4462 /aretescachees true def
4463 /defaultsolidmode 2 def
4468 /solidgrid false def
4471 %% syntaxe : solid i string solidputfcolor
4472 %% syntaxe : solid str outputcolors
4473 %% syntaxe : solid str1 str2 inoutputcolors
4474 %% syntaxe : solid string n solidputncolors
4475 %% syntaxe : solid array solidputincolors --> -
4476 %% syntaxe : solid array solidputoutcolors --> -
4477 %% syntaxe : solid solidgetincolors --> array
4478 %% syntaxe : solid solidgetoutcolors --> array
4480 %% syntaxe : solid array solidputinfaces --> -
4481 %% syntaxe : solid array solidputoutfaces --> -
4482 %% syntaxe : solid solidgetinfaces --> array
4483 %% syntaxe : solid solidgetoutfaces --> array
4485 %% syntaxe : solid1 solid2 solidfuz -> solid
4487 %% syntaxe : solid i solidgetsommetsface -> array
4488 %% array = tableau de points 3d
4489 /solidgetsommetsface {
4493 /F solid i solidgetface def
4495 0 1 F length 1 sub {
4497 solid F k get solidgetsommet
4503 %% syntaxe : solid index table solidputface -> -
4508 solidgetfaces i table put
4512 %% syntaxe : solid table solidaddface -> -
4513 %% on ne se preoccupe pas des faces internes
4518 /IO solid solidgetinouttable def
4520 /FC solid solidgetoutcolors def
4522 solid [ solid solidgetfaces aload pop table ] solidputfaces
4523 solid IO solidputinouttable
4524 % solid solidnombrefaces
4534 solid solidnombreinfaces
4535 solid solidnombreoutfaces
4540 %% syntaxe : solid M solidaddsommetexterne -> -
4541 %% on ajoute le sommet sans se preoccuper de rien
4542 /solidaddsommetexterne {
4547 [ solid solidgetsommets aload pop M ]
4552 %% syntaxe : solid array solidaddsommets -> -
4557 /n table length 3 idiv def
4560 solid table i getp3d solidaddsommet pop
4565 %% syntaxe : solid M solidaddsommet -> k
4566 %% on ajoute le sommet M. Si il est deja sur une arete,
4567 %% on l incorpore a la face concernee
4568 %% s il est deja present, on ne le rajoute pas.
4569 %% Renvoie l indice du sommet rajoute.
4574 /nbf solid solidnombrefaces def
4575 /N solid solidnombresommets def
4577 %% le sommet est-il deja dans la structure
4581 %% solid i solidgetsommet == == ==
4583 %% solid i solidgetsommet M eqp3d ==
4585 % solid i solidgetsommet M eqp3d {
4586 solid i solidgetsommet M distance3d 1e-7 le {
4587 %% oui => c est fini
4592 %% non => on le rajoute
4594 solid M solidaddsommetexterne
4595 %% est il sur une arete deja codee
4599 solid i solidgetface /F exch def
4604 solid j i solidgetsommetface
4605 solid j 1 add nbsf mod i solidgetsommetface
4607 %% il est sur l arete concernee
4614 j 1 add nbsf mod dup 0 eq {
4632 %%%%% ### solidrmsommet ###
4633 %% syntaxe : solid i solidrmsommet -> -
4639 (Erreur : mauvais type d argument dans solidrmsommet) ==
4642 solid i solidsommetsadjsommet length 0 gt {
4643 (Erreur : sommet non isole dans solidrmsommet) ==
4647 %% on s occupe des sommets
4648 /n solid solidnombresommets def
4653 solid j solidgetsommet
4657 solid S solidputsommets
4658 %% on s occupe des faces
4659 /n solid solidnombrefaces def
4664 /Fj solid j solidgetface def
4665 [0 1 Fj length 1 sub {
4666 %% sommet d indice k de la face Fj
4674 solid F solidputfaces
4678 %%%%% ### solidsommetsadjsommet ###
4679 %% syntaxe : solid i solidsommetsadjsommet --> array
4680 %% array est le tableau des indices des sommets adjacents au
4681 %% sommet d indice i
4682 /solidsommetsadjsommet {
4686 solid no solidfacesadjsommet /facesadj exch def
4688 /nbadj facesadj length def
4691 %% examen de la jieme face
4693 /F solid facesadj j get solidgetface def
4694 /nbsommetsface F length def
4697 /i1 F index 1 sub nbsommetsface modulo get def
4698 /i2 F index 1 add nbsommetsface mod get def
4699 %% si i1 n est pas deja note, on le rajoute
4703 /sommetsadj [ sommetsadj aload pop i1 ] store
4705 %% si i2 n est pas deja note, on le rajoute
4709 /sommetsadj [ sommetsadj aload pop i2 ] store
4712 (Error : bug dans solidsommetsadjsommet) ==
4720 %%%%% ### solidfacesadjsommet ###
4721 %% syntaxe : solid i solidfacesadjsommet --> array
4722 %% array est le tableau des indices des faces adjacentes au
4723 %% sommet d indice i
4724 /solidfacesadjsommet {
4728 /n solid solidnombrefaces def
4729 /indicesfacesadj [] def
4732 /F solid j solidgetface def
4735 /indicesfacesadj [ indicesfacesadj aload pop j ] store
4742 %%%%% ### fin insertion ###
4744 %% /tracelignedeniveau? false def
4745 %% /hauteurlignedeniveau 1 def
4746 %% /couleurlignedeniveau {rouge} def
4747 %% /linewidthlignedeniveau 4 def
4749 %% /solidgrid true def
4750 %% /aretescachees true def
4751 %% /defaultsolidmode 2 def
4753 %%%%% ### newsolid ###
4754 %% syntaxe : newsolid --> depose le solide nul sur la pile
4759 %%%%% ### generesolid ###
4764 [S F [F length {()} repeat] [0 F length 1 sub -1 -1]]
4768 %%%%% ### nullsolid ###
4769 %% syntaxe : solide nullsolid -> booleen, vrai si le solide est nul
4773 candidat issolid not {
4774 (Error type argument dans "nullsolid") ==
4777 candidat solidgetsommets length 0 eq {
4785 %%%%% ### solidnombreoutfaces ###
4786 /solidnombreoutfaces {
4790 (Error : mauvais type d argument dans solidnombreoutfaces) ==
4796 /IO solid solidgetinouttable def
4804 %%%%% ### solidnombreinfaces ###
4805 /solidnombreinfaces {
4809 (Error : mauvais type d argument dans solidnombreinfaces) ==
4812 solid solidwithinfaces {
4813 /IO solid solidgetinouttable def
4823 %%%%% ### solidtests ###
4824 %% syntaxe : solid solidwithinfaces --> bool, true si le solide est vide
4829 (Error : mauvais type d argument dans solidwithinfaces) ==
4832 /table solid solidgetinouttable def
4841 %%%%% ### solidgetsommet ###
4842 %% syntaxe : solid i j solidgetsommetface --> sommet i de la face j
4843 /solidgetsommetface {
4849 (Error : mauvais type d argument dans solidgetsommetface) ==
4852 /table_faces solid solidgetfaces def
4853 /table_sommets solid solidgetsommets def
4854 /k table_faces j get i get def
4855 table_sommets k getp3d
4859 %% syntaxe : solid i solidgetsommetsface --> array, tableau des
4860 %% sommets de la face i du solide
4861 /solidgetsommetsface {
4866 (Error : mauvais type d argument dans solidgetsommetsface) ==
4869 /table_faces solid solidgetfaces def
4870 /table_sommets solid solidgetsommets def
4871 /table_indices table_faces i get def
4873 0 1 table_indices length 1 sub {
4875 table_sommets table_indices j get getp3d
4881 %% syntaxe : solid i solidgetsommet --> sommet i du solide
4887 (Error : mauvais type d argument dans solidgetsommet) ==
4890 /table_sommets solid solidgetsommets def
4891 table_sommets i getp3d
4895 %%%%% ### solidcentreface ###
4896 %% syntaxe : solid i solidcentreface --> M
4898 solidgetsommetsface isobarycentre3d
4901 %%%%% ### solidnombre ###
4902 /solidnombresommets {
4903 solidgetsommets length 3 idiv
4906 /solidfacenombresommets {
4911 solidgetfaces length
4914 %%%%% ### solidshowsommets ###
4922 /n sol solidnombresommets def
4923 /m sol solidnombrefaces def
4924 currentdict /option known not {
4925 /option [0 1 n 1 sub {} for] def
4927 0 1 option length 1 sub {
4929 option k get /i exch def %% indice du sommet examine
4930 sol i solidgetsommet point3d
4935 %%%%% ### solidnumsommets ###
4938 % Font findfont 10 scalefont setfont
4944 /n sol solidnombresommets def
4945 /m sol solidnombrefaces def
4946 currentdict /option known not {
4947 /option [0 1 n 1 sub {} for] def
4952 0 1 option length 1 sub {
4954 option k get /i exch def %% indice du sommet examine
4956 /j exch def %% indice de la face examinee
4957 i sol j solidgetface in {
4958 %% le sommet i est dans la face j
4963 %% le sommet i est dans la face j
4964 sol j solidcentreface /G defpoint3d
4965 sol i solidgetsommet /S defpoint3d
4967 G S vecteur3d normalize3d
4968 15 dup ptojpoint pop
4976 %%%%% ### gestionsolidmode ###
4977 %% table = [ [vars] [mode0] [mode1] [mode2] [mode3] [mode4] ]
4985 /tableaffectation exch def
4988 /mode defaultsolidmode def
4991 /vars table 0 get def
4992 /nbvars vars length def
4994 /tableaffectation table mode 1 add 5 min get def
4999 tableaffectation i get
5006 %%%%% ### solidfuz ###
5007 %% syntaxe : solid1 solid2 solidfuz -> solid
5012 /S1 solid1 solidgetsommets def
5013 /S2 solid2 solidgetsommets def
5014 /n S1 length 3 idiv def
5019 %% les faces internes et leurs couleurs
5020 /FI1 solid1 solidgetinfaces def
5021 /FIC1 solid1 solidgetincolors def
5022 solid2 solidnombreinfaces 0 eq {
5026 /FI2 solid2 solidgetinfaces {{n add} apply} apply def
5027 /FIC2 solid2 solidgetincolors def
5029 /FI [FI1 aload pop FI2 aload pop] def
5030 /FIC [FIC1 aload pop FIC2 aload pop] def
5032 %% les faces externes et leurs couleurs
5033 /FO1 solid1 solidgetoutfaces def
5034 /FOC1 solid1 solidgetoutcolors def
5035 /FO2 solid2 solidgetoutfaces {{n add} apply} apply def
5036 /FOC2 solid2 solidgetoutcolors def
5037 /FO [FO1 aload pop FO2 aload pop] def
5038 /FOC [FOC1 aload pop FOC2 aload pop] def
5040 /F [FO aload pop FI aload pop] def
5041 /FC [FOC aload pop FIC aload pop] def
5042 /IO [0 FO length 1 sub dup 1 add dup FI length add 1 sub] def
5045 dup FC solidputfcolors
5046 dup IO solidputinouttable
5050 %%%%% ### solidnormaleface ###
5051 %% syntaxe : solid i solidnormaleface --> u, vecteur normale a la
5052 %% face d indice i du solide
5058 (Error : mauvais type d argument dans solidgetsommetface) ==
5061 %% solid 0 i solidgetsommetface /G defpoint3d
5063 %% solid 1 i solidgetsommetface
5066 %% solid 2 i solidgetsommetface
5069 /n solid i solidfacenombresommets def
5070 solid i solidcentreface /G defpoint3d
5071 %% debug %% G 3dto2d point
5073 solid 0 i solidgetsommetface
5075 % gsave bleu A point3d grestore
5077 vecteur3d normalize3d
5079 solid 1 i solidgetsommetface
5081 % gsave orange A point3d grestore
5083 vecteur3d normalize3d
5085 /resultat defpoint3d
5086 resultat normalize3d
5090 %%%%% ### solidtransform ###
5091 %% syntaxe : solid1 {f} solidtransform --> solid2, solid2 est le
5092 %% transforme de solid1 par la transformation f : R^3 -> R^3
5098 (Error : mauvais type d argument dans solidtransform) ==
5102 solid solidgetsommets {f} papply3d
5104 solid les_sommets solidputsommets
5109 %%%%% ### solidputcolor ###
5110 %% syntaxe : solid i string solidputfcolor
5116 /FC solid solidgetfcolors def
5123 %% syntaxe : solid solidgetincolors --> array
5128 (Error : mauvais type d argument dans solidgetincolors) ==
5131 solid solidwithinfaces {
5132 /fcol solid solidgetfcolors def
5133 /IO solid solidgetinouttable def
5136 /n n2 n1 sub 1 add def
5137 fcol n1 n getinterval
5144 %% syntaxe : solid solidgetoutcolors --> array
5145 /solidgetoutcolors {
5149 (Error : mauvais type d argument dans solidgetoutcolors) ==
5152 /fcol solid solidgetfcolors def
5153 /IO solid solidgetinouttable def
5156 /n n2 n1 sub 1 add def
5157 fcol n1 n getinterval
5161 %% syntaxe : solid array solidputincolors --> -
5164 /newcolorstable exch def
5167 (Error : mauvais type d argument dans solidputincolors) ==
5170 /n newcolorstable length def
5171 n solid solidnombreinfaces ne {
5172 (Error : mauvaise longueur de tableau dans solidputincolors) ==
5176 /FC solid solidgetfcolors def
5177 /IO solid solidgetinouttable def
5179 FC n1 newcolorstable putinterval
5184 %% syntaxe : solid array solidputoutcolors --> -
5185 /solidputoutcolors {
5187 /newcolorstable exch def
5190 (Error : mauvais type d argument dans solidputoutcolors) ==
5193 /n newcolorstable length def
5194 n solid solidnombreoutfaces ne {
5195 (Error : mauvaise longueur de tableau dans solidputoutcolors) ==
5199 /FC solid solidgetfcolors def
5200 /IO solid solidgetinouttable def
5202 FC n1 newcolorstable putinterval
5207 %% syntaxe : solid str outputcolors
5213 (Error : mauvais type d argument dans inoutputcolors) ==
5216 /n solid solidnombreoutfaces def
5217 solid [ n {color} repeat ] solidputoutcolors
5221 %% syntaxe : solid str inputcolors
5227 (Error : mauvais type d argument dans inoutputcolors) ==
5230 /n solid solidnombreinfaces def
5231 solid [ n {color} repeat ] solidputincolors
5235 %% syntaxe : solid str1 str2 inoutputcolors
5241 solid colin inputcolors
5242 solid colout outputcolors
5246 %% syntaxe : solid array solidputoutcolors --> -
5247 /solidputoutcolors {
5249 /newcolorstable exch def
5252 (Error : mauvais type d argument dans solidputoutcolors) ==
5255 /n newcolorstable length def
5256 n solid solidnombreoutfaces ne {
5257 (Error : mauvaise longueur de tableau dans solidputoutcolors) ==
5261 /FC solid solidgetfcolors def
5262 /IO solid solidgetinouttable def
5264 FC length n n1 add lt {
5265 solid newcolorstable solidputfcolors
5267 FC n1 newcolorstable putinterval
5273 %%%%% ### solidputhuecolors ###
5274 %% syntaxe : solid table solidputhuecolors --> -
5275 /solidputhuecolors {
5278 solidgetinouttable /IO exch def
5285 /solidputinhuecolors {
5289 solid solidgetinouttable /IO exch def
5290 solid solidwithinfaces {
5299 /solidputinouthuecolors {
5302 solidgetinouttable /IO exch def
5304 IO 3 get IO 1 get max
5309 %% syntaxe : solid table n1 n2 s@lidputhuec@l@rs --> -
5310 %% affecte les couleurs des faces d indice n1 a n2 du solid solid, par
5311 %% un degrade defini par la table.
5312 /s@lidputhuec@l@rs {
5326 [a0 cvx exec] length 0 eq {
5327 a0 cvx exec currentrgbcolor
5335 [a1 cvx exec] length 0 eq {
5336 a1 cvx exec currentrgbcolor
5342 /table [lacouleurdepart lacouleurarrivee] def
5344 /A {a0 i a1 a0 sub mul n 1 sub div add} def
5348 /espacedecouleurs (sethsbcolor) def
5355 /A {a0 i a1 a0 sub mul n 1 sub div add} def
5359 /espacedecouleurs (sethsbcolor) def
5369 /A {a0 i a1 a0 sub mul n 1 sub div add} def
5370 /B {b0 i b1 b0 sub mul n 1 sub div add} def
5371 /C {c0 i c1 c0 sub mul n 1 sub div add} def
5373 /espacedecouleurs (setrgbcolor) def
5383 /A {a0 i a1 a0 sub mul n 1 sub div add} def
5384 /B {b0 i b1 b0 sub mul n 1 sub div add} def
5385 /C {c0 i c1 c0 sub mul n 1 sub div add} def
5387 /espacedecouleurs (sethsbcolor) def
5399 /A {a0 i a1 a0 sub mul n 1 sub div add} def
5400 /B {b0 i b1 b0 sub mul n 1 sub div add} def
5401 /C {c0 i c1 c0 sub mul n 1 sub div add} def
5402 /D {d0 i d1 d0 sub mul n 1 sub div add} def
5403 /espacedecouleurs (setcmykcolor) def
5409 [A B C D] espacedecouleurs astr2str
5416 %%%%% ### solidrmface ###
5417 %% syntaxe : solid i solidrmface -> -
5423 (Error : mauvais type d argument dans solidrmface) ==
5426 %% on enleve la face
5427 /F solid solidgetfaces def
5428 F length 1 sub i lt {
5429 (Error : indice trop grand dans solidrmface) ==
5433 0 1 F length 1 sub {
5441 solid NF solidputfaces
5442 %% on enleve la couleur correspondante
5443 /FC solid solidgetfcolors def
5445 0 1 FC length 1 sub {
5453 solid NFC solidputfcolors
5454 %% on ajuste la table inout
5455 /IO solid solidgetinouttable def
5456 solid i solidisoutface {
5457 IO 1 IO 1 get 1 sub put
5458 solid solidwithinfaces {
5459 IO 2 IO 2 get 1 sub put
5460 IO 3 IO 3 get 1 sub put
5463 solid i solidisinface {
5464 IO 1 IO 1 get 1 sub put
5465 IO 2 IO 2 get 1 sub put
5466 IO 3 IO 3 get 1 sub put
5468 solid IO solidputinouttable
5472 %% syntaxe : solid table solidrmfaces --> -
5475 /table exch bubblesort reverse def
5477 table {solid exch solidrmface} apply
5481 %%%%% ### videsolid ###
5482 %% syntaxe : solid videsolid -> -
5487 (Error : mauvais type d argument dans videsolid) ==
5490 solid solidwithinfaces not {
5491 /IO solid solidgetinouttable def
5492 /FE solid solidgetfaces def
5495 IO 3 2 n mul 1 sub put
5496 solid IO solidputinouttable
5497 %% on inverse chaque face
5498 /FI FE {reverse} apply def
5499 solid FE FI append solidputfaces
5500 %% et on rajoute autant de couleurs vides que de faces
5501 /FEC solid solidgetfcolors def
5502 % /FIC [FI length {()} repeat] def
5503 % solid FEC FIC append solidputfcolors
5504 solid FEC duparray append solidputfcolors
5509 %%%%% ### solidnumfaces ###
5510 %% syntaxe : solid array solidnumfaces
5511 %% syntaxe : solid array bool solidnumfaces
5512 %% array, le tableau des indices des faces a numeroter, est optionnel
5513 %% si bool=true, on ne numerote que les faces visibles
5527 /n sol solidnombrefaces def
5528 currentdict /option known not {
5529 /option [0 1 n 1 sub {} for] def
5532 0 1 option length 1 sub {
5535 j ( ) cvs sol j bool cctextp3d
5540 %%%%% ### creusesolid ###
5541 %% syntaxe : solid creusesolid -> -
5546 (Error : mauvais type d argument dans creusesolid) ==
5549 %% on enleve le fond et le chapeau
5552 %% on inverse chaque face
5557 %%%%% ### fin insertion ###
5559 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5560 %%%% dessin des solides %%%%
5561 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5563 %%%%% ### solidisinface ###
5564 %% syntaxe : solid i solidisinface --> bool
5565 %% true si i est l indice d une face interne, false sinon
5569 solidgetinouttable /IO exch def
5577 %%%%% ### solidisoutface ###
5578 %% syntaxe : solid i solidisoutface --> bool
5579 %% true si i est l indice d une face externe, false sinon
5583 solidgetinouttable /IO exch def
5591 %%%%% ### planvisible ###
5592 %% syntaxe : A k planvisible? --> true si le plan est visible
5595 /normale_plan defpoint3d
5602 ligne_de_vue normale_plan scalprod3d 0 gt
5606 %%%%% ### solidlight ###
5607 %/lightintensity 1 def
5608 %/lightsrc {10 15 20} def
5610 /setlightintensity {
5611 /lightintensity exch def
5615 /lightsrc defpoint3d
5622 [ currentrgbcolor ] /lightcolor exch
5628 %%%%% ### drawsolid ###
5629 %% syntaxe : solid i solidfacevisible? --> true si la face est visible
5630 /solidfacevisible? {
5635 (Error : mauvais type d argument dans solidgetsommetface) ==
5638 solid i solidgetface length 2 le {
5642 solid i solidcentreface
5648 solid i solidnormaleface
5650 ligne_de_vue normale_face scalprod3d 0 gt
5655 %% syntaxe : solid i affectecouleursolid_facei --> si la couleur de
5656 %% la face i est definie, affecte fillstyle a cette couleur
5657 /affectecouleursolid_facei {
5661 solid solidgetfcolors /FC exch def
5662 FC length 1 sub i ge {
5663 FC i get length 1 ge {
5664 /fillstyle FC i get ( fill) append cvx
5676 %% syntaxe : A solid i dessinefacecachee
5677 /dessinefacecachee {
5682 (Error : mauvais type d argument dans dessinefacecachee) ==
5687 /F solid solidgetfaces def
5688 /S solid solidgetsommets def
5690 solid i solidfacevisible? not {
5691 %% face cachee => on prend chacune des aretes de la face et on
5692 %% regarde si elle est deja dessinee.
5694 /n F i get length def %% nb de sommets de la face
5697 /k1 F i k get_ij def %% indice sommet1
5698 /k2 F i k 1 add n mod get_ij def %% indice sommet2
5699 A k1 k2 get_ij not {
5701 currentlinewidth .5 mul setlinewidth
5704 S k2 getp3d] ligne3d
5715 %% syntaxe : A solid i dessinefacevisible
5716 /dessinefacevisible {
5722 (Error : mauvais type d argument dans dessinefacevisible) ==
5725 /F solid solidgetfaces def
5726 /S solid solidgetsommets def
5728 solid i solidfacevisible? {
5729 /n F i get length def %% nb de sommets de la face
5732 %% choix de la couleur
5737 solid i solidnormaleface normalize3d
5738 solid i solidcentreface lightsrc vecteur3d normalize3d
5743 lightcolor {coeff mul} apply setcolor fill
5746 lightcolor {coeff mul} apply setcolor
5753 solid i solidnormaleface normalize3d
5754 solid i solidcentreface lightsrc vecteur3d normalize3d
5760 solid solidgetfcolors i get cvx exec currentrgbcolor
5764 lacouleur {coeff mul} apply setcolor fill
5767 lacouleur {coeff mul} apply setcolor
5770 % solid F i get length affectecouleursolid_ncotes
5771 solid i affectecouleursolid_facei
5777 /face_a_dessiner [ %% face visible : F [i]
5780 solid j i solidgetsommetface
5783 face_a_dessiner polygone3d
5784 /lignedeniveau [] def
5786 %% trace de la ligne de niveau
5787 tracelignedeniveau? {
5789 linewidthlignedeniveau setlinewidth
5790 couleurlignedeniveau
5793 face_a_dessiner j getp3d
5794 face_a_dessiner j 1 add n mod getp3d
5795 hauteurlignedeniveau segment_inter_planz {
5799 lignedeniveau aload pop
5808 lignedeniveau length 4 ge
5809 {lignedeniveau ligne3d}
5814 %% on marque les aretes
5818 /k1 F i j get_ij def %% indice sommet1
5819 /k2 F i j 1 add n mod get_ij def %% indice sommet2
5830 /startest {true} def
5835 /peintrealgorithme false def
5839 /aretescachees false def
5840 /peintrealgorithme true def
5845 %% syntaxe : solid array drawsolid
5846 %% array est en option, il indique les faces triees
5854 (Error : mauvais type d argument dans drawsolid) ==
5857 solid nullsolid not {
5860 solid solidgetsommets
5862 /n S length 3 idiv def
5863 %% tableau des aretes
5872 currentdict /ordre known not {
5874 %% tri des indices des faces par distance decroissante
5876 0 1 F length 1 sub {
5878 solid i solidcentreface
5882 ] doublequicksort pop reverse
5885 0 1 F length 1 sub {
5892 0 1 F length 1 sub {
5896 A solid i dessinefacevisible
5900 0 1 F length 1 sub {
5903 A solid i dessinefacecachee
5906 %% %% si on veut repasser les traits des faces visibles
5907 %% 0 1 F length 1 sub {
5909 %% /i ordre k get def
5912 %% /startest false def
5913 %% A solid i dessinefacevisible
5921 %%%%% ### segment_inter_planz ###
5922 %% syntaxe : A B k segment_inter_planz --> array true ou false
5923 /segment_inter_planz {
5928 A /zA exch def pop pop
5929 B /zB exch def pop pop
5930 zA k sub zB k sub mul dup 0 gt {
5931 %% pas d intersection
5936 %% intersection en A ou en B
5942 %% intersection entre A et B
5945 k zA sub zB zA sub div mulv3d
5953 %%%%% ### fin insertion ###
5955 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5956 %%%% operations sur des solides particuliers %%%%
5957 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5959 %%%%% ### dualpolyedre ###
5960 %% syntaxe : solid dualpolyedreregulier --> solid
5961 %% syntaxe : solid r dualpolyedreregulier --> solid
5962 %% si le nombre r est present, projette les nouveaux sommets sur la sphere de centre O , de rayon r
5963 /dualpolyedreregulier {
5967 /projection true def
5969 /projection false def
5972 solid dupsolid /result exch def pop
5973 /n solid solidnombrefaces def
5974 /N solid solidnombresommets def
5975 /facesaenlever [] def
5976 %% pour chacun des sommets
5978 %% sommet d indice i
5980 %% indicesfacesadj = liste des indices des faces ou on trouve le sommet i
5981 /indicesfacesadj solid i solidfacesadjsommet def
5982 %% on recupere les centres des faces concernees
5984 0 1 indicesfacesadj length 1 sub {
5986 solid indicesfacesadj k get solidgetsommetsface isobarycentre3d
5989 %% et on pose G = barycentre de ces points
5990 nouveauxsommets isobarycentre3d /G defpoint3d
5991 %% il faut ordonner ces sommets
5992 nouveauxsommets 0 getp3d /ptref defpoint3d
5993 G solid i solidgetsommet vecteur3d /vecteurnormal defpoint3d
5994 nouveauxsommets duparray exch pop
5999 vecteurnormal angle3doriente
6001 doublebubblesort pop
6002 %% nos sommets sont tries
6003 /indicesommetstries exch def
6005 %% on projette les sommets sur la sphere
6006 /nouveauxsommets [ nouveauxsommets {normalize3d r mulv3d} papply3d aload pop ] store
6008 %% puis on les rajoute au solide
6010 0 1 nouveauxsommets length 3 idiv 1 sub {
6012 result nouveauxsommets k getp3d solidaddsommet
6015 %% ainsi que la face concernee
6017 0 1 indicesommetstries length 1 sub {
6019 nouveauxindices indicesommetstries k get get
6022 /facesaenlever [ facesaenlever aload pop indicesfacesadj aload pop ] store
6024 result [0 1 n 1 sub {} for] solidrmfaces
6025 [N 1 sub -1 0 {} for] {result exch solidrmsommet} apply
6030 %%%%% ### solidchampfreine ###
6031 %% syntaxe : solid coeff i solidchampfreine -> -
6032 %% syntaxe : solid coeff array solidchampfreine -> -
6033 %% syntaxe : solid coeff solidchampfreine -> -
6034 %% syntaxe : solid coeff str solidchampfreine -> -
6035 %% syntaxe : solid coeff bool solidchampfreine -> -
6039 /rmfacecentrale exch def
6041 /rmfacecentrale true def
6044 /couleurface exch def
6046 2 copy pop issolid {
6047 %% 2 arguments --> on champfreine tout
6048 2 copy pop solidnombrefaces /n exch def
6049 /table [n 1 sub -1 0 {} for] def
6051 %% 1 tableau --> il donne les faces a enlever
6053 /table exch bubblesort reverse def
6055 %% 1 seule face a enlever
6056 [ exch ] /table exch def
6061 0 1 table length 1 sub {
6063 solid coeff table i get
6064 currentdict /couleurface known {
6067 rmfacecentrale s@lidchampfreineface
6072 %% syntaxe : solid coeff i s@lidchampfreineface
6073 /s@lidchampfreineface {
6075 /rmfacecentrale exch def
6077 /couleurface exch def
6079 /indice_a_chamfreiner exch def
6080 /i indice_a_chamfreiner def
6084 (Erreur : mauvais type d argument dans champfreine) ==
6087 /n solid solidnombresommets def
6088 /F solid i solidgetsommetsface def
6089 /Findex solid i solidgetface def
6090 /ni F length 3 idiv def
6091 /couleurfaceorigine solid i solidgetfcolor def
6092 F isobarycentre3d /G defpoint3d
6093 %% on ajoute les nouveaux sommets
6097 /Sindex [ Sindex aload pop
6098 solid G F j getp3d vecteur3d coeff mulv3d G addv3d solidaddsommet
6101 %% Sindex contient les indices des nouveaux sommets
6102 %% on prepare les faces a ajouter
6104 /facestoadd [facestoadd aload pop
6108 Findex j 1 add ni mod get
6109 Sindex j 1 add ni mod get
6115 solid facestoadd i get solidaddface
6117 %% on enleve la face d origine
6118 solid indice_a_chamfreiner solidrmface
6119 %% on ajuste les couleurs des nouvelles faces
6120 /N solid solidnombrefaces def
6123 solid N 1 sub i sub couleurfaceorigine solidputfcolor
6125 %% puis on ajoute eventuellement la face centrale
6126 rmfacecentrale not {
6133 %% en ajustant la couleur de cette derniere
6135 currentdict /couleurface known {
6145 %%%%% ### solidtronque ###
6146 %% syntaxe : solid indicesommet k solidtronque --> solid
6147 %% syntaxe : solid array k solidtronque --> solid
6148 %% syntaxe : solid k solidtronque --> solid
6149 %% k entier > 0, array = tableau des indices des sommets
6154 dup solidnombresommets /N exch def
6155 /table [0 1 N 1 sub {} for] def
6160 [ exch ] /table exch def
6164 solid dupsolid /result exch def pop
6165 /n solid solidnombrefaces def
6166 0 1 table length 1 sub {
6167 table exch get /no exch def
6168 result no solidgetsommet /sommetvise defpoint3d
6169 %% on recup les sommets adjacents au sommet vise
6170 /sommetsadj solid no solidsommetsadjsommet def
6171 %% on calcule les nouveaux sommets
6173 0 1 sommetsadj length 1 sub {
6175 solid sommetsadj i get solidgetsommet
6177 ] {sommetvise exchp3d coeff ABpoint3d} papply3d def
6178 %% on pose G = barycentre de ces points
6179 nouveauxsommets isobarycentre3d /G defpoint3d
6180 %% il faut ordonner ces sommets
6181 nouveauxsommets 0 getp3d /ptref defpoint3d
6182 G result no solidgetsommet vecteur3d /vecteurnormal defpoint3d
6183 %% on construit le tableau des angles ordonnes par rapport
6185 nouveauxsommets duparray exch pop
6190 vecteurnormal angle3doriente
6192 doublebubblesort pop
6193 %% nos sommets sont tries
6194 /indicesommetstries exch def
6195 %% on rajoute les sommets au solide, et on note les nouveaux indices
6197 0 1 nouveauxsommets length 3 idiv 1 sub {
6199 result nouveauxsommets k getp3d solidaddsommet
6202 %% on ajoute la face concernee
6204 0 1 indicesommetstries length 1 sub {
6206 nouveauxindices indicesommetstries k get get
6209 result no solidfacesadjsommet /lesfaces exch def
6210 %% on examine la face d indice i, et on elimine le
6212 0 1 lesfaces length 1 sub {
6214 /j lesfaces i get def
6215 /F result j solidgetface def
6217 0 1 F length 1 sub {
6219 F k get dup no eq {pop} if
6221 ] j exch solidputface
6224 table bubblesort reverse {result exch solidrmsommet} apply
6229 %%%%% ### dualpolyedre ###
6230 %% syntaxe : solid dualpolyedreregulier --> solid
6231 %% syntaxe : solid r dualpolyedreregulier --> solid
6232 %% si le nombre r est present, projette les nouveaux sommets sur la sphere de centre O , de rayon r
6233 /dualpolyedreregulier {
6237 /projection true def
6239 /projection false def
6242 solid dupsolid /result exch def pop
6243 /n solid solidnombrefaces def
6244 /N solid solidnombresommets def
6245 /facesaenlever [] def
6246 %% pour chacun des sommets
6248 %% sommet d indice i
6250 %% indicesfacesadj = liste des indices des faces ou on trouve le sommet i
6251 /indicesfacesadj solid i solidfacesadjsommet def
6252 %% on recupere les centres des faces concernees
6254 0 1 indicesfacesadj length 1 sub {
6256 solid indicesfacesadj k get solidgetsommetsface isobarycentre3d
6259 %% et on pose G = barycentre de ces points
6260 nouveauxsommets isobarycentre3d /G defpoint3d
6261 %% il faut ordonner ces sommets
6262 nouveauxsommets 0 getp3d /ptref defpoint3d
6263 G solid i solidgetsommet vecteur3d /vecteurnormal defpoint3d
6264 nouveauxsommets duparray exch pop
6269 vecteurnormal angle3doriente
6271 doublebubblesort pop
6272 %% nos sommets sont tries
6273 /indicesommetstries exch def
6275 %% on projette les sommets sur la sphere
6276 /nouveauxsommets [ nouveauxsommets {normalize3d r mulv3d} papply3d aload pop ] store
6278 %% puis on les rajoute au solide
6280 0 1 nouveauxsommets length 3 idiv 1 sub {
6282 result nouveauxsommets k getp3d solidaddsommet
6285 %% ainsi que la face concernee
6287 0 1 indicesommetstries length 1 sub {
6289 nouveauxindices indicesommetstries k get get
6292 /facesaenlever [ facesaenlever aload pop indicesfacesadj aload pop ] store
6294 result [0 1 n 1 sub {} for] solidrmfaces
6295 [N 1 sub -1 0 {} for] {result exch solidrmsommet} apply
6300 %%%%% ### newgeode ###
6301 %% syntaxe : solid r newgeode --> solid
6302 %% syntaxe : N r newgeode --> solid
6303 %% N in {3,4,5} -> polyhedre de depart, r = niveau de recursion
6323 solid dupsolid /result exch def pop
6324 /n solid solidnombrefaces def
6327 %% la face d indice i
6328 solid i solidgetface /F exch def
6332 solid i0 solidgetsommet /A0 defpoint3d
6333 solid i1 solidgetsommet /A1 defpoint3d
6334 solid i2 solidgetsommet /A2 defpoint3d
6335 A0 A1 milieu3d normalize3d /A01 defpoint3d
6336 A1 A2 milieu3d normalize3d /A12 defpoint3d
6337 A2 A0 milieu3d normalize3d /A20 defpoint3d
6338 result A01 solidaddsommet /i01 exch def
6339 result A12 solidaddsommet /i12 exch def
6340 result A20 solidaddsommet /i20 exch def
6341 result i solidrmface
6342 result [i0 i01 i20] solidaddface
6343 result [i01 i1 i12] solidaddface
6344 result [i01 i12 i20] solidaddface
6345 result [i20 i12 i2] solidaddface
6353 %% syntaxe : N r newdualgeode --> solid
6356 dualpolyedreregulier
6359 %%%%% ### fin insertion ###
6362 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6363 %%%% quelques solides precalcules %%%%
6364 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6366 %%%%% ### newface ###
6367 %% syntaxe : array newmonoface -> solid
6368 %% ou array = tableau de points 2d
6372 /n table length 2 idiv def
6373 /S table {0} papply def
6376 [0 1 n 1 sub {} for]
6382 %% syntaxe : array newbiface -> solid
6383 %% ou array = tableau de points 2d
6389 %%%%% ### newpolreg ###
6390 %% syntaxe : r n newpolreg --> solid
6396 0 360 n div 360 360 n div sub {
6404 [0 1 n 1 sub {} for]
6412 %%%%% ### newgrille ###
6413 %% syntaxe : xmin xmax ymin ymax [dx dy] newgrille -> solid
6414 %% syntaxe : xmin xmax ymin ymax [nx ny] newgrille -> solid
6415 %% syntaxe : xmin xmax ymin ymax {mode} newgrille -> solid
6416 %% syntaxe : xmin xmax ymin ymax newgrille -> solid
6419 [[/nx /ny] [1 1] [1. 1.] [1. 1.] [1. 1.] [.5 .5]] gestionsolidmode
6420 %% ny nb d etages en y
6421 %% nx nb d etages en x
6423 [nx ny] {0} newsurfaceparametree
6427 %% %% syntaxe : xmin xmax ymin ymax [dx dy] {f} newsurface -> solid
6430 true newsurfaceparametree
6435 /newsurfaceparametree {
6443 [[/nx /ny] [2 2] [4 4] [1. 1.] [1. 1.] [.25 .25]] gestionsolidmode
6444 %% ny nb d etages en y
6445 %% nx nb d etages en x
6452 %% alors nx est un dx
6453 /nx xmax xmin sub nx div cvi store
6456 %% alors ny est un dy
6457 /ny ymax ymin sub ny div cvi store
6459 /dy ymax ymin sub ny div def %% le pas sur y
6460 /dx xmax xmin sub nx div def %% le pas sur x
6467 /u xmin i dx mul add def
6468 /v ymin j dy mul add def
6483 j 1 add i ny 1 add mul add
6484 j i ny 1 add mul add
6485 j ny 1 add add i ny 1 add mul add
6486 j ny 2 add add i ny 1 add mul add
6490 %% 0 1 0 {%nx 1 sub {
6492 %% 0 1 0 {%ny 2 sub {
6495 %% j 1 add %% i ny mul add
6496 %% j %% i ny mul add
6497 %% ny 1 add j add %% i ny mul add
6498 %% ny 2 add j add %% i ny mul add
6504 biface {dup videsolid} if
6508 %%%%% ### newgrillecirculaire ###
6509 %% syntaxe : r option newgrillecirculaire -> solid
6510 /newgrillecirculaire {
6512 [[/K /N] [6 6] [6 8] [10 8] [16 12] [16 36]] gestionsolidmode
6514 %% N = nb de meridiens (diviseur de 360 = 2^4 * 3^2 * 5)
6515 %% K = nb d horizontales (diviseur de 160 = 2^5 * 5)
6531 i N mod N add 1 add j N mul add
6532 i N mod 1 add j N mul add]
6537 %% tableau des sommets
6544 /theta i 360 mul N div def
6545 theta cos r j mul K div mul
6546 theta sin r j mul K div mul
6547 2 copy exch atan 90 div
6556 %%%%% ### newruban ###
6557 %% syntaxe : array h u [n] newruban -> solid d axe (O, u), de maillage vertical n
6558 %% syntaxe : array h u newruban -> solid d axe (O, u),
6559 %% syntaxe : array h newruban -> solid d axe (O, k),
6560 %% ou array tableau de points 2d
6564 [[/N] [1] [1] [1] [3] [4]] gestionsolidmode
6565 2 copy pop isarray {
6571 (Error : 3eme composante nulle dans le vecteur pour newruban) ==
6577 %% n = indice du dernier point
6578 /n table length 2 idiv 1 sub def
6579 %% vecteur de translation
6582 mulv3d /v defpoint3d
6584 %% tableau des sommets
6592 v N j sub N div mulv addv3d
6603 [i j 1 sub n 1 add mul add
6604 i 1 sub j 1 sub n 1 add mul add
6605 n 1 add i add 1 sub j 1 sub n 1 add mul add
6606 n 1 add i add j 1 sub n 1 add mul add]
6616 %%%%% ### newicosaedre ###
6621 0.8944271 0 0.4472137
6622 0.2763932 0.8506507 0.4472137
6623 -0.7236067 0.5257311 0.4472137
6624 -0.7236067 -0.5257311 0.4472137
6625 0.2763932 -0.8506507 0.4472137
6628 -0.8944271 0 -0.4472137
6629 -0.2763932 -0.8506507 -0.4472137
6630 0.7236067 -0.5257311 -0.4472137
6631 0.7236067 0.5257311 -0.4472137
6632 -0.2763932 0.8506507 -0.4472137
6633 ] {a mulv3d} papply3d def
6642 [0 9 10] %% 1 10 11]
6643 [10 1 0] %% 11 2 1 ]
6644 [1 10 11] %% 2 11 12]
6645 [11 2 1] %% 12 3 2 ]
6646 [2 11 7] %% 3 12 8 ]
6651 [6 7 11] %% 7 8 12 ]
6654 [6 10 9] %% 7 11 10]
6655 [6 11 10] %% 7 12 11]
6662 %%%%% ### newdodecaedre ###
6667 0 0.607062 0.7946545
6668 -0.5773503 0.1875925 0.7946545
6669 -0.3568221 -0.4911235 0.7946545
6670 0.3568221 -0.4911235 0.7946545
6671 0.5773503 0.1875925 0.7946545
6672 0 0.982247 0.1875925
6673 -0.9341724 0.303531 0.1875925
6674 -0.5773503 -0.7946645 0.1875925
6675 0.5773503 -0.7946645 0.1875925
6676 0.9341724 0.303531 0.1875925
6677 0 -0.982247 -0.1875925
6678 0.9341724 -0.303531 -0.1875925
6679 0.5773503 0.7946545 -0.1875925
6680 -0.5773503 0.7946545 -0.1875925
6681 -0.9341724 -0.303531 -0.1875925
6682 -0.5773503 -0.1875925 -0.7946545
6683 -0.3568221 0.4911235 -0.7946545
6684 0.3568221 0.4911235 -0.7946545
6685 0.5773503 -0.1875925 -0.7946545
6686 0 -0.607062 -0.7946545
6687 ] {a mulv3d} papply3d def
6707 %%%%% ### newoctaedre ###
6719 ] {a mulv3d} papply3d def
6736 %%%%% ### newtetraedre ###
6743 -0.4714045 -0.8164965 -1 3 div
6745 -0.4714045 0.8164965 -1 3 div
6746 ] {r mulv3d} papply3d def
6759 %%%%% ### newcube ###
6762 [[/n] [1] [1] [1] [3] [4]] gestionsolidmode
6775 %% tableau des sommets
6785 ] {a mulv3d} papply3d def
6789 /N n dup mul n add 4 mul def
6790 /n1 n 1 sub dup mul def %% nb sommets centre d une face
6792 %% tableau des sommets
6805 /S2 S1 {-90 0 0 rotateOpoint3d} papply3d def
6806 /S3 S2 {-90 0 0 rotateOpoint3d} papply3d def
6807 /S4 S3 {-90 0 0 rotateOpoint3d} papply3d def
6833 %% tableau des faces
6849 %% syntaxe : i sommettourgauche --> l indice du i-eme sommet du tour
6850 %% de la face gauche (en commencant par l indice 0). ATTENTION :
6851 %% utilise la variable globale n = nb d etages
6857 (Error: indice trop grand dans sommettourgauche) ==
6864 %% syntaxe : i sommetcentregauche --> l indice du i-eme sommet du centre
6865 %% de la face gauche (en commencant par l indice 0). ATTENTION :
6866 %% utilise les variables globales n = nb d etages, et N = nb sommets
6867 %% des 4 1eres faces
6868 /sommetcentregauche {
6871 i n 1 sub dup mul ge {
6873 (Error: indice trop grand dans sommetcentregauche) ==
6881 %%%%% la face gauche %%%%%
6882 %% le coin superieur gauche
6886 n 4 mul 1 sub sommettourgauche
6887 n1 n 1 sub sub sommetcentregauche
6890 %% la bande superieure (i from 1 to n-2)
6894 i 1 add sommettourgauche
6896 n1 n sub i add sommetcentregauche
6897 n1 n sub i 1 add add sommetcentregauche
6901 %% le coin superieur droit
6904 n 1 sub sommettourgauche
6905 n1 1 sub sommetcentregauche
6906 n 1 add sommettourgauche
6909 %% la descente gauche
6914 n1 n 1 sub j mul sub sommetcentregauche
6915 n 4 mul j sub sommettourgauche
6916 n 4 mul j 1 add sub sommettourgauche
6917 n1 n 1 sub j 1 add mul sub sommetcentregauche
6921 %% les bandes centrales (j from 1 to n-2 et i from 1 to n-2)
6927 n1 i n 1 sub j 1 sub mul add sub sommetcentregauche
6928 n1 i 1 add n 1 sub j 1 sub mul add sub sommetcentregauche
6929 n1 i 1 add n 1 sub j mul add sub sommetcentregauche
6930 n1 i n 1 sub j mul add sub sommetcentregauche
6935 %% la descente droite
6939 n j add sommettourgauche
6940 n1 1 sub j 1 sub n 1 sub mul sub sommetcentregauche
6941 n1 1 sub j n 1 sub mul sub sommetcentregauche
6942 n j 1 add add sommettourgauche
6946 %% le coin inferieur gauche
6948 0 sommetcentregauche
6949 n 3 mul 1 add sommettourgauche
6950 n 3 mul sommettourgauche
6951 n 3 mul 1 sub sommettourgauche
6954 %% la bande inferieure (i from 1 to n-2)
6958 i sommetcentregauche
6959 i 1 sub sommetcentregauche
6960 n 3 mul i sub sommettourgauche
6961 n 3 mul i sub 1 sub sommettourgauche
6965 %% le coin inferieur droit
6967 n 2 mul 1 sub sommettourgauche
6968 n 2 sub sommetcentregauche
6969 n 2 mul 1 add sommettourgauche
6970 n 2 mul sommettourgauche
6974 %% syntaxe : i sommettourdroit --> l indice du i-eme sommet du tour
6975 %% de la face droit (en commencant par l indice 0). ATTENTION :
6976 %% utilise la variable globale n = nb d etages
6982 (Error: indice trop grand dans sommettourdroit) ==
6989 %% syntaxe : i sommetcentredroit --> l indice du i-eme sommet du centre
6990 %% de la face droit (en commencant par l indice 0). ATTENTION :
6991 %% utilise les variables globales n = nb d etages, et N = nb sommets
6992 %% des 4 1eres faces
6993 /sommetcentredroit {
6996 i n 1 sub dup mul ge {
6998 (Error: indice trop grand dans sommetcentredroit) ==
7006 %% coin superieur droit
7010 n1 n 1 sub sub sommetcentredroit
7011 4 n mul 1 sub sommettourdroit
7013 %% coin superieur gauche
7015 n 1 sub sommettourdroit
7017 n 1 add sommettourdroit
7018 n1 1 sub sommetcentredroit
7020 %% coin inferieur gauche
7022 n 2 sub sommetcentredroit
7023 2 n mul 1 sub sommettourdroit
7024 2 n mul sommettourdroit
7025 2 n mul 1 add sommettourdroit
7027 %% coin inferieur droit
7029 3 n mul 1 add sommettourdroit
7031 3 n mul 1 sub sommettourdroit
7032 3 n mul sommettourdroit
7039 i 1 add sommettourdroit
7040 n 1 sub n 2 sub mul i add sommetcentredroit
7041 n 1 sub n 2 sub mul i 1 sub add sommetcentredroit
7048 i 1 sub sommetcentredroit
7050 3 n mul 1 sub i sub sommettourdroit
7051 3 n mul i sub sommettourdroit
7058 n1 1 sub i 1 sub n 1 sub mul sub sommetcentredroit
7059 n i add sommettourdroit
7060 n i 1 add add sommettourdroit
7061 n1 1 sub i n 1 sub mul sub sommetcentredroit
7068 4 n mul i sub sommettourdroit
7069 n 1 sub n 1 sub i sub mul sommetcentredroit
7070 n 1 sub n 2 sub i sub mul sommetcentredroit
7071 4 n mul i sub 1 sub sommettourdroit
7074 %% bandes interieures
7080 n 1 sub j mul i 1 sub add sommetcentredroit
7081 n 1 sub j mul i add sommetcentredroit
7082 n 1 sub j 1 sub mul i add sommetcentredroit
7083 n 1 sub j 1 sub mul i 1 sub add sommetcentredroit
7090 /F2 F1 {{n dup mul n add add} apply} apply def
7091 /F3 F2 {{n dup mul n add add} apply} apply def
7092 /F4 F3 {{n dup mul n add add} apply} apply def
7095 S1 S2 append S3 append S4 append S5 append S6 append {a mulv3d} papply3d
7096 F1 F2 append F3 append F4 append {{N mod} apply} apply F5 append F6 append
7102 %%%%% ### newparallelepiped ###
7104 /newparallelepiped {
7118 %% tableau des sommets
7126 a neg b neg c neg %% 6
7132 %%%%% ### newcylindre ###
7133 %% syntaxe : z0 r0 z1 newcylindre -> solide
7147 %% syntaxe : z0 r0 z1 newcylindrecreux -> solide
7153 %%%%% ### newtronccone ###
7154 %% syntaxe : z0 r0 z1 r1 newtronccone -> solid
7157 [[/n /N] [1 6] [1 8] [1 10] [3 12] [5 18]] gestionsolidmode
7163 /dz z1 z0 sub n div def
7164 /dr r1 r0 sub n div def
7167 [0 1 N 1 sub {} for]
7168 [n 1 add N mul 1 sub -1 n N mul {} for]
7172 k N mul 1 add 1 k 1 add N mul 1 sub {
7174 [i i 1 sub N i add 1 sub N i add]
7176 [k N mul k 1 add N mul 1 sub k 2 add N mul 1 sub k 1 add N mul]
7181 %% tableau des sommets
7187 360 N idiv i mul cos r0 dr k mul add mul
7188 360 N idiv i mul sin r0 dr k mul add mul
7197 %% syntaxe : z0 r0 z1 r1 newtroncconecreux -> solid
7198 /newtroncconecreux {
7203 %%%%% ### newcone ###
7204 %% syntaxe : z0 r0 z1 newcone -> solid
7207 [ [/n /N] [1 6] [1 8] [1 10] [3 12] [5 18] ] gestionsolidmode
7212 /dz z1 z0 sub n div def
7217 [N 1 sub -1 0 {} for]
7219 n 1 sub N mul 1 add 1 n N mul 1 sub {
7223 [n N mul 1 sub n 1 sub N mul n N mul]
7224 %% les autres etages
7227 0 N j mul add 1 N N j mul add 2 sub {
7229 [i i 1 add dup N add dup 1 sub]
7231 [N N j mul add 1 sub N j mul dup N add dup N add 1 sub]
7235 %% tableau des sommets
7237 %% etage no j (in [1; n])
7242 360 N idiv i mul cos r0 dr j mul sub mul
7243 360 N idiv i mul sin r0 dr j mul sub mul
7253 %% syntaxe : z0 r0 z1 newconecreux -> solid
7260 %%%%% ### newtore ###
7261 %% syntaxe : r R newtore -> solid
7264 [[/n1 /n2] [4 5] [6 10] [8 12] [9 18] [18 36]] gestionsolidmode
7272 360 n1 div i mul cos r mul R add
7273 360 n1 div i mul sin r mul
7281 %%%%% ### newprisme ###
7283 [[/N] [1] [1] [1] [3] [6]] gestionsolidmode
7287 %% syntaxe : array N z0 z1 u newprisme -> solid d axe (O, u),
7288 %% ou array tableau de points 2d
7291 [[/N] [1] [1] [1] [3] [6]] gestionsolidmode
7293 (Error : 3eme composante nulle dans le vecteur pour newprisme) ==
7301 %% n = indice du dernier point
7302 /n table length 2 idiv 1 sub def
7303 %% vecteur de translation
7305 z1 z0 sub u norme3d div
7306 mulv3d /v defpoint3d
7308 %% tableau des sommets
7316 v N j sub N div mulv addv3d
7325 [N 1 add n 1 add mul 1 sub -1 N n 1 add mul {} for]
7331 [i j 1 sub n 1 add mul add
7332 i 1 sub j 1 sub n 1 add mul add
7333 n 1 add i add 1 sub j 1 sub n 1 add mul add
7334 n 1 add i add j 1 sub n 1 add mul add]
7336 [0 j 1 sub n 1 add mul add
7337 n j 1 sub n 1 add mul add
7338 2 n mul 1 add j 1 sub n 1 add mul add
7339 n 1 add j 1 sub n 1 add mul add]
7347 %%%%% ### newsphere ###
7348 %% syntaxe : r option newsphere -> solid
7351 [[/K /N] [6 6] [8 8] [10 12] [16 12] [16 36]] gestionsolidmode
7352 -90 90 [K N] newcalottesphere
7356 %% syntaxe : r phi theta option newcalottesphere -> solid
7359 [[/K /N] [6 6] [8 8] [10 12] [16 12] [16 36]] gestionsolidmode
7361 %% test de beta (ex-theta)
7366 /beta exch 80 min -80 max def
7369 %% test de alpha (ex-phi)
7373 /alpha exch beta min -80 max def
7379 /db alpha beta sub K 1 add div def
7382 /db alpha beta sub K div def
7387 /db alpha beta sub K div def
7390 /db alpha beta sub K 1 sub div def
7394 %% nombre de sommets -2
7397 %% tableau des sommets
7401 /phi beta j db mul add def
7402 phi cos r mul /r_tmp exch def
7405 360 N idiv i mul cos r_tmp mul
7406 360 N idiv i mul sin r_tmp mul
7415 %% calotte inferieure
7425 [nb nb N sub nb 1 sub]
7427 [nb 1 sub -1 nb N sub {} for ]
7430 %% calotte superieure
7434 [i i 1 add N mod N K mul 1 add]
7437 [0 1 N 1 sub {} for]
7448 N 2 sub {dup {1 add} apply} repeat
7462 %% syntaxe : r phi theta option newcalottespherecreuse -> solid
7463 /newcalottespherecreuse {
7465 [[/K /N] [6 6] [8 8] [10 12] [16 12] [16 36]] gestionsolidmode
7467 %% test de beta (ex-theta)
7472 /beta exch 80 min -80 max def
7475 %% test de alpha (ex-phi)
7479 /alpha exch beta min -80 max def
7485 /db alpha beta sub K 1 add div def
7488 /db alpha beta sub K div def
7493 /db alpha beta sub K div def
7496 /db alpha beta sub K 1 sub div def
7500 %% nombre de sommets -2
7503 %% tableau des sommets
7507 /phi beta j db mul add def
7508 phi cos r mul /r_tmp exch def
7511 360 N idiv i mul cos r_tmp mul
7512 360 N idiv i mul sin r_tmp mul
7521 %% calotte inferieure
7531 [nb nb N sub nb 1 sub]
7533 % [nb 1 sub -1 nb N sub {} for ]
7536 %% calotte superieure
7540 [i i 1 add N mod N K mul 1 add]
7543 % [0 1 N 1 sub {} for]
7554 N 2 sub {dup {1 add} apply} repeat
7569 %%%%% ### newanneau ###
7570 %% syntaxe : array n newanneau --> solid
7571 %% syntaxe : array {mode} newanneau --> solid
7572 %% ou array est un tableau de points de R^2 et n un nombre entier positif
7579 [[/n2] [6] [12] [24] [32] [36]] gestionsolidmode
7581 %% on plonge la section dans R^3 par projection sur yOz
7582 /S1 exch {0 3 1 roll} papply def
7583 %% nombre de sommets
7584 /n1 S1 length 3 idiv def
7589 {0 0 360 n2 div rotateOpoint3d} papply3d
7597 n1 j mul 1 j 1 add n1 mul 2 sub {
7599 [i 1 add i dup n1 add i n1 1 add add]
7601 [n1 j mul j 1 add n1 mul 1 sub j 2 add n1 mul 1 sub j 1 add n1 mul]
7609 %%%%% ### newvecteur ###
7610 %% syntaxe : x y z newvecteur
7622 normalvect_to_orthobase
7627 A norme3d /z exch .3 sub def
7628 0 .1 .3 [1 8] newcone
7629 dup (noir) outputcolors
7630 {0 0 z translatepoint3d} solidtransform
7631 {imI imJ imK transformpoint3d} solidtransform
7636 %%%%% ### readsolidfile ###
7637 %% syntaxe : str readsolidfile -> solid
7641 [str (-sommets.dat) append run]
7642 [str (-faces.dat) append run]
7644 dup [str (-couleurs.dat) append run] solidputfcolors
7645 dup [str (-io.dat) append run] solidputinouttable
7649 %%%%% ### writesolidfile ###
7650 %% syntaxe : solid str writesolidfile -> -
7656 (Error : mauvais type d argument dans writesolidfile) ==
7659 str (-sommets.dat) append (w) file /lefichiersommets exch def
7660 str (-faces.dat) append (w) file /lefichierfaces exch def
7661 str (-couleurs.dat) append (w) file /lefichiercouleurs exch def
7662 str (-io.dat) append (w) file /lefichierio exch def
7664 /S solid solidgetsommets def
7665 0 1 S length 3 idiv 1 sub {
7667 solid i solidgetsommet
7671 lefichiersommets x chaine cvs writestring
7672 lefichiersommets 32 write %% espace
7673 lefichiersommets y chaine cvs writestring
7674 lefichiersommets 32 write %% espace
7675 lefichiersommets z chaine cvs writestring
7676 lefichiersommets 10 write %% CR
7678 lefichiersommets closefile
7680 /F solid solidgetfaces def
7681 0 1 F length 1 sub {
7683 /Fi solid i solidgetface def
7684 lefichierfaces 91 write %% [
7685 0 1 Fi length 1 sub {
7687 lefichierfaces Fi j get chaine cvs writestring
7688 lefichierfaces 32 write %% espace
7690 lefichierfaces 93 write %% ]
7691 lefichierfaces 10 write %% CR
7693 lefichierfaces closefile
7695 /C solid solidgetfcolors def
7696 0 1 C length 1 sub {
7698 lefichiercouleurs 40 write %% (
7699 lefichiercouleurs C i get writestring
7700 lefichiercouleurs 41 write %% )
7701 lefichiercouleurs 10 write %% CR
7703 lefichiercouleurs closefile
7705 /IO solid solidgetinouttable def
7708 lefichierio IO i get chaine cvs writestring
7709 lefichierio 32 write %% space
7711 lefichierio closefile
7715 %%%%% ### writeobjfile ###
7716 %% syntaxe : solid str writeobjfile -> -
7719 /str exch (.obj) append def
7722 (Erreur : mauvais type d argument dans writeobjfile) ==
7725 /n solid solidnombresommets def
7726 str (w) file /lefichier exch def
7729 solid i solidgetsommet
7733 lefichier (v ) writestring
7734 lefichier x chaine cvs writestring
7735 lefichier 32 write %% espace
7736 lefichier y chaine cvs writestring
7737 lefichier 32 write %% espace
7738 lefichier z chaine cvs writestring
7739 lefichier 10 write %% CR
7741 /n solid solidnombrefaces def
7744 lefichier (f ) writestring
7745 /F solid i solidgetface def
7748 chaine cvs writestring
7749 lefichier 32 write %% espace
7751 lefichier 10 write %% CR
7757 %%%%% ### newobjfile ###
7760 /objfilename exch (.obj) append def
7766 ] %% ferme les sommets
7767 [ [ %% ouvre les faces
7772 [ %% ouvre la nouvelle
7786 %%%%% ### newtube ###
7787 /tub@dernierk1 [1 0 0] def
7788 /tub@dernierk2 [0 1 0] def
7789 /tub@dernierk3 [0 0 1] def
7793 normalize3d /vect3 defpoint3d
7794 normalize3d /vect2 defpoint3d
7795 normalize3d /vect1 defpoint3d
7796 vect1 norme3d 0 eq {
7797 vect2 vect3 vectprod3d /vect1 defpoint3d
7799 vect2 norme3d 0 eq {
7800 vect3 vect1 vectprod3d /vect2 defpoint3d
7802 vect3 norme3d 0 eq {
7803 vect1 vect2 vectprod3d /vect3 defpoint3d
7805 /tub@dernierk1 [vect1] store
7806 /tub@dernierk2 [vect2] store
7807 /tub@dernierk3 [vect3] store
7811 %% syntaxe : tmin tmax (f) array r newtube -> solid
7816 /K table 0 get def %% nb d etages
7817 /N table 1 get def %% nb de points sur le perimetre
7818 /@r exch def %% le rayon du tube
7820 /lafonction str cvx def
7821 /laderivee str (') append cvx def
7822 /laderivee2nd str ('') append cvx def
7825 /pas tmax tmin sub K 1 sub div def
7827 %% definition des sommets
7832 %% definition du repere de Frenet (k1, k2, k3) au point f(a)
7833 a0 lafonction pstrickactionR3 /M defpoint3d
7834 a0 laderivee normalize3d pstrickactionR3 /k1 defpoint3d
7835 a0 laderivee2nd normalize3d pstrickactionR3 /k2 defpoint3d
7837 tub@dernierk1 aload pop pstrickactionR3 /k1 defpoint3d
7839 /tub@dernierk1 [k1] store
7842 tub@dernierk2 aload pop pstrickactionR3 /k2 defpoint3d
7844 /tub@dernierk2 [k2] store
7846 k1 k2 vectprod3d normalize3d pstrickactionR3 /k3 defpoint3d
7848 tub@dernierk3 aload pop pstrickactionR3 /k3 defpoint3d
7850 /tub@dernierk3 [k3] store
7852 k3 k1 vectprod3d normalize3d pstrickactionR3 /k2 defpoint3d
7853 /tub@dernierk2 [k2] store
7854 /@n 360 N div def %% le pas angulaire
7858 k2 @i cos @r mul mulv3d addv3d
7859 k3 @i sin @r mul mulv3d addv3d
7864 dup length 3 idiv /nb exch def
7865 %% definition des faces
7868 [N 1 sub -1 0 {} for]
7870 [nb 1 sub N 1 sub {dup 1 sub} repeat] reverse
7874 tmin pas tmax pas sub {
7880 i 1 add N mod N j mul add
7881 i 1 add N mod N add N j mul add
7892 %%%%% ### fin insertion ###
7894 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7895 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7897 %%%% fin insertion librairie jps %%%%
7899 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7900 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7902 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7903 %%%% gestion de chaine de caracteres %%%%
7904 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7906 /Times-Roman findfont
7907 dup length dict begin
7914 /Encoding ISOLatin1Encoding def
7917 /Times-Roman-ISOLatin1 exch definefont pop
7920 /Times-Roman-ISOLatin1 findfont
7929 %% syntaxe : string x y cctext
7940 wx -2 div wy -2 div rmoveto
7946 %% syntaxe : str x y show_dim --> str x y llx lly wx wy
7947 %% attention, doit laisser la pile intacte
7952 true charpath flattenpath pathbbox
7957 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7958 %%%% procedures pour PSTricks %%%%
7959 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7961 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7962 %%%% procedures pour \psSolid %%%%
7963 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7967 /draw {drawsolid} def
7968 /draw* {drawsolid*} def
7969 /draw** {drawsolid**} def
7970 /writeobj {solidfilename writeobjfile} def
7971 /writesolid {solidfilename writesolidfile} def
7974 /gere_pstricks_color_inout {
7976 dup [fillincolor] (setrgbcolor) astr2str
7977 [fillcolor] (setrgbcolor) astr2str inoutputcolors
7981 /gere_pstricks_color_out {
7983 dup [fillcolor] (setrgbcolor) astr2str outputcolors
7987 /gere_pstricks_opt {
7988 % /CourbeR2 {CourbeR2+} def
7990 solidlinewidth setlinewidth
7991 RotX 0 ne RotY 0 ne or RotZ 0 ne or {
7992 {RotX RotY RotZ rotateOpoint3d} solidtransform
7994 CX 0 ne CY 0 ne or CZ 0 ne or {
7995 {CX CY CZ translatepoint3d} solidtransform
7997 /rmfaces rmfaces bubblesort reverse store
7998 0 1 rmfaces length 1 sub {
8000 dup rmfaces i get solidrmface
8005 activationgestioncouleurs {
8006 dup solidwithinfaces {
8007 gere_pstricks_color_inout
8009 gere_pstricks_color_out
8013 0 1 fcol length 2 idiv 1 sub {
8015 dup fcol 2 i mul get fcol 2 i mul 1 add get solidputfcolor
8017 tx@Dict /pst-transformoption known {
8018 dup {pst-transformoption} solidtransform
8020 solidinouthue length 0 gt {
8021 dup solidinouthue solidputinouthuecolors
8023 solidhue length 0 gt {
8024 dup solidhue solidputhuecolors
8026 solidinhue length 0 gt {
8027 dup solidinhue solidputinhuecolors
8032 solidnumf length 0 ne {
8033 solidnumf 0 get isstring {
8034 dup projectionsifacevisible solidnumfaces
8036 dup solidnumf projectionsifacevisible solidnumfaces
8039 solidshow length 0 ne {
8040 solidshow 0 get isstring {
8041 dup solidshowsommets
8043 dup solidshow solidshowsommets
8046 solidnum length 0 ne {
8047 solidnum 0 get isstring {
8050 dup solidnum solidnumsommets
8055 tx@Dict /solidname known {
8056 solidname exch bind def
8057 tx@Dict /solidname undef
8092 /pst-parallelepiped {
8117 % r {Mode} newsphere
8144 /pst-cylindrecreux {
8192 /pst-troncconecreux {
8231 % tableau des points de la base
8232 % h hauteur du prisme
8233 % axe : vecteur direction de l axe
8234 base decal rollparray
8247 % tableau des points de la base
8248 % h hauteur du prisme
8249 % axe : vecteur direction de l axe
8263 [ngrid 0 get ngrid 1 get]
8273 %% syntaxe : array N h u newruban -> solid d axe (O, u),
8275 % tableau des points de la base
8276 % h hauteur du prisme
8277 % axe : vecteur direction de l axe
8287 %% syntaxe : r phi option newcalottesphere -> solid
8288 /pst-calottesphere {
8291 % r phi theta option newcalottesphere
8300 newcalottespherecreuse
8307 %% syntaxe : r phi option newcalottesphere -> solid
8308 /pst-calottespherecreuse {
8311 % r phi theta option newcalottespherecreuse
8319 newcalottespherecreuse
8323 /pointtest{2 2 2} def
8326 % tableau des points de la base
8327 % h hauteur du prisme
8328 % axe : vecteur direction de l axe
8342 [ngrid 0 get ngrid 1 get]
8355 /pst-polygoneregulier {
8367 /activationgestioncouleurs false def
8369 base aload pop n 1 sub {solidfuz} repeat
8384 solidlinewidth setlinewidth
8386 range aload pop {function cvx exec} CourbeR3
8388 range aload pop function r ngrid newtube
8389 gere_pstricks_opt %% r function [36 12] newtube
8393 /pst-surfaceparametree {
8396 [ngrid 0 get ngrid 1 get]
8402 { function cvx exec } newsurfaceparametree
8409 solidlinewidth setlinewidth
8416 [linecolor currentrgbcolor] ( ) astr2str (setrgbcolor) append
8432 solidfilename newobjfile
8433 % dup {1 1 div mulv3d} solidtransform
8440 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8441 %%%% procedures pour \psProjection %%%%
8442 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8444 /gere_pstricks_proj_opt {
8445 /solidprojname where {
8446 /solidprojname get noface phi
8450 xorigine isinteger not and
8451 yorigine isinteger not and
8452 yorigine isinteger not and {
8454 [xorigine yorigine zorigine] ( ) astr2str
8456 projectionsifacevisible solidprojpath
8458 xorigine yorigine zorigine [ normale ] projectionsifacevisible planprojpath
8463 solidlinewidth setlinewidth
8467 gere_pstricks_proj_opt
8470 /proj-pst-courbeR2 {
8471 solidlinewidth setlinewidth
8474 range aload pop { function cvx exec } CourbeR2_
8475 gere_pstricks_proj_opt
8479 solidlinewidth setlinewidth
8482 range aload pop {} { function cvx exec } Courbeparam_
8483 gere_pstricks_proj_opt
8489 solidlinewidth setlinewidth
8493 pos (text_) append cvx exec
8494 gere_pstricks_proj_opt
8499 /pst-trigospherique {
8502 solidlinewidth setlinewidth
8513 %%BeginProcSet: special.pro 0 0
8515 TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
8516 /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
8517 /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
8518 /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
8519 /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
8520 X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
8521 /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
8522 /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
8523 {userdict/md get type/dicttype eq{userdict begin md length 10 add md
8524 maxlength ge{/md md dup length 20 add dict copy def}if end md begin
8525 /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
8526 atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
8527 itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
8528 transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
8529 curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
8530 pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
8531 if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
8532 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
8533 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
8534 yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
8535 neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
8536 noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
8537 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
8538 neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
8539 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
8540 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
8541 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
8542 TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
8543 Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
8544 }if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
8545 save N userdict maxlength dict begin/magscale true def normalscale
8546 currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
8547 /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
8548 psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
8549 psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
8550 TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
8551 @MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
8552 newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
8553 closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
8554 /@beginspecial{SDict begin/SpecialSave save N gsave normalscale
8555 currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
8556 N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
8557 neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
8558 rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
8559 scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
8560 lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
8561 ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
8562 /setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
8563 pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
8564 restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
8565 /rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
8566 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
8567 moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
8568 matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
8569 savematrix setmatrix}N end
8572 %%BeginProcSet: color.pro 0 0
8574 TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
8575 setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
8576 }repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
8577 /TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
8578 setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
8579 /currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
8580 known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
8581 /Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
8582 /Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
8583 setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
8584 setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
8585 0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
8586 /Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
8587 setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
8588 0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
8589 0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
8590 0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
8591 /Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
8592 setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
8593 setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
8594 0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
8595 /Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
8596 setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
8597 0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
8598 0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
8599 0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
8600 /BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
8601 setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
8602 /CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
8603 0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
8604 0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
8605 0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
8606 setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
8607 0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
8608 /Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
8609 setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
8610 0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
8611 1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
8612 /PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
8613 setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
8614 0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
8615 DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
8616 setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
8617 setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
8618 setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
8621 TeXDict begin 39158280 55380996 1000 600 600 (test_08.dvi)
8623 %DVIPSBitmapFont: Fa ecrm1000 10 2
8624 /Fa 2 51 df<0001C0000003C0000007C000001FC00000FFC000FFFFC000FFFFC000FF1F
8625 C000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001F
8626 C000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001F
8627 C000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001F
8628 C000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001F
8629 C000001FC000001FC000001FC000001FC000001FC000001FC000001FC000003FE0007FFF
8630 FFF07FFFFFF07FFFFFF01C3779B62A>49 D<000FF00000007FFE000001FFFF800003E03F
8631 E0000F000FF0001E0007F8001C0003FC00380001FE00700001FE00700000FF00600000FF
8632 00FE0000FF00FF00007F80FF80007F80FF80007F80FF80007F80FF80007F80FF80007F80
8633 7F00007F801C00007F800000007F80000000FF00000000FF00000000FE00000001FE0000
8634 0001FC00000003FC00000003F800000007F00000000FE00000000FC00000001F80000000
8635 3F000000007E00000000FC00000001F800000001E000000003C000000007800000000F00
8636 0000001E000180003C000180007800018000F000038001E000030003C000030007800003
8637 0007000007000FFFFFFF001FFFFFFF003FFFFFFF007FFFFFFE00FFFFFFFE00FFFFFFFE00
8638 FFFFFFFE0021377CB62A>I E
8640 %DVIPSBitmapFont: Fb ecbx1440 14.4 23
8641 /Fb 23 234 df<000000007FFC0000000000001FFFFF800000000001FFFFFFE000000000
8642 07FFFFFFF8000000003FFFC00FFC00000000FFFC0001FE00000001FFF000007F00000007
8643 FFC00003FF0000000FFF800007FF8000001FFF00000FFF8000003FFF00000FFF8000003F
8644 FE00000FFF8000007FFC00000FFF8000007FFC00001FFFC00000FFFC00000FFF800000FF
8645 F800000FFF800000FFF800000FFF800000FFF8000007FF000000FFF8000003FE000000FF
8646 F8000000F8000000FFF800000000000000FFF800000000000000FFF800000000000000FF
8647 F800000000000000FFF800000000000000FFF800000000000000FFF800000000000000FF
8648 F800000000000000FFF800000000000000FFF800000000000000FFF80007FFFFC000FFFF
8649 FFFFFFFFFFC000FFFFFFFFFFFFFFC000FFFFFFFFFFFFFFC000FFFFFFFFFFFFFFC000FFFF
8650 FFFFFFFFFFC00000FFF800000FFFC00000FFF8000007FFC00000FFF8000007FFC00000FF
8651 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FF
8652 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FF
8653 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FF
8654 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FF
8655 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FF
8656 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FF
8657 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FF
8658 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FF
8659 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FF
8660 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000FFFF
8661 FFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFF
8662 FFF807FFFFFFC042547DD349>28 D<0000001E00000000003E0000000000FE0000000003
8663 FE000000000FFE000000007FFE00000007FFFE000003FFFFFE0000FFFFFFFE0000FFFFFF
8664 FE0000FFFFFFFE0000FFF87FFE0000FC007FFE000000007FFE000000007FFE000000007F
8665 FE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007F
8666 FE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007F
8667 FE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007F
8668 FE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007F
8669 FE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007F
8670 FE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007F
8671 FE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007F
8672 FE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007F
8673 FE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007F
8674 FE000000007FFE000000007FFE000000007FFE00007FFFFFFFFFFC7FFFFFFFFFFC7FFFFF
8675 FFFFFC7FFFFFFFFFFC7FFFFFFFFFFC2E4E76CD42>49 D<00001FFE0000000001FFFFF000
8676 00000FFFFFFC0000003FFFFFFF8000007FFFFFFFE00001FF803FFFF00003FC0007FFFC00
8677 07F00001FFFE000FE00000FFFF001F8000007FFF803F0000003FFF803F0000001FFFC07F
8678 E000001FFFE07FF800000FFFE07FFC00000FFFF0FFFC000007FFF0FFFE000007FFF0FFFE
8679 000003FFF8FFFE000003FFF8FFFE000003FFF8FFFE000003FFF8FFFE000003FFF87FFC00
8680 0003FFF87FFC000003FFF83FF8000003FFF81FF0000003FFF80380000003FFF800000000
8681 03FFF00000000007FFF00000000007FFF00000000007FFE0000000000FFFE0000000000F
8682 FFC0000000001FFFC0000000001FFF80000000003FFF00000000003FFE00000000007FFC
8683 0000000000FFF80000000000FFF00000000001FFE00000000003FFC00000000007FF8000
8684 00000007FF00000000000FFC00000000001FF800000000003FF000000000007FC0000000
8685 0000FF800000000001FF000000000003FC000000000007F800000000000FF00000F80000
8686 1FE00000F800003FC00000F800007F000000F80000FE000001F00001FC000001F00003F8
8687 000001F00007F0000001F00007E0000001F0000F80000003F0001F00000003F0003E0000
8688 0007F0007FFFFFFFFFF000FFFFFFFFFFE001FFFFFFFFFFE003FFFFFFFFFFE007FFFFFFFF
8689 FFE00FFFFFFFFFFFE01FFFFFFFFFFFE03FFFFFFFFFFFE07FFFFFFFFFFFE0FFFFFFFFFFFF
8690 E0FFFFFFFFFFFFC0FFFFFFFFFFFFC0FFFFFFFFFFFFC0FFFFFFFFFFFFC0354E7ACD42>I<
8691 FFFFFFFFFFFFFC000000FFFFFFFFFFFFFFE00000FFFFFFFFFFFFFFFE0000FFFFFFFFFFFF
8692 FFFF8000FFFFFFFFFFFFFFFFE000000FFFE000003FFFF000000FFFE0000003FFFC00000F
8693 FFE0000000FFFE00000FFFE00000007FFF00000FFFE00000003FFF80000FFFE00000001F
8694 FFC0000FFFE00000000FFFE0000FFFE000000007FFE0000FFFE000000007FFF0000FFFE0
8695 00000007FFF0000FFFE000000007FFF8000FFFE000000003FFF8000FFFE000000003FFF8
8696 000FFFE000000003FFFC000FFFE000000003FFFC000FFFE000000003FFFC000FFFE00000
8697 0003FFFC000FFFE000000003FFFC000FFFE000000003FFFC000FFFE000000003FFFC000F
8698 FFE000000003FFFC000FFFE000000003FFFC000FFFE000000003FFF8000FFFE000000003
8699 FFF8000FFFE000000003FFF8000FFFE000000007FFF8000FFFE000000007FFF0000FFFE0
8700 00000007FFF0000FFFE000000007FFE0000FFFE00000000FFFC0000FFFE00000001FFFC0
8701 000FFFE00000003FFF80000FFFE00000007FFF00000FFFE0000000FFFE00000FFFE00000
8702 07FFF800000FFFE000003FFFF000000FFFFFFFFFFFFFC000000FFFFFFFFFFFFF0000000F
8703 FFFFFFFFFFF80000000FFFFFFFFFFF800000000FFFE0000000000000000FFFE000000000
8704 0000000FFFE0000000000000000FFFE0000000000000000FFFE0000000000000000FFFE0
8705 000000000000000FFFE0000000000000000FFFE0000000000000000FFFE0000000000000
8706 000FFFE0000000000000000FFFE0000000000000000FFFE0000000000000000FFFE00000
8707 00000000000FFFE0000000000000000FFFE0000000000000000FFFE0000000000000000F
8708 FFE0000000000000000FFFE0000000000000000FFFE0000000000000000FFFE000000000
8709 0000000FFFE0000000000000000FFFE0000000000000000FFFE0000000000000000FFFE0
8710 000000000000000FFFE0000000000000000FFFE0000000000000000FFFE0000000000000
8711 000FFFE0000000000000000FFFE0000000000000000FFFE0000000000000000FFFE00000
8712 00000000000FFFE0000000000000FFFFFFFFFE0000000000FFFFFFFFFE0000000000FFFF
8713 FFFFFE0000000000FFFFFFFFFE0000000000FFFFFFFFFE00000000004E527CD15A>80
8714 D<00000FFE00001C000000FFFFF0003C000007FFFFFC007C00001FFFFFFF00FC00007FFF
8715 FFFFC1FC0000FFF001FFE1FC0001FF80001FFBFC0003FF000007FFFC0007FC000001FFFC
8716 000FF8000000FFFC001FF00000003FFC001FF00000001FFC003FE00000000FFC003FE000
8717 00000FFC007FE000000007FC007FC000000003FC007FC000000003FC007FC000000001FC
8718 00FFC000000001FC00FFC000000001FC00FFC000000000FC00FFE000000000FC00FFE000
8719 000000FC00FFF0000000007C00FFF0000000007C00FFF8000000007C00FFFC000000007C
8720 00FFFE0000000000007FFF0000000000007FFFC000000000007FFFF800000000007FFFFF
8721 80000000003FFFFFF8000000003FFFFFFFC00000001FFFFFFFFC0000000FFFFFFFFF8000
8722 000FFFFFFFFFF0000007FFFFFFFFFC000003FFFFFFFFFE000001FFFFFFFFFF800000FFFF
8723 FFFFFFC000007FFFFFFFFFE000001FFFFFFFFFF0000007FFFFFFFFF8000001FFFFFFFFF8
8724 0000007FFFFFFFFC00000007FFFFFFFE000000007FFFFFFE0000000003FFFFFF00000000
8725 003FFFFF000000000003FFFF800000000000FFFF8000000000003FFF8000000000001FFF
8726 8000000000000FFFC0000000000007FFC0000000000003FFC0F80000000003FFC0F80000
8727 000001FFC0F80000000001FFC0F80000000001FFC0F80000000000FFC0FC0000000000FF
8728 C0FC0000000000FFC0FC0000000000FFC0FC0000000000FF80FE0000000000FF80FE0000
8729 000000FF80FF0000000001FF80FF0000000001FF00FF8000000001FF00FFC000000003FE
8730 00FFE000000003FE00FFF000000007FC00FFFC0000000FF800FFFE0000001FF800FFFFC0
8731 00003FF000FF7FF80000FFE000FE1FFF8007FFC000FE07FFFFFFFF0000FC01FFFFFFFC00
8732 00F8007FFFFFF00000F0000FFFFFC00000E000007FFC0000003A5479D249>83
8733 D<3FFFFFFFFFFFFFFFFFFC3FFFFFFFFFFFFFFFFFFC3FFFFFFFFFFFFFFFFFFC3FFFFFFFFF
8734 FFFFFFFFFC3FFFFFFFFFFFFFFFFFFC3FFFC0007FFF0003FFFC3FFC00007FFF00003FFC7F
8735 F000007FFF00000FFE7FE000007FFF000007FE7FC000007FFF000003FE7F8000007FFF00
8736 0001FE7F0000007FFF000000FE7F0000007FFF000000FE7E0000007FFF0000007E7E0000
8737 007FFF0000007E7E0000007FFF0000007E7C0000007FFF0000003E7C0000007FFF000000
8738 3E7C0000007FFF0000003E7C0000007FFF0000003E7C0000007FFF0000003EFC0000007F
8739 FF0000003FF80000007FFF0000001FF80000007FFF0000001FF80000007FFF0000001FF8
8740 0000007FFF0000001FF80000007FFF0000001FF80000007FFF0000001F000000007FFF00
8741 000000000000007FFF00000000000000007FFF00000000000000007FFF00000000000000
8742 007FFF00000000000000007FFF00000000000000007FFF00000000000000007FFF000000
8743 00000000007FFF00000000000000007FFF00000000000000007FFF00000000000000007F
8744 FF00000000000000007FFF00000000000000007FFF00000000000000007FFF0000000000
8745 0000007FFF00000000000000007FFF00000000000000007FFF00000000000000007FFF00
8746 000000000000007FFF00000000000000007FFF00000000000000007FFF00000000000000
8747 007FFF00000000000000007FFF00000000000000007FFF00000000000000007FFF000000
8748 00000000007FFF00000000000000007FFF00000000000000007FFF00000000000000007F
8749 FF00000000000000007FFF00000000000000007FFF00000000000000007FFF0000000000
8750 0000007FFF00000000000000007FFF00000000000000007FFF00000000000000007FFF00
8751 000000000000007FFF00000000000000007FFF00000000000000007FFF00000000000000
8752 007FFF00000000000000007FFF00000000000000007FFF00000000000000007FFF000000
8753 00000000007FFF00000000000000007FFF00000000000000007FFF00000000000000007F
8754 FF000000000001FFFFFFFFFFFFC0000001FFFFFFFFFFFFC0000001FFFFFFFFFFFFC00000
8755 01FFFFFFFFFFFFC0000001FFFFFFFFFFFFC00050517BD05B>I<00003FFE000000000007
8756 FFFFE0000000001FFFFFFC000000007FFFFFFF00000001FFC00FFFC0000003FE0003FFE0
8757 000007FF0000FFF0000007FF80007FF800000FFFC0007FFC00000FFFC0003FFE00000FFF
8758 C0003FFE00000FFFC0001FFF00000FFFC0001FFF00000FFFC0001FFF00000FFFC0000FFF
8759 800007FF80000FFF800003FF00000FFF800001FE00000FFF8000000000000FFF80000000
8760 00000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF
8761 800000000007FFFF8000000003FFFFFF800000007FFFFFFF80000003FFFFFFFF8000001F
8762 FFF00FFF8000007FFF000FFF800000FFFC000FFF800003FFF0000FFF800007FFC0000FFF
8763 80000FFF80000FFF80001FFF00000FFF80003FFF00000FFF80003FFE00000FFF80007FFC
8764 00000FFF80007FFC00000FFF81F0FFFC00000FFF81F0FFF800000FFF81F0FFF800000FFF
8765 81F0FFF800000FFF81F0FFF800001FFF81F0FFF800001FFF81F0FFFC00003FFF81F07FFC
8766 00003FFF81F07FFE00007FFF81F03FFE0000F7FFC3F03FFF0001E3FFC3E01FFFC007E3FF
8767 FFE007FFF01F81FFFFC003FFFFFF00FFFF8000FFFFFC007FFF00001FFFF0003FFC000001
8768 FF800007F0003C387CB642>97 D<000003FFE0000000003FFFFE00000000FFFFFF800000
8769 03FFFFFFE000000FFF003FF800003FFC0007FC00007FF8000FFE0000FFF0001FFE0001FF
8770 E0003FFF0003FFC0003FFF0007FF80003FFF0007FF80003FFF000FFF00003FFF001FFF00
8771 003FFF001FFE00003FFF003FFE00001FFE003FFE00000FFC003FFE000007F8007FFE0000
8772 0000007FFC00000000007FFC00000000007FFC0000000000FFFC0000000000FFFC000000
8773 0000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC00000000
8774 00FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000
8775 FFFC00000000007FFC00000000007FFE00000000007FFE00000000007FFE00000000003F
8776 FE00000000003FFF00000000001FFF0000000F801FFF0000000F800FFF8000001F800FFF
8777 8000001F0007FFC000003F0003FFE000003E0001FFF000007E0000FFF80000FC00007FFC
8778 0001F800003FFF0007F000000FFFC01FE0000007FFFFFF80000001FFFFFE000000003FFF
8779 F80000000003FF80000031387CB63A>99 D<000000000003FF8000000000000FFFFF8000
8780 000000000FFFFF8000000000000FFFFF8000000000000FFFFF8000000000000FFFFF8000
8781 00000000003FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
8782 00000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
8783 00000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
8784 00000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
8785 00000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
8786 00000000000FFF800000000000000FFF800000000000000FFF8000000003FF800FFF8000
8787 00003FFFF80FFF80000001FFFFFE0FFF80000007FFFFFF8FFF8000001FFFC03FEFFF8000
8788 003FFE0007FFFF8000007FF80001FFFF800000FFF00000FFFF800001FFE000007FFF8000
8789 03FFC000003FFF800007FF8000001FFF80000FFF8000000FFF80000FFF0000000FFF8000
8790 1FFF0000000FFF80001FFE0000000FFF80003FFE0000000FFF80003FFE0000000FFF8000
8791 7FFE0000000FFF80007FFC0000000FFF80007FFC0000000FFF80007FFC0000000FFF8000
8792 FFFC0000000FFF8000FFFC0000000FFF8000FFFC0000000FFF8000FFFC0000000FFF8000
8793 FFFC0000000FFF8000FFFC0000000FFF8000FFFC0000000FFF8000FFFC0000000FFF8000
8794 FFFC0000000FFF8000FFFC0000000FFF8000FFFC0000000FFF8000FFFC0000000FFF8000
8795 FFFC0000000FFF80007FFC0000000FFF80007FFC0000000FFF80007FFC0000000FFF8000
8796 7FFE0000000FFF80003FFE0000000FFF80003FFE0000000FFF80003FFE0000000FFF8000
8797 1FFE0000000FFF80001FFF0000000FFF80000FFF0000001FFF800007FF8000003FFF8000
8798 07FF8000007FFF800003FFC00000FFFF800001FFE00001FFFF800000FFF00003FFFFE000
8799 007FFC000FEFFFFF80001FFF007F8FFFFF800007FFFFFF0FFFFF800001FFFFFC0FFFFF80
8800 00007FFFE00FFFFF80000007FF000FFE000041547CD249>I<000007FF80000000007FFF
8801 F800000001FFFFFE00000007FFFFFF8000001FFF03FFE000003FFC007FF000007FF0003F
8802 F80000FFE0001FFC0001FFC0000FFC0003FF800007FE0007FF800007FF000FFF000003FF
8803 000FFF000003FF801FFE000003FF801FFE000001FF803FFE000001FFC03FFE000001FFC0
8804 3FFE000001FFC07FFC000001FFC07FFC000001FFE07FFC000000FFE07FFC000000FFE0FF
8805 FC000000FFE0FFFC000000FFE0FFFFFFFFFFFFE0FFFFFFFFFFFFE0FFFFFFFFFFFFE0FFFF
8806 FFFFFFFFE0FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC00
8807 00000000FFFC00000000007FFC00000000007FFC00000000007FFC00000000007FFE0000
8808 0000003FFE00000000003FFE00000000003FFE00000003E01FFF00000003E01FFF000000
8809 07E00FFF00000007C007FF8000000FC007FF8000000F8003FFC000001F8001FFE000003F
8810 0000FFF000007E00007FFC0001FC00001FFF0007F800000FFFE03FF0000003FFFFFFC000
8811 0000FFFFFF800000003FFFFC0000000001FFE0000033387CB63C>I<00001FFE0000FE00
8812 0001FFFFE007FF80000FFFFFFC1FFFC0003FFFFFFF7FFFE0007FF807FFFF07E001FFE001
8813 FFF07FE003FFC000FFF07FE007FF80007FF83FE007FF00003FF83FC00FFF00003FFC1FC0
8814 1FFF00003FFE07001FFE00001FFE00001FFE00001FFE00003FFE00001FFF00003FFE0000
8815 1FFF00003FFE00001FFF00003FFE00001FFF00003FFE00001FFF00003FFE00001FFF0000
8816 3FFE00001FFF00003FFE00001FFF00003FFE00001FFF00001FFE00001FFE00001FFE0000
8817 1FFE00001FFF00003FFE00000FFF00003FFC000007FF00003FF8000007FF80007FF80000
8818 03FFC000FFF0000001FFE001FFE0000000FFF807FF80000001FFFFFFFF00000003EFFFFF
8819 FC00000003C1FFFFE000000007C01FFE0000000007800000000000000780000000000000
8820 0FC00000000000000FC00000000000000FC00000000000000FE00000000000000FE00000
8821 000000000FF00000000000000FFC0000000000000FFFFFFFFE00000007FFFFFFFFF00000
8822 07FFFFFFFFFC000007FFFFFFFFFF800003FFFFFFFFFFC00003FFFFFFFFFFF00001FFFFFF
8823 FFFFF80000FFFFFFFFFFFC00007FFFFFFFFFFC0001FFFFFFFFFFFE0007FFFFFFFFFFFE00
8824 0FFC000003FFFF001FF80000003FFF003FF00000000FFF007FE000000007FF807FE00000
8825 0003FF80FFC000000003FF80FFC000000001FF80FFC000000001FF80FFC000000001FF80
8826 FFC000000001FF80FFC000000001FF80FFE000000003FF807FE000000003FF007FF00000
8827 0007FF003FF000000007FE001FF80000000FFC001FFE0000003FFC0007FF0000007FF000
8828 03FFC00001FFE00000FFFC001FFF8000003FFFFFFFFE0000000FFFFFFFF800000001FFFF
8829 FFC0000000000FFFF80000003B4F7CB542>103 D<003FF8000000000000FFFFF8000000
8830 000000FFFFF8000000000000FFFFF8000000000000FFFFF8000000000000FFFFF8000000
8831 00000003FFF800000000000000FFF800000000000000FFF800000000000000FFF8000000
8832 00000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000000
8833 00000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000000
8834 00000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000000
8835 00000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000000
8836 00000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8001FFC
8837 00000000FFF800FFFF80000000FFF803FFFFE0000000FFF80FFFFFF8000000FFF81FC07F
8838 FC000000FFF87E003FFE000000FFF8F8001FFF000000FFF9F0001FFF000000FFF9E0000F
8839 FF800000FFFBC0000FFF800000FFFF80000FFF800000FFFF000007FFC00000FFFF000007
8840 FFC00000FFFE000007FFC00000FFFE000007FFC00000FFFC000007FFC00000FFFC000007
8841 FFC00000FFFC000007FFC00000FFFC000007FFC00000FFF8000007FFC00000FFF8000007
8842 FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007
8843 FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007
8844 FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007
8845 FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007
8846 FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007
8847 FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007
8848 FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007
8849 FFC000FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FF
8850 FFFFC0FFFFFFF807FFFFFFC042537CD249>I<003F000000FFC00001FFE00003FFF00003
8851 FFF00007FFF80007FFF80007FFF80007FFF80007FFF80007FFF80003FFF00003FFF00001
8852 FFE00000FFC000003F000000000000000000000000000000000000000000000000000000
8853 00000000000000000000000000000000000000000000000000000000000000001FF800FF
8854 FFF800FFFFF800FFFFF800FFFFF800FFFFF80001FFF80000FFF80000FFF80000FFF80000
8855 FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000
8856 FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000
8857 FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000
8858 FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000
8859 FFF80000FFF80000FFF800FFFFFFF0FFFFFFF0FFFFFFF0FFFFFFF0FFFFFFF01C547CD324
8860 >I<0000003F00000000FFC0000001FFE0000003FFF0000003FFF0000007FFF8000007FF
8861 F8000007FFF8000007FFF8000007FFF8000007FFF8000003FFF0000003FFF0000001FFE0
8862 000000FFC00000003F000000000000000000000000000000000000000000000000000000
8863 000000000000000000000000000000000000000000000000000000000000000000000000
8864 00000000000000000000003FF80001FFFFF80001FFFFF80001FFFFF80001FFFFF80001FF
8865 FFF8000003FFF8000000FFF8000000FFF8000000FFF8000000FFF8000000FFF8000000FF
8866 F8000000FFF8000000FFF8000000FFF8000000FFF8000000FFF8000000FFF8000000FFF8
8867 000000FFF8000000FFF8000000FFF8000000FFF8000000FFF8000000FFF8000000FFF800
8868 0000FFF8000000FFF8000000FFF8000000FFF8000000FFF8000000FFF8000000FFF80000
8869 00FFF8000000FFF8000000FFF8000000FFF8000000FFF8000000FFF8000000FFF8000000
8870 FFF8000000FFF8000000FFF8000000FFF8000000FFF8000000FFF8000000FFF8000000FF
8871 F8000000FFF8000000FFF8000000FFF8000000FFF8000000FFF8000000FFF8000000FFF8
8872 000000FFF8000000FFF8000000FFF8000000FFF8078000FFF81FE000FFF83FF000FFF87F
8873 F800FFF8FFFC00FFF0FFFC01FFF0FFFC01FFF0FFFC01FFE0FFFC01FFE0FFFC03FFC07FF8
8874 03FF807FF807FF003FF00FFE001FF03FFC000FFFFFF00007FFFFE00001FFFF0000003FF8
8875 0000256C87D328>I<003FF80000000000FFFFF80000000000FFFFF80000000000FFFFF8
8876 0000000000FFFFF80000000000FFFFF8000000000003FFF8000000000000FFF800000000
8877 0000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8
8878 000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF800000000
8879 0000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8
8880 000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF800000000
8881 0000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8
8882 0007FFFFF000FFF80007FFFFF000FFF80007FFFFF000FFF80007FFFFF000FFF80007FFFF
8883 F000FFF800007FF00000FFF800003FC00000FFF800007F800000FFF80000FF000000FFF8
8884 0001FC000000FFF80003F8000000FFF8000FF0000000FFF8001FE0000000FFF8003FC000
8885 0000FFF8007F00000000FFF800FE00000000FFF803FC00000000FFF807F800000000FFF8
8886 0FF000000000FFF81FE000000000FFF83FF000000000FFF87FF800000000FFF9FFF80000
8887 0000FFFBFFFC00000000FFFFFFFE00000000FFFFFFFE00000000FFFFFFFF00000000FFFF
8888 BFFF80000000FFFF1FFFC0000000FFFE1FFFC0000000FFFC0FFFE0000000FFF007FFF000
8889 0000FFF003FFF8000000FFF003FFF8000000FFF001FFFC000000FFF000FFFE000000FFF0
8890 007FFE000000FFF0007FFF000000FFF0003FFF800000FFF0001FFFC00000FFF0001FFFC0
8891 0000FFF0000FFFE00000FFF00007FFF00000FFF00003FFF80000FFF00003FFF80000FFF0
8892 0001FFFC0000FFF00000FFFE0000FFF00000FFFF00FFFFFFF00FFFFFFEFFFFFFF00FFFFF
8893 FEFFFFFFF00FFFFFFEFFFFFFF00FFFFFFEFFFFFFF00FFFFFFE3F537DD245>I<003FF000
8894 1FFC000000FFFFF000FFFF800000FFFFF003FFFFE00000FFFFF00FFFFFF80000FFFFF01F
8895 C07FFC0000FFFFF07E003FFE000003FFF0F8001FFF000000FFF1F0001FFF000000FFF1E0
8896 000FFF800000FFF3C0000FFF800000FFF780000FFF800000FFF7000007FFC00000FFFF00
8897 0007FFC00000FFFE000007FFC00000FFFE000007FFC00000FFFC000007FFC00000FFFC00
8898 0007FFC00000FFFC000007FFC00000FFFC000007FFC00000FFF8000007FFC00000FFF800
8899 0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
8900 0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
8901 0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
8902 0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
8903 0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
8904 0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
8905 0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
8906 0007FFC000FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF8
8907 07FFFFFFC0FFFFFFF807FFFFFFC042367CB549>110 D<003FF8007FF0000000FFFFF807
8908 FFFF000000FFFFF81FFFFFC00000FFFFF87FFFFFF00000FFFFF9FF00FFFC0000FFFFFFF8
8909 003FFF000003FFFFE0000FFF800000FFFF800007FFC00000FFFF000003FFE00000FFFE00
8910 0003FFF00000FFFC000001FFF00000FFF8000000FFF80000FFF8000000FFFC0000FFF800
8911 00007FFC0000FFF80000007FFE0000FFF80000007FFE0000FFF80000003FFE0000FFF800
8912 00003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF800
8913 00001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF800
8914 00001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF800
8915 00001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF800
8916 00001FFF8000FFF80000003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF800
8917 00003FFF0000FFF80000007FFE0000FFF80000007FFE0000FFF80000007FFC0000FFF800
8918 0000FFFC0000FFF8000000FFF80000FFFC000001FFF80000FFFC000001FFF00000FFFE00
8919 0003FFE00000FFFF000007FFC00000FFFF80000FFF800000FFFFE0001FFF000000FFFFF0
8920 007FFE000000FFF9FE01FFF8000000FFF8FFFFFFF0000000FFF83FFFFFC0000000FFF807
8921 FFFE00000000FFF800FFE000000000FFF800000000000000FFF800000000000000FFF800
8922 000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF800
8923 000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF800
8924 000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF800
8925 000000000000FFF800000000000000FFF8000000000000FFFFFFF80000000000FFFFFFF8
8926 0000000000FFFFFFF80000000000FFFFFFF80000000000FFFFFFF80000000000414D7DB5
8927 49>112 D<003FF001FC00FFFFF00FFF80FFFFF01FFFE0FFFFF07FFFF0FFFFF0FE1FF8FF
8928 FFF1F83FF801FFF1F07FFC00FFF3E07FFC00FFF3C07FFC00FFF7807FFC00FFF7807FFC00
8929 FFFF007FFC00FFFF003FF800FFFE001FF000FFFE000FE000FFFE00000000FFFC00000000
8930 FFFC00000000FFFC00000000FFFC00000000FFF800000000FFF800000000FFF800000000
8931 FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000
8932 FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000
8933 FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000
8934 FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000
8935 FFF800000000FFF8000000FFFFFFFE0000FFFFFFFE0000FFFFFFFE0000FFFFFFFE0000FF
8936 FFFFFE00002E367DB535>114 D<0003FFC00E00001FFFFC1E0000FFFFFF7E0003FFFFFF
8937 FE0007FE003FFE000FF0000FFE001FE00003FE003FC00001FE003F800000FE007F800000
8938 FE007F0000007E007F0000007E00FF0000003E00FF0000003E00FF8000003E00FF800000
8939 3E00FFC000003E00FFF000000000FFFC00000000FFFF800000007FFFFE0000007FFFFFF0
8940 00003FFFFFFE00003FFFFFFF80001FFFFFFFE0000FFFFFFFF00007FFFFFFFC0003FFFFFF
8941 FE0000FFFFFFFF00003FFFFFFF00000FFFFFFF800001FFFFFF8000000FFFFFC00000003F
8942 FFC000000007FFE000000001FFE0F8000000FFE0F80000007FE0FC0000003FE0FC000000
8943 3FE0FC0000001FE0FE0000001FE0FE0000001FE0FE0000001FC0FF0000001FC0FF800000
8944 3FC0FF8000003F80FFC000003F80FFE000007F00FFF80000FF00FFFC0003FE00FFFF801F
8945 FC00FE7FFFFFF000F81FFFFFC000F007FFFF0000E0007FF000002B387CB634>I<00007C
8946 00000000007C00000000007C00000000007C00000000007C00000000007C0000000000FC
8947 0000000000FC0000000000FC0000000000FC0000000001FC0000000001FC0000000001FC
8948 0000000003FC0000000003FC0000000007FC0000000007FC000000000FFC000000001FFC
8949 000000003FFC000000007FFC00000000FFFC00000003FFFC0000000FFFFFFFFE00FFFFFF
8950 FFFE00FFFFFFFFFE00FFFFFFFFFE00FFFFFFFFFE00007FFC000000007FFC000000007FFC
8951 000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC
8952 000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC
8953 000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC
8954 000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC
8955 000000007FFC000F80007FFC000F80007FFC000F80007FFC000F80007FFC000F80007FFC
8956 000F80007FFC000F80007FFC000F80007FFC000F80007FFC000F80007FFC000F80007FFC
8957 001F00003FFE001F00003FFE001F00001FFE003E00001FFF003E00000FFF807C000007FF
8958 C1F8000003FFFFF0000000FFFFE00000003FFF8000000003FE0000294D7ECB33>I<003F
8959 F8000001FFC000FFFFF80007FFFFC000FFFFF80007FFFFC000FFFFF80007FFFFC000FFFF
8960 F80007FFFFC000FFFFF80007FFFFC00003FFF800001FFFC00000FFF8000007FFC00000FF
8961 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FF
8962 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FF
8963 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FF
8964 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FF
8965 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FF
8966 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FF
8967 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FF
8968 F8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800000FFFC00000FF
8969 F800000FFFC00000FFF800000FFFC00000FFF800001FFFC00000FFF800001FFFC00000FF
8970 F800003FFFC000007FF800003FFFC000007FF800007FFFC000003FFC0000F7FFC000003F
8971 FC0001E7FFF000001FFE0007C7FFFFC0000FFF801F87FFFFC00007FFFFFF07FFFFC00001
8972 FFFFFC07FFFFC000007FFFF007FFFFC0000007FFC007FF000042377CB549>I<FFFFFFE0
8973 001FFFFCFFFFFFE0001FFFFCFFFFFFE0001FFFFCFFFFFFE0001FFFFCFFFFFFE0001FFFFC
8974 01FFF8000001FF0000FFF80000007C0000FFFC000000FC00007FFC000000F800007FFE00
8975 0000F800007FFE000001F800003FFF000001F000003FFF000003F000001FFF000003E000
8976 001FFF800007E000000FFF800007C000000FFFC0000FC000000FFFC0000FC0000007FFE0
8977 000F80000007FFE0001F80000003FFE0001F00000003FFF0003F00000001FFF0003E0000
8978 0001FFF8007E00000000FFF8007C00000000FFFC007C00000000FFFC00FC000000007FFC
8979 00F8000000007FFE01F8000000003FFE01F0000000003FFF03F0000000001FFF03E00000
8980 00001FFF83E0000000001FFF87E0000000000FFF87C0000000000FFFCFC00000000007FF
8981 CF800000000007FFFF800000000003FFFF000000000003FFFF000000000003FFFF000000
8982 000001FFFE000000000001FFFE000000000000FFFC000000000000FFFC0000000000007F
8983 F80000000000007FF80000000000007FF80000000000003FF00000000000003FF0000000
8984 0000001FE00000000000001FE00000000000000FC00000000000000FC00000003E367DB4
8985 45>I<00000003C0000000000007F000000000001FF800000000003FFC00000000007FFC
8986 0000000000FFFE0000000001FFFE0000000003FFFE0000000007FFFE000000000FFFFE00
8987 0000001FFFFC000000003FFFF8000000007FFFF000000000FFFFC000000001FFFE000000
8988 0003FFF80000000003FFC00000000001FE000000000001F8000000000000C00000000000
8989 000000000000000000000000000000000000000000000000000000000007FF8000000000
8990 7FFFF800000001FFFFFE00000007FFFFFF8000001FFF03FFE000003FFC007FF000007FF0
8991 003FF80000FFE0001FFC0001FFC0000FFC0003FF800007FE0007FF800007FF000FFF0000
8992 03FF000FFF000003FF801FFE000003FF801FFE000001FF803FFE000001FFC03FFE000001
8993 FFC03FFE000001FFC07FFC000001FFC07FFC000001FFE07FFC000000FFE07FFC000000FF
8994 E0FFFC000000FFE0FFFC000000FFE0FFFFFFFFFFFFE0FFFFFFFFFFFFE0FFFFFFFFFFFFE0
8995 FFFFFFFFFFFFE0FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FF
8996 FC0000000000FFFC00000000007FFC00000000007FFC00000000007FFC00000000007FFE
8997 00000000003FFE00000000003FFE00000000003FFE00000003E01FFF00000003E01FFF00
8998 000007E00FFF00000007C007FF8000000FC007FF8000000F8003FFC000001F8001FFE000
8999 003F0000FFF000007E00007FFC0001FC00001FFF0007F800000FFFE03FF0000003FFFFFF
9000 C0000000FFFFFF800000003FFFFC0000000001FFE0000033507CCE3C>233
9003 %DVIPSBitmapFont: Fc ecrm1200 12 10
9004 /Fc 10 115 df<1E007F80FF80FFC0FFC0FFE0FFE0FFE07FE01E60006000600060006000
9005 E000C000C000C001C0018003800300070006000E001C003800700060000B1D78891B>44
9006 D<0000FF00000007FFE000001F81F800003E007C0000FC003F0001F8001F8001F0000F80
9007 03E00007C007C00003E007C00003E00FC00003F00F800001F01F800001F81F800001F83F
9008 800001FC3F800001FC3F800001FC3F000000FC7F000000FE7F000000FE7F000000FE7F00
9009 0000FE7F000000FEFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF0000
9010 00FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000
9011 FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FF
9012 FF000000FFFF000000FF7F000000FE7F000000FE7F000000FE7F000000FE7F000000FE7F
9013 800001FE3F800001FC3F800001FC3F800001FC1F800001F81F800001F80FC00003F00FC0
9014 0003F00FC00003F007E00007E003E00007C003F0000FC001F8001F8000FC003F00003E00
9015 7C00001F81F8000007FFE0000000FF000028447CC131>48 D<0003FE0000001FFFC00000
9016 7FFFF00001F80FFC0003C001FE00078000FF000E00007F801C00003FC01C00001FE03800
9017 001FF03000000FF07000000FF860000007F86C000007F8FF000007FCFF800007FCFFC000
9018 07FCFFC00003FCFFC00003FCFFC00003FCFFC00003FC7F800007FC3F000007FC00000007
9019 FC00000007F800000007F80000000FF80000000FF00000001FF00000001FE00000001FE0
9020 0000003FC00000007F800000007F00000000FF00000000FE00000001FC00000003F80000
9021 0007F000000007E00000000FC00000001F800000003F000000007C00000000F800000000
9022 F000000001E000000003C000000007800000000F00000C001E00000C003C00000C003800
9023 0018007000001800E000001801C0000018038000003807000000300E000000701FFFFFFF
9024 F01FFFFFFFF03FFFFFFFF07FFFFFFFF0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE026427BC131
9025 >50 D<0001FF0000000FFFE000003FFFFC0000FE01FE0001F0007F8003C0003FC0070000
9026 1FE00E00001FE00E00000FF00FE0000FF01FF0000FF81FF0000FF81FF00007F81FF80007
9027 F81FF00007F81FF00007F80FE0000FF803C0000FF80000000FF00000000FF00000000FF0
9028 0000001FE00000001FE00000003FC00000003F800000007F00000000FE00000001FC0000
9029 0003F00000001FC000000FFF0000000FFFF000000001FC000000007F000000003F800000
9030 001FC00000000FE00000000FF000000007F800000007FC00000003FC00000003FE000000
9031 03FE00000001FE00000001FF00000001FF00000001FF1E000001FF7F800001FFFFC00001
9032 FFFFC00001FFFFC00001FFFFC00001FFFFC00001FEFF800003FEFF800003FE7E000003FC
9033 70000007FC30000007F83800000FF81C00000FF00E00001FE00780003FC003E0007F8001
9034 FE01FE00007FFFF800000FFFE0000001FF000028447CC131>I<0000FF00000007FFE000
9035 001FFFF800007F00FE0000FC003F0001F0001F8003E0000FC003C00007E007C00003F00F
9036 800001F00F800001F00F000001F81F000000F81F000000F81F000000F81F000000F81F80
9037 0000F81F800000F81FC00001F81FC00001F01FE00001F00FF00003E00FFC0003E007FE00
9038 07C007FF800F8003FFC01F0001FFF03E0001FFF87800007FFEF000003FFFC000001FFFC0
9039 000007FFE0000003FFF8000007FFFC00001E7FFF00007C1FFF8000F80FFFC001E003FFE0
9040 03C001FFF007C0007FF80F80003FFC1F00000FFC3E000007FE3E000001FE7C000000FE7C
9041 000000FF7C0000007FF80000003FF80000003FF80000001FF80000001FF80000001FF800
9042 00001FF80000001FFC0000001E7C0000003E7C0000003E7E0000003C3E0000007C1F0000
9043 00F81F800001F00FC00003E007E00007C003F8001F8000FF00FF00003FFFFC00000FFFF0
9044 000001FF800028447CC131>56 D<FFFF800000000007FFFCFFFFC0000000000FFFFCFFFF
9045 C0000000000FFFFC01FFC0000000000FFE00006FE0000000001BF800006FE0000000001B
9046 F800006FE0000000001BF8000067F00000000033F8000067F00000000033F8000063F800
9047 00000063F8000063F80000000063F8000063F80000000063F8000061FC00000000C3F800
9048 0061FC00000000C3F8000061FC00000000C3F8000060FE0000000183F8000060FE000000
9049 0183F80000607F0000000303F80000607F0000000303F80000607F0000000303F8000060
9050 3F8000000603F80000603F8000000603F80000603F8000000603F80000601FC000000C03
9051 F80000601FC000000C03F80000600FE000001803F80000600FE000001803F80000600FE0
9052 00001803F800006007F000003003F800006007F000003003F800006007F000003003F800
9053 006003F800006003F800006003F800006003F800006001FC0000C003F800006001FC0000
9054 C003F800006001FC0000C003F800006000FE00018003F800006000FE00018003F8000060
9055 00FE00018003F8000060007F00030003F8000060007F00030003F8000060003F80060003
9056 F8000060003F80060003F8000060003F80060003F8000060001FC00C0003F8000060001F
9057 C00C0003F8000060001FC00C0003F8000060000FE0180003F8000060000FE0180003F800
9058 00600007F0300003F80000600007F0300003F80000600007F0300003F80000600003F860
9059 0003F80000600003F8600003F80000600003F8600003F80000600001FCC00003F8000060
9060 0001FCC00003F80000600000FF800003F80000600000FF800003F80000600000FF800003
9061 F800006000007F000003F80000F000007F000003F80000F000007F000003F80001F80000
9062 3E000003F8000FFF00003E00000FFE00FFFFF0001C0007FFFFFCFFFFF0001C0007FFFFFC
9063 FFFFF0001C0007FFFFFC4E447BC359>77 D<0007FC000000003FFF80000000F80FE00000
9064 03C003F00000070001F800000E0000FC00000FC0007E00001FE0007F00001FF0003F8000
9065 1FF0003F80001FF0003F80001FF0001FC0001FF0001FC0000FE0001FC0000380001FC000
9066 0000001FC0000000001FC0000000001FC0000000001FC00000000FFFC0000001FFFFC000
9067 000FFE1FC000003FC01FC00000FF001FC00003FC001FC00007F8001FC0000FF0001FC000
9068 1FE0001FC0003FC0001FC0007FC0001FC0007F80001FC0007F80001FC060FF00001FC060
9069 FF00001FC060FF00001FC060FF00003FC060FF00003FC060FF00003FC060FF80007FC060
9070 7F8000EFC0607FC000C7E0C03FC001C7E0C01FE00783F1C007F81E03FF8001FFFC01FF00
9071 001FE0007C002B2E7CAC31>97 D<00007F80000003FFF000000FC07C00003F000F0000FC
9072 00038001F80001C003F8000FC007F0001FE007E0003FE00FE0003FE01FC0003FE01FC000
9073 3FE03F80003FE03F80001FC07F800007007F800000007F800000007F00000000FF000000
9074 00FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000
9075 FF00000000FF00000000FF000000007F000000007F800000007F800000003F800000003F
9076 800000303FC00000301FC00000700FE00000600FE00000E007F00000C003F80001C001F8
9077 00038000FC000700003F001E00001FC078000007FFF0000000FF8000242E7DAC2B>99
9078 D<01FC00000000FFFC00000000FFFC00000000FFFC0000000007FC0000000003FC000000
9079 0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
9080 0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
9081 0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
9082 0001FC0000000001FC01FE000001FC07FFC00001FC1E07F00001FC3801F80001FC7001FC
9083 0001FCE000FC0001FDC000FE0001FD8000FE0001FF80007F0001FF00007F0001FF00007F
9084 0001FE00007F0001FE00007F0001FE00007F0001FC00007F0001FC00007F0001FC00007F
9085 0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F
9086 0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F
9087 0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F
9088 0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0003FE0000FF
9089 80FFFFF83FFFFEFFFFF83FFFFEFFFFF83FFFFE2F457DC436>104
9090 D<03F803F0FFF81FFCFFF83C3EFFF8707F07F8E0FF03F9C0FF01F980FF01FB80FF01FB00
9091 7E01FB003C01FF000001FE000001FE000001FE000001FE000001FC000001FC000001FC00
9092 0001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00
9093 0001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00
9094 0001FC000001FC000001FC000001FC000003FF0000FFFFFE00FFFFFE00FFFFFE00202C7D
9097 %DVIPSBitmapFont: Fd ecrm1728 17.28 5
9098 /Fd 5 117 df<0F003FC07FE0FFF0FFF0FFF0FFF0FFF0FFF07FE03FC00F000000000000
9099 000000000000000000000000000000000000000000000000000000000000000000000000
9100 00000000000000000000000000000000000000000000000000000000000000000000000F
9101 003FC07FE0FFF0FFF0FFF0FFF0FFF0FFF07FE03FC00F000C3E74BD25>58
9102 D<3FFFFFFFFFFFFFFFFFFFF03FFFFFFFFFFFFFFFFFFFF03FFFFFFFFFFFFFFFFFFFF03FFF
9103 FFFFFFFFFFFFFFFFF03FFF800007FF800007FFF03FFC000003FF000000FFF03FE0000003
9104 FF0000001FF03FC0000003FF0000000FF07F80000003FF00000007F87F00000003FF0000
9105 0003F87E00000003FF00000001F87C00000003FF00000000F87C00000003FF00000000F8
9106 7C00000003FF00000000F87800000003FF00000000787800000003FF0000000078780000
9107 0003FF00000000787800000003FF00000000787000000003FF00000000387000000003FF
9108 00000000387000000003FF00000000387000000003FF00000000387000000003FF000000
9109 00387000000003FF0000000038F000000003FF000000003CE000000003FF000000001CE0
9110 00000003FF000000001CE000000003FF000000001CE000000003FF000000001CE0000000
9111 03FF000000001CE000000003FF000000001CE000000003FF000000001C0000000003FF00
9112 000000000000000003FF00000000000000000003FF00000000000000000003FF00000000
9113 000000000003FF00000000000000000003FF00000000000000000003FF00000000000000
9114 000003FF00000000000000000003FF00000000000000000003FF00000000000000000003
9115 FF00000000000000000003FF00000000000000000003FF00000000000000000003FF0000
9116 0000000000000003FF00000000000000000003FF00000000000000000003FF0000000000
9117 0000000003FF00000000000000000003FF00000000000000000003FF0000000000000000
9118 0003FF00000000000000000003FF00000000000000000003FF00000000000000000003FF
9119 00000000000000000003FF00000000000000000003FF00000000000000000003FF000000
9120 00000000000003FF00000000000000000003FF00000000000000000003FF000000000000
9121 00000003FF00000000000000000003FF00000000000000000003FF000000000000000000
9122 03FF00000000000000000003FF00000000000000000003FF00000000000000000003FF00
9123 000000000000000003FF00000000000000000003FF00000000000000000003FF00000000
9124 000000000003FF00000000000000000003FF00000000000000000003FF00000000000000
9125 000003FF00000000000000000003FF00000000000000000003FF00000000000000000003
9126 FF00000000000000000003FF00000000000000000003FF00000000000000000003FF0000
9127 0000000000000003FF00000000000000000003FF00000000000000000003FF0000000000
9128 0000000003FF00000000000000000003FF00000000000000000003FF0000000000000000
9129 0003FF00000000000000000003FF00000000000000000003FF00000000000000000007FF
9130 80000000000000000007FF8000000000000000003FFFF000000000000003FFFFFFFFFF00
9131 0000000003FFFFFFFFFF000000000003FFFFFFFFFF000000000003FFFFFFFFFF00000056
9132 627BE161>84 D<000003FE00000000001FFFE000000000FFFFF800000001FE03FE000000
9133 07F0007F8000000FE0003FC000003FC0001FE000007F00000FF00000FF000007F80000FE
9134 000003F80001FC000003FC0003F8000001FC0007F8000001FE0007F0000000FE000FF000
9135 0000FF000FF00000007F001FE00000007F001FE00000007F803FE00000007F803FC00000
9136 003F803FC00000003F807FC00000003FC07FC00000003FC07FC00000003FC07F80000000
9137 3FC07F800000003FC0FF800000003FC0FFFFFFFFFFFFC0FFFFFFFFFFFFC0FFFFFFFFFFFF
9138 C0FF800000000000FF800000000000FF800000000000FF800000000000FF800000000000
9139 FF800000000000FF800000000000FF800000000000FF8000000000007F8000000000007F
9140 C000000000007FC000000000007FC000000000003FC000000000003FC000000000003FE0
9141 00000000001FE000000000001FE000000001C00FF000000001C00FF000000003C007F800
9142 0000038007F8000000038003FC000000078001FC0000000F0001FE0000000E0000FF0000
9143 001E00007F8000003C00003FC000007800001FE00000F0000007F00003E0000003FC0007
9144 C0000000FF803F000000003FFFFC000000000FFFF00000000001FF80000032417BBF3C>
9145 101 D<0000FFC00300000FFFF80700007FFFFE0F0001FF003F9F0003F00007DF0007E000
9146 03FF000F800000FF001F8000007F003F0000007F003E0000003F007E0000001F007C0000
9147 001F00FC0000000F00FC0000000F00FC0000000F00FC0000000F00FC0000000700FE0000
9148 000700FE0000000700FF0000000700FF80000007007FC0000007007FE0000000007FF800
9149 0000003FFE000000001FFFE00000000FFFFF0000000FFFFFF0000003FFFFFE000001FFFF
9150 FF8000007FFFFFE000001FFFFFF8000007FFFFFC000000FFFFFE00000007FFFF00000000
9151 3FFF8000000007FF8000000001FFC0000000007FC0E00000003FE0E00000001FE0E00000
9152 001FF0F00000000FF0F000000007F0F000000007F0F000000007F0F800000003F0F80000
9153 0003F0F800000003F0FC00000003F0FC00000003F0FE00000003E0FE00000007E0FF0000
9154 0007E0FF00000007C0FF8000000FC0FFC000000F80FFE000001F80FDF000003F00F8F800
9155 007E00F87C0001FC00F01F801FF000F00FFFFFC000E003FFFF0000C0007FF000002C417C
9156 BF35>115 D<000070000000000070000000000070000000000070000000000070000000
9157 0000700000000000700000000000F00000000000F00000000000F00000000000F0000000
9158 0000F00000000001F00000000001F00000000001F00000000003F00000000003F0000000
9159 0007F00000000007F0000000000FF0000000000FF0000000001FF0000000003FF0000000
9160 007FF000000000FFF000000003FFF00000000FFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00
9161 FFFFFFFFFF00000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000
9162 000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000
9163 000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000
9164 000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000
9165 000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000
9166 000FF0000000000FF0000000000FF0000000000FF00001C0000FF00001C0000FF00001C0
9167 000FF00001C0000FF00001C0000FF00001C0000FF00001C0000FF00001C0000FF00001C0
9168 000FF00001C0000FF00001C0000FF00001C0000FF00001C0000FF00001C00007F8000380
9169 0007F80003800007F80003800007F80007800003FC0007000003FC000F000001FE000E00
9170 0000FF001E0000007F803C0000003FE0F80000001FFFF000000007FFC000000000FF0000
9173 %DVIPSBitmapFont: Fe ectt1728 17.28 10
9174 /Fe 10 117 df<7FFFFFFFFFFC7FFFFFFFFFFCFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFF
9175 FEFFFFFFFFFFFE7FFFFFFFFFFC7FFFFFFFFFFC2F0874A248>45 D<000000FFF000000000
9176 000FFFFF00000000007FFFFFC000000001FFFFFFF000000007FFFFFFFC0000001FFFFFFF
9177 FE0000003FFFFFFFFF0000007FFFFFFFFF800000FFFF801FFFC00001FFF80001FFE00001
9178 FFC000007FF00003FF0000003FF80007FE0000000FF80007FC00000007FC0007F8000000
9179 07FC000FF800000003FC000FF800000003FE000FFC00000001FE000FFC00000001FE000F
9180 FC00000001FE000FFC00000001FE0007F800000001FE0003F000000001FE0001E0000000
9181 01FE00000000000003FE00000000000003FC00000000000003FC00000000000007FC0000
9182 0000000007F80000000000000FF80000000000001FF00000000000001FF0000000000000
9183 3FE0000000000000FFE0000000000001FFC0000000000007FF8000000000001FFF000000
9184 00001FFFFE000000001FFFFFFC000000003FFFFFF8000000003FFFFFF0000000003FFFFF
9185 C0000000003FFFFFE0000000003FFFFFF8000000003FFFFFFE000000001FFFFFFF000000
9186 0000001FFF80000000000003FFE00000000000007FF00000000000003FF8000000000000
9187 0FFC00000000000007FC00000000000003FE00000000000001FF00000000000000FF0000
9188 0000000000FF800000000000007F800000000000007FC00000000000003FC00000000000
9189 003FC00000000000003FE00000000000001FE00000000000001FE00000000000001FE03F
9190 00000000001FE07F80000000001FE07F80000000001FE0FFC0000000001FE0FFC0000000
9191 001FE0FFC0000000003FE0FFC0000000003FC0FF80000000003FC0FF80000000007FC07F
9192 80000000007FC07F8000000000FF807FC000000000FF803FE000000001FF003FF0000000
9193 03FF001FF800000007FE001FFC0000000FFC000FFF0000003FFC0007FFC000007FF80003
9194 FFF80003FFF00001FFFF801FFFE00000FFFFFFFFFFC000007FFFFFFFFF8000001FFFFFFF
9195 FF0000000FFFFFFFFC00000003FFFFFFF000000000FFFFFFC0000000001FFFFF00000000
9196 0000FFF00000003B5C7AD948>51 D<000000003FFFC000000000007FFFC00000000000FF
9197 FFE00000000000FFFFE00000000000FFFFE00000000000FFFFE000000000007FFFE00000
9198 0000003FFFE00000000000001FE00000000000001FE00000000000001FE0000000000000
9199 1FE00000000000001FE00000000000001FE00000000000001FE00000000000001FE00000
9200 000000001FE00000000000001FE00000000000001FE00000000000001FE0000000000000
9201 1FE00000000000001FE00000000000001FE00000000000001FE00000000000001FE00000
9202 0007FC001FE00000003FFFC01FE0000000FFFFF01FE0000003FFFFF81FE0000007FFFFFE
9203 1FE000001FFFFFFF1FE000003FFFFFFF9FE000007FFFFFFFDFE00000FFFF01FFFFE00000
9204 FFF8003FFFE00001FFE0000FFFE00003FF800007FFE00007FF000003FFE00007FE000001
9205 FFE0000FFC000000FFE0000FF8000000FFE0001FF00000007FE0001FF00000007FE0003F
9206 E00000003FE0003FE00000003FE0003FC00000001FE0007FC00000001FE0007FC0000000
9207 1FE0007F800000001FE0007F800000001FE000FF800000001FE000FF800000001FE000FF
9208 000000001FE000FF000000001FE000FF000000001FE000FF000000001FE000FF00000000
9209 1FE000FF000000001FE000FF000000001FE000FF000000001FE000FF000000001FE000FF
9210 000000001FE000FF800000001FE000FF800000001FE0007F800000001FE0007F80000000
9211 3FE0007F800000003FE0007FC00000003FE0003FC00000003FE0003FE00000007FE0003F
9212 E00000007FE0001FF0000000FFE0001FF0000000FFE0000FF8000001FFE0000FFC000003
9213 FFE00007FC000003FFE00007FE000007FFE00003FF00000FFFE00003FFC0003FFFE00001
9214 FFF0007FDFE00000FFFC03FFDFFFF0007FFFFFFF9FFFF8003FFFFFFF1FFFFC001FFFFFFE
9215 1FFFFC000FFFFFF81FFFFC0007FFFFF01FFFFC0001FFFFC00FFFF800007FFF000FFFF000
9216 000FF8000000003E597AD748>100 D<000001FFC0000000000FFFFC000000007FFFFF00
9217 000001FFFFFFC0000003FFFFFFF000000FFFFFFFF800001FFFFFFFFC00003FFFFFFFFE00
9218 007FFF807FFF0000FFFC000FFF8000FFF00003FF8001FFC00001FFC003FF8000007FE007
9219 FF0000003FE007FE0000003FF00FFC0000001FF00FF80000000FF81FF00000000FF81FF0
9220 00000007F83FE000000007FC3FE000000007FC3FC000000003FC7FC000000003FC7FC000
9221 000003FC7F8000000003FE7F8000000003FEFF8000000001FEFF8000000001FEFF000000
9222 0001FEFFFFFFFFFFFFFEFFFFFFFFFFFFFEFFFFFFFFFFFFFEFFFFFFFFFFFFFEFFFFFFFFFF
9223 FFFEFFFFFFFFFFFFFCFFFFFFFFFFFFFCFF000000000000FF800000000000FF8000000000
9224 007F8000000000007F8000000000007FC000000000007FC000000000003FE00000000000
9225 3FE000000000003FF000000000001FF000000000FC1FF800000000FC0FFC00000001FE0F
9226 FE00000001FE07FF00000003FE03FF80000007FE03FFC000000FFC01FFF000001FFC00FF
9227 FC00003FF8007FFF0000FFF0003FFFF007FFE0001FFFFFFFFFE0000FFFFFFFFFC00007FF
9228 FFFFFF000001FFFFFFFE0000007FFFFFF80000001FFFFFE000000007FFFF80000000007F
9229 F80000374178BF48>I<000007C0000000000FE0000000001FF0000000003FF800000000
9230 3FF8000000003FF8000000003FF8000000003FF8000000001FF0000000000FE000000000
9231 07C000000000000000000000000000000000000000000000000000000000000000000000
9232 000000000000000000000000000000000000000000000000000000000000000000000000
9233 000000000000000000000000000000000000000000000000000000001FFFFFF000003FFF
9234 FFF000007FFFFFF800007FFFFFF800007FFFFFF800007FFFFFF800003FFFFFF800001FFF
9235 FFF80000000007F80000000007F80000000007F80000000007F80000000007F800000000
9236 07F80000000007F80000000007F80000000007F80000000007F80000000007F800000000
9237 07F80000000007F80000000007F80000000007F80000000007F80000000007F800000000
9238 07F80000000007F80000000007F80000000007F80000000007F80000000007F800000000
9239 07F80000000007F80000000007F80000000007F80000000007F80000000007F800000000
9240 07F80000000007F80000000007F80000000007F80000000007F80000000007F800000000
9241 07F80000000007F80000000007F80000000007F80000000007F80000000007F800000000
9242 07F80000000007F80000000007F80000000007F80000000007F800003FFFFFFFFFFC7FFF
9243 FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFE3FFF
9244 FFFFFFFC305974D848>105 D<3FFFFFF80000007FFFFFF8000000FFFFFFFC000000FFFF
9245 FFFC000000FFFFFFFC000000FFFFFFFC0000007FFFFFFC0000003FFFFFFC000000000003
9246 FC000000000003FC000000000003FC000000000003FC000000000003FC000000000003FC
9247 000000000003FC000000000003FC000000000003FC000000000003FC000000000003FC00
9248 0000000003FC000000000003FC000000000003FC000000000003FC000000000003FC0000
9249 00000003FC000000000003FC000000000003FC000000000003FC000000000003FC000000
9250 000003FC000000000003FC000000000003FC000000000003FC000000000003FC00000000
9251 0003FC000000000003FC000000000003FC000000000003FC000000000003FC0000000000
9252 03FC000000000003FC000000000003FC000000000003FC000000000003FC000000000003
9253 FC000000000003FC000000000003FC000000000003FC000000000003FC000000000003FC
9254 000000000003FC000000000003FC000000000003FC000000000003FC000000000003FC00
9255 0000000003FC000000000003FC000000000003FC000000000003FC000000000003FC0000
9256 00000003FC000000000003FC000000000003FC000000000003FC000000000003FC000000
9257 000003FC000000000003FC000000000003FC000000000003FC000000000003FC00000000
9258 0003FC000000000003FC000000000003FC000000000003FC000000000003FC0000000000
9259 03FC000000000003FC000000000003FC000000000003FC000000000003FC0000003FFFFF
9260 FFFFFFC07FFFFFFFFFFFE0FFFFFFFFFFFFF0FFFFFFFFFFFFF0FFFFFFFFFFFFF0FFFFFFFF
9261 FFFFF07FFFFFFFFFFFE03FFFFFFFFFFFC0345876D748>108 D<000003FE00000000001F
9262 FFC000000000FFFFF800000001FFFFFC00000007FFFFFF0000000FFFFFFF8000001FFFFF
9263 FFC000003FFFFFFFE000007FFE03FFF00000FFF0007FF80001FFC0001FFC0003FF80000F
9264 FE0003FF000007FE0007FE000003FF0007FC000001FF000FF8000000FF800FF00000007F
9265 801FF00000007FC01FE00000003FC03FE00000003FE03FC00000001FE03FC00000001FE0
9266 7F800000000FF07F800000000FF07F800000000FF07F800000000FF07F0000000007F0FF
9267 0000000007F8FF0000000007F8FF0000000007F8FF0000000007F8FF0000000007F8FF00
9268 00000007F8FF0000000007F8FF0000000007F8FF0000000007F8FF0000000007F8FF0000
9269 000007F8FF800000000FF87F800000000FF07F800000000FF07F800000000FF07FC00000
9270 001FF07FC00000001FF03FE00000003FE03FE00000003FE03FE00000003FE01FF0000000
9271 7FC01FF8000000FFC00FF8000000FF800FFC000001FF8007FE000003FF0007FF000007FF
9272 0003FF80000FFE0001FFC0001FFC0000FFF0007FF800007FFE03FFF000007FFFFFFFF000
9273 003FFFFFFFE000000FFFFFFF80000007FFFFFF00000003FFFFFE00000000FFFFF8000000
9274 001FFFC00000000003FE000000354177BF48>111 D<000000007FC000003FFFC003FFF8
9275 00007FFFC01FFFFE0000FFFFE03FFFFF8000FFFFE0FFFFFFC000FFFFE1FFFFFFE000FFFF
9276 E3FFFFFFF0007FFFE7FFFFFFF8003FFFEFFF00FFFC00001FFFF8003FFE00001FFFE0000F
9277 FF00001FFFC00003FF00001FFF800001FF80001FFF000000FFC0001FFE000000FFC0001F
9278 FC0000007FE0001FF80000003FE0001FF80000003FE0001FF00000001FF0001FF0000000
9279 1FF0001FF00000000FF0001FE00000000FF8001FE000000007F8001FE000000007F8001F
9280 E000000007F8001FE000000007FC001FE000000007FC001FE000000003FC001FE0000000
9281 03FC001FE000000003FC001FE000000003FC001FE000000003FC001FE000000003FC001F
9282 E000000003FC001FE000000003FC001FE000000003FC001FE000000003FC001FE0000000
9283 07FC001FE000000007FC001FE000000007F8001FE000000007F8001FF00000000FF8001F
9284 F00000000FF8001FF00000000FF0001FF80000001FF0001FF80000001FF0001FF8000000
9285 3FE0001FFC0000003FE0001FFC0000007FC0001FFE000000FFC0001FFF000001FF80001F
9286 FF800003FF80001FFFC00007FF00001FFFE0001FFE00001FFFF0007FFC00001FEFFE03FF
9287 F800001FE7FFFFFFF800001FE7FFFFFFF000001FE3FFFFFFC000001FE0FFFFFF8000001F
9288 E07FFFFF0000001FE01FFFFC0000001FE007FFF00000001FE001FF800000001FE0000000
9289 0000001FE00000000000001FE00000000000001FE00000000000001FE00000000000001F
9290 E00000000000001FE00000000000001FE00000000000001FE00000000000001FE0000000
9291 0000001FE00000000000001FE00000000000001FE00000000000001FE00000000000001F
9292 E00000000000001FE00000000000001FE00000000000001FE00000000000001FE0000000
9293 0000001FE00000000000001FE00000000000001FE00000000000001FE000000000003FFF
9294 FFF0000000007FFFFFF800000000FFFFFFFC00000000FFFFFFFC00000000FFFFFFFC0000
9295 0000FFFFFFFC000000007FFFFFF8000000003FFFFFF0000000003E5F7DBE48>I<00003F
9296 FF000F000003FFFFF01F80001FFFFFFC3F80007FFFFFFF3F8001FFFFFFFFFF8003FFFFFF
9297 FFFF8007FFFFFFFFFF800FFFFFFFFFFF801FFFE001FFFF803FFE00003FFF803FF000000F
9298 FF807FE0000003FF807FC0000001FF80FF80000001FF80FF80000000FF80FF00000000FF
9299 80FF000000007F80FF000000007F80FF000000007F80FF000000007F807F800000007F80
9300 7FC00000007F807FE00000003F003FF800000000001FFE00000000000FFFE00000000007
9301 FFFF8000000003FFFFFC00000001FFFFFFF00000007FFFFFFE0000001FFFFFFF80000007
9302 FFFFFFE00000007FFFFFF800000003FFFFFC000000001FFFFE00000000007FFF00000000
9303 000FFF800000000001FFC03E000000007FE07F000000003FE0FF000000001FF0FF000000
9304 000FF0FF800000000FF8FF8000000007F8FF8000000007F8FF8000000007F8FFC0000000
9305 07F8FFC000000007F8FFE000000007F8FFF00000000FF8FFF00000000FF0FFF80000001F
9306 F0FFFC0000003FF0FFFE0000007FE0FFFF800000FFE0FFFFE00007FFC0FFFFFC007FFF80
9307 FFFFFFFFFFFF80FF7FFFFFFFFF00FE3FFFFFFFFC00FE1FFFFFFFF800FE07FFFFFFE000FE
9308 01FFFFFF8000FC007FFFFE0000780007FFC00000354177BF48>115
9309 D<00000F800000000000001F800000000000003FC00000000000003FC00000000000003F
9310 C00000000000003FC00000000000003FC00000000000003FC00000000000003FC0000000
9311 0000003FC00000000000003FC00000000000003FC00000000000003FC00000000000003F
9312 C00000000000003FC00000000000003FC00000000000003FC0000000003FFFFFFFFFFFFC
9313 007FFFFFFFFFFFFC00FFFFFFFFFFFFFE00FFFFFFFFFFFFFE00FFFFFFFFFFFFFE00FFFFFF
9314 FFFFFFFE007FFFFFFFFFFFFC007FFFFFFFFFFFFC0000003FC00000000000003FC0000000
9315 0000003FC00000000000003FC00000000000003FC00000000000003FC00000000000003F
9316 C00000000000003FC00000000000003FC00000000000003FC00000000000003FC0000000
9317 0000003FC00000000000003FC00000000000003FC00000000000003FC00000000000003F
9318 C00000000000003FC00000000000003FC00000000000003FC00000000000003FC0000000
9319 0000003FC00000000000003FC00000000000003FC00000000000003FC00000000000003F
9320 C00000000000003FC00000000000003FC00000000000003FC00000000000003FC0000000
9321 0000003FC00000000000003FC000001F8000003FC000001F8000003FC000003FC000003F
9322 C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
9323 C000003FC000003FC000003FC000003FC000003FC000003FC000003FE000007FC000003F
9324 E000007F8000001FF00000FF8000001FF80001FF0000001FFC0007FF0000000FFF803FFE
9325 0000000FFFFFFFFC00000007FFFFFFF800000003FFFFFFF000000001FFFFFFE000000000
9326 FFFFFF80000000003FFFFE00000000001FFFF8000000000003FF8000003A507DCE48>I
9332 %%Feature: *Resolution 600dpi
9334 %%BeginPaperSize: a4
9335 /setpagedevice where
9336 { pop << /PageSize [595 842] >> setpagedevice }
9337 { /a4 where { pop a4 } if }
9343 TeXDict begin 1 0 bop 0 TeXcolorgray Black 0 TeXcolorgray
9344 0 TeXcolorgray 0 TeXcolorgray 1371 304 a Fe(pst-solides3d)45
9345 b Fd(:)1755 487 y(T)-11 b(est)1553 922 y Fc(Marc)m(h)33
9346 b(23,)f(2008)144 1280 y Fb(1)131 b(T)-11 b(est)44 b(sauv)l(egarde)g(en)
9347 g(\034c)l(hier)h(dat)f(a)l(v)l(ec)h(jps)p 0 TeXcolorgray
9348 0 TeXcolorgray 581 4464 a
9349 tx@Dict begin CM STV CP T newpath /a 0.0 def /w 312.98018 a add def /d 0.0 a add neg def /h 369.88567 a add def a neg d moveto a neg h L w h L w d L closepath clip newpath 0 0 moveto setmatrix end
9350 581 4464 a 1762 3520 a @beginspecial
9352 tx@Dict begin STP newpath 0.8 SLW 0 setgray 0. true -142.26372 -113.81097 170.71646 256.07469 .5 Frame gsave 0.8 SLW 0 setgray 0 setlinecap stroke grestore end
9353 @endspecial @beginspecial @setspecial
9354 tx@Dict begin STP newpath 0.8 SLW 0 setgray 1 setlinejoin /pst@fill { 1. .setopacityalpha fill } def /strokeopacity 1. def /fillopacity 1. def /xunit {28.45274 } def /decal -2 def /viewpointXYZ {50 -20 30} def /Decran 50 def /RotX 0 def /RotY 0 def /RotZ 0 def /hauteurlignedeniveau 0 def /linewidthlignedeniveau 1 def /fontsize {10 28.45274 mul 28.45 div } bind def /projectionsifacevisible true def /R 4 def /r1 4 def /r0 1.5 def /resolution 36 def /phi 0 def /theta 90 def /r 2 def /a 4 def /b a def /c a def /h 6 def /section {R h 2 div neg R h 2 div r h 2 div r h 2 div neg } def /base [ -1 -1 1 -1 0 1] def /axe { 0 0 1} def /function (f) def /definition { } def /args { } def /Mode 2 def /lightintensity 2 def /solidlinewidth {0.8 } def /linecolor {0 setgray } def /linestyle {solid} def /fillcolor {1 setgray currentrgbcolor} def /fillincolor {0 1 0 setrgbcolor currentrgbcolor} def /couleurlignedeniveau {0 1 0 setrgbcolor currentrgbcolor} def /color1 {1 0 0 0 setcmykcolor currentrgbcolor} def /color2 {0 1 0 0 setcmykcolor currentrgbcolor} def /color3 {0 0 1 setrgbcolor currentrgbcolor} def /color4 {1 0 0 setrgbcolor currentrgbcolor} def /range [ -5 5] def /action {draw**} def /lightsrc {10 0 10} def /rmfaces [] def /fcol [] def /solidhue [] def /solidinouthue [] def /solidinhue [] def /sommets [] def /faces [] def /solidshow [] def /solidnum [] def /solidnumf [] def /ngrid [] def /tracelignedeniveau? false def /solidgrid true def /solidhollow false def /solidbiface true def /viewpointXYZ {50 -20 30} def viewpointXYZ /PHI ED /THETA ED /Dobs ED /XpointVue {Dobs Cos1Cos2 mul} bind def /YpointVue {Dobs Sin1Cos2 mul} bind def /ZpointVue {Dobs Sin2 mul} bind def SolidesDict begin /CX 0 def /CY 0 def /CZ 0 def 3 newcube dup (jaune) outputcolors (cube) writesolidfile end gsave 0.8 SLW 0 setgray 0 setlinecap stroke grestore end
9357 currentpoint initclip moveto
9358 3180 4464 a 0 TeXcolorgray 1860 6074 a Fa(1)p
9359 0 TeXcolorgray eop end
9361 TeXDict begin 2 1 bop 0 TeXcolorgray 0 TeXcolorgray 0
9362 TeXcolorgray 144 -45 a Fb(2)131 b(T)-11 b(est)44 b(\351criture)i(de)d
9363 (\034c)l(hier)j(dat)d(en)h(PST)-11 b(ric)l(ks)p 0 TeXcolorgray
9364 0 TeXcolorgray 581 3117 a
9365 tx@Dict begin CM STV CP T newpath /a 0.0 def /w 312.98018 a add def /d 0.0 a add neg def /h 369.88567 a add def a neg d moveto a neg h L w h L w d L closepath clip newpath 0 0 moveto setmatrix end
9366 581 3117 a 1762 2172 a @beginspecial
9368 tx@Dict begin STP newpath 0.8 SLW 0 setgray 0. true -142.26372 -113.81097 170.71646 256.07469 .5 Frame gsave 0.8 SLW 0 setgray 0 setlinecap stroke grestore end
9369 @endspecial @beginspecial @setspecial
9370 tx@Dict begin STP newpath 0.8 SLW 0 setgray 1 setlinejoin /pst@fill { 1. .setopacityalpha fill } def /strokeopacity 1. def /fillopacity 1. def /xunit {28.45274 } def /decal -2 def /viewpointXYZ {50 -20 30} def /Decran 50 def /RotX 0 def /RotY 0 def /RotZ 0 def /hauteurlignedeniveau 0 def /linewidthlignedeniveau 1 def /fontsize {10 28.45274 mul 28.45 div } bind def /projectionsifacevisible true def /R 4 def /r1 4 def /r0 1.5 def /resolution 36 def /phi 0 def /theta 90 def /r 2 def /a 4 def /b a def /c a def /h 6 def /section {R h 2 div neg R h 2 div r h 2 div r h 2 div neg } def /base [ -1 -1 1 -1 0 1] def /axe { 0 0 1} def /function (f) def /definition { } def /args { } def /Mode 2 def /lightintensity 2 def /solidlinewidth {0.8 } def /linecolor {0 setgray } def /linestyle {solid} def /fillcolor {1 setgray currentrgbcolor} def /fillincolor {0 1 0 setrgbcolor currentrgbcolor} def /couleurlignedeniveau {0 1 0 setrgbcolor currentrgbcolor} def /color1 {1 0 0 0 setcmykcolor currentrgbcolor} def /color2 {0 1 0 0 setcmykcolor currentrgbcolor} def /color3 {0 0 1 setrgbcolor currentrgbcolor} def /color4 {1 0 0 setrgbcolor currentrgbcolor} def /range [ -5 5] def /action {writesolid} def /lightsrc {10 0 10} def /rmfaces [] def /solidfilename (test2) def /fcol [] def /solidhue [] def /solidinouthue [] def /solidinhue [] def /sommets [] def /faces [] def /solidshow [] def /solidnum [] def /solidnumf [] def /ngrid [] def /tracelignedeniveau? false def /solidgrid true def /solidhollow false def /solidbiface true def /viewpointXYZ {50 -20 30} def viewpointXYZ /PHI ED /THETA ED /Dobs ED /XpointVue {Dobs Cos1Cos2 mul} bind def /YpointVue {Dobs Sin1Cos2 mul} bind def /ZpointVue {Dobs Sin2 mul} bind def SolidesDict begin /CX 0 def /CY 0 def /CZ 0 def pst-cube end gsave 0.8 SLW 0 setgray 0 setlinecap stroke grestore end
9373 currentpoint initclip moveto
9374 3180 3117 a 0 TeXcolorgray 1860 6074 a Fa(2)p
9375 0 TeXcolorgray eop end
9378 userdict /end-hook known{end-hook}if