blob: 4bdeba0acade537f6405f854da118f73da3c7bdd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
|
%% $Id: pstricks-add.pro 49 2008-10-13 10:59:27Z herbert $
% PostScript prologue for pstricks-add.tex.
% Version 0.21, 2008/10/15
% For distribution, see pstricks.tex.
%
% HISTORY -> see file Changes
%
/tx@addDict 410 dict def tx@addDict begin
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/GTriangle {
gsave
/mtrx CM def
/colorA ED /colorB ED /colorC ED % save the colors
/yA ED /xA ED % save the origin
xA yA translate
rotate % \psk@gangle
/yB ED /xB ED /yC ED /xC ED % save other coordinates
/ds [ % save data in a array
0 0 0 colorA aload pop % fd x y xr xg xb
0 xB xA sub yB yA sub colorB aload pop
0 xC xA sub yC yA sub colorC aload pop
% 1 xC xB add yB colorA aload pop % for use with 4 points ABCD
] def
newpath
<<
/ShadingType 4 % single Gouraud
/ColorSpace [ /DeviceRGB ]
/DataSource ds
>>
shfill
closepath
mtrx
setmatrix grestore} def
%
/RGBtoCMYK { % on stack r g b -> C M Y K
3 dict begin
/Blue ED /Green ED /Red ED
1 Red sub % Cyan
1 Green sub % Magenta
1 Blue sub % Yellow
0 % Black
end
} def
%
/CMYKtoGRAY { % on stack c m y k -> gray
exch 0.11 mul add
exch 0.59 mul add
exch 0.3 mul add
dup 1 gt { pop 1 } if
neg 1 add
} def
%
/RGBtoGRAY { % on stack r g b -> gray
0.11 mul
exch 0.59 mul add
exch 0.3 mul add
} def
%
/HSBtoGRAY {
6 dict begin
/b exch def
/s exch def 6 mul dup cvi dup
/i exch def sub
/f exch def
/F [[0 1 f sub 1][f 0 1][1 0 1 f sub][1 f 0][1 f sub 1 0][0 1 f][0 1 1]] def
F i get { s mul neg 1 add b mul} forall
0.11 mul
exch 0.59 mul add
exch 0.3 mul add
end
} def
%
%% convertisseur longueur d'onde ->R,G,B Manuel Luque
%% lambda max=780 nanometres
%% lambda min=380 nanometres
%% adaptation de :
%% http://www.physics.sfasu.edu/astro/color.html
%% www.efg2.com/lab
%
/Gamma 0.8 def
/calculateRGB {
lambda 379 le {/Red 0 def /Green 0 def /Blue 0 def} if
lambda 781 ge {/Red 0 def /Green 0 def /Blue 0 def} if
lambda 380 ge {lambda 439 le {
/R {lambda 440 sub neg 440 380 sub div} def
/Red R factor mul Gamma exp def
/G 0 def
/Green G factor mul Gamma exp def
/B 1 def
/Blue B factor mul Gamma exp def} if
} if
lambda 440 ge { lambda 489 le {
/G {lambda 440 sub 490 440 sub div} def
/Green G factor mul Gamma exp def
/R 0 def /Red 0 def
/B 1 def
/Blue B factor mul Gamma exp def } if
} if
lambda 490 ge {lambda 509 le {
/B {lambda 510 sub neg 510 490 sub div} def
/Blue B factor mul Gamma exp def
/R 0 def /Red 0 def
/G 1 def
/Green G factor mul Gamma exp def } if
} if
lambda 510 ge {lambda 579 le {
/R {lambda 510 sub 580 510 sub div } def
/Red R factor mul Gamma exp def
/Blue 0 def
/G 1 def
/Green G factor mul Gamma exp def } if
} if
lambda 580 ge {lambda 644 le {
/G {lambda 645 sub neg 645 580 sub div } def
/Green G factor mul Gamma exp def
/Blue 0 def
/R 1 def
/Red R factor mul Gamma exp def } if
} if
lambda 645 ge { lambda 780 le {
/Red 1 factor mul Gamma exp def
/Blue 0 def
/Green 0 def } if
} if
} def
%
/factor {
lambda 380 ge {lambda 419 le { 0.3 0.7 lambda 380 sub mul 420 380 sub div add} if } if
lambda 420 ge {lambda 700 le { 1 } if } if
lambda 701 ge {lambda 780 le { 0.3 0.7 780 lambda sub mul 780 700 sub div add} if } if
} def
%
/wavelengthToRGB { % the wavelength in nm must be on top of the stack
cvi /lambda exch def % no floating point here
calculateRGB
} def % now the colors are saved in Red Green Blue
%
/wavelengthToCMYK { % the wavelength in nm must be on top of the stack
cvi /lambda exch def % no floating point here
gsave
calculateRGB Red Green Blue RGBtoCMYK
/Black ED /Yellow ED /Magenta ED /Cyan ED
grestore
} def % now the colors are saved in Cyan Magenta Yellow Black
%
/axfill {
8 dict begin
/xw exch def /nl exch def
/C1 exch def /y1 exch def/x1 exch def
/C0 exch def /y0 exch def/x0 exch def
<< /ShadingType 2
/ColorSpace /DeviceRGB
/Coords [ x0 y0 x1 y1 ]
/EmulatorHints [ xw 2 div dup ]
/Function <<
/FunctionType 2
/Domain [0 1]
/C0 C0
/C1 C1
/N 1
>>
>> shfill
end
} bind def
%
%%%%% ### bubblesort ###
%% syntax : array bubblesort --> array2 trie par ordre croissant
%% code de Bill Casselman
%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
/bubblesort {
4 dict begin
/a exch def
/n a length 1 sub def
n 0 gt {
% at this point only the n+1 items in the bottom of a remain to
% the sorted largest item in that blocks is to be moved up into
% position n
n {
0 1 n 1 sub {
/i exch def
a i get a i 1 add get gt {
% if a[i] > a[i+1] swap a[i] and a[i+1]
a i 1 add
a i get
a i a i 1 add get
% set new a[i] = old a[i+1]
put
% set new a[i+1] = old a[i]
put
} if
} for
/n n 1 sub def
} repeat
} if
a
end
} def
%
end
%
% END pstricks-add.pro
|