plplot 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,371 @@
1
+ #!/usr/bin/env ruby
2
+ $-w = true if $0 == __FILE__
3
+
4
+ require 'rubygems'
5
+ require 'plplot'
6
+ include PLplot
7
+ include Math
8
+
9
+ # Contour plot demo.
10
+ #
11
+ # This file is part of PLplot.
12
+ #
13
+ # PLplot is free software; you can redistribute it and/or modify
14
+ # it under the terms of the GNU General Library Public License as published
15
+ # by the Free Software Foundation; either version 2 of the License, or
16
+ # (at your option) any later version.
17
+ #
18
+ # PLplot is distributed in the hope that it will be useful,
19
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ # GNU Library General Public License for more details.
22
+ #
23
+ # You should have received a copy of the GNU Library General Public License
24
+ # along with PLplot; if not, write to the Free Software
25
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
26
+
27
+
28
+ XPTS = 35 # Data points in x
29
+ YPTS = 46 # Data points in y
30
+
31
+ XSPA = 2.0/(XPTS-1)
32
+ YSPA = 2.0/(YPTS-1)
33
+
34
+ # polar plot data
35
+ PERIMETERPTS = 100
36
+ RPTS = 40
37
+ THETAPTS = 40
38
+
39
+ # potential plot data
40
+ PPERIMETERPTS = 100
41
+ PRPTS = 40
42
+ PTHETAPTS = 64
43
+ PNLEVEL = 20
44
+
45
+ CLEVEL = [-1.0, -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1.0]
46
+
47
+ # Makes transliteration from C example easier
48
+ def pow(a,b)
49
+ a ** b
50
+ end
51
+
52
+ # Transformation function
53
+
54
+ TR = [XSPA, 0.0, -1.0, 0.0, YSPA, -1.0]
55
+
56
+ def mypltr(x, y, tr)
57
+ tx = tr[0] * x.to_f + tr[1] * y.to_f + tr[2];
58
+ ty = tr[3] * x.to_f + tr[4] * y.to_f + tr[5];
59
+ [tx, ty]
60
+ end
61
+
62
+ # polar contour plot example.
63
+ def polar
64
+
65
+ plenv(-1.0, 1.0, -1.0, 1.0, 0, -2);
66
+ plcol0(1);
67
+
68
+ # Perimeter
69
+ px = []
70
+ py = []
71
+ PERIMETERPTS.times do |i|
72
+ t = (2.0*PI/(PERIMETERPTS-1.0))*i;
73
+ px[i] = cos(t);
74
+ py[i] = sin(t);
75
+ end
76
+ plline(px, py);
77
+
78
+ # create data to be contoured.
79
+ xg = NArray.float(THETAPTS, RPTS);
80
+ yg = NArray.float(THETAPTS, RPTS);
81
+ z = NArray.float(THETAPTS, RPTS);
82
+ nx = RPTS;
83
+ ny = THETAPTS;
84
+
85
+ RPTS.times do |i|
86
+ r = i.to_f/(RPTS-1);
87
+ THETAPTS.times do |j|
88
+ theta = (2.0*PI/(THETAPTS-1.0))*j;
89
+ xg[j,i] = r*cos(theta);
90
+ yg[j,i] = r*sin(theta);
91
+ z[j,i] = r;
92
+ end
93
+ end
94
+
95
+ lev = [];
96
+ 10.times do |i|
97
+ lev[i] = 0.05 + 0.10 * i;
98
+ end
99
+
100
+ plcol0(2);
101
+ plcont(z, nil, nil, lev, xg, yg)
102
+ plcol0(1);
103
+ pllab("", "", "Polar Contour Plot");
104
+ end
105
+
106
+ # shielded potential contour plot example.
107
+ def potential()
108
+ # create data to be contoured.
109
+ xg = NArray.float(PTHETAPTS, PRPTS);
110
+ yg = NArray.float(PTHETAPTS, PRPTS);
111
+ z = NArray.float(PTHETAPTS, PRPTS);
112
+ nx = PRPTS;
113
+ ny = PTHETAPTS;
114
+
115
+ PRPTS.times do |i|
116
+ r = 0.5 + i;
117
+ PTHETAPTS.times do |j|
118
+ theta = (2.0*PI/(PTHETAPTS-1.0))*(0.5 + j);
119
+ xg[j,i] = r*cos(theta);
120
+ yg[j,i] = r*sin(theta);
121
+ end
122
+ end
123
+
124
+ rmax = PRPTS;
125
+ xmin, xmax = plMinMax2dGrid(xg);
126
+ ymin, ymax = plMinMax2dGrid(yg);
127
+ x0 = (xmin + xmax)/2.0;
128
+ y0 = (ymin + ymax)/2.0;
129
+
130
+ # Expanded limits
131
+ peps = 0.05;
132
+ xpmin = xmin - xmin.abs*peps;
133
+ xpmax = xmax + xmax.abs*peps;
134
+ ypmin = ymin - ymin.abs*peps;
135
+ ypmax = ymax + ymax.abs*peps;
136
+
137
+ # Potential inside a conducting cylinder (or sphere) by method of images.
138
+ # Charge 1 is placed at (d1, d1), with image charge at (d2, d2).
139
+ # Charge 2 is placed at (d1, -d1), with image charge at (d2, -d2).
140
+ # Also put in smoothing term at small distances.
141
+
142
+ eps = 2.0;
143
+
144
+ q1 = 1.0;
145
+ d1 = rmax/4.0;
146
+
147
+ q1i = - q1*rmax/d1;
148
+ d1i = pow(rmax, 2.0)/d1;
149
+
150
+ q2 = -1.0;
151
+ d2 = rmax/4.0;
152
+
153
+ q2i = - q2*rmax/d2;
154
+ d2i = pow(rmax, 2.0)/d2;
155
+
156
+ PRPTS.times do |i|
157
+ PTHETAPTS.times do |j|
158
+ div1 = sqrt(pow(xg[j,i]-d1, 2.0) + pow(yg[j,i]-d1, 2.0) + pow(eps, 2.0));
159
+ div1i = sqrt(pow(xg[j,i]-d1i, 2.0) + pow(yg[j,i]-d1i, 2.0) + pow(eps, 2.0));
160
+ div2 = sqrt(pow(xg[j,i]-d2, 2.0) + pow(yg[j,i]+d2, 2.0) + pow(eps, 2.0));
161
+ div2i = sqrt(pow(xg[j,i]-d2i, 2.0) + pow(yg[j,i]+d2i, 2.0) + pow(eps, 2.0));
162
+ z[j,i] = q1/div1 + q1i/div1i + q2/div2 + q2i/div2i;
163
+ end
164
+ end
165
+ zmin, zmax = plMinMax2dGrid(z);
166
+ =begin
167
+ printf("%.15g %.15g %.15g %.15g %.15g %.15g %.15g %.15g \n",
168
+ q1, d1, q1i, d1i, q2, d2, q2i, d2i);
169
+ printf("%.15g %.15g %.15g %.15g %.15g %.15g \n",
170
+ xmin, xmax, ymin, ymax, zmin, zmax);
171
+ =end
172
+
173
+ # Positive and negative contour levels.
174
+ dz = (zmax-zmin)/PNLEVEL;
175
+ nlevelneg = 0;
176
+ nlevelpos = 0;
177
+ clevelneg = []
178
+ clevelpos = []
179
+ PNLEVEL.times do |i|
180
+ clevel = zmin + (i + 0.5)*dz;
181
+ if (clevel <= 0.0)
182
+ clevelneg[nlevelneg] = clevel;
183
+ nlevelneg += 1
184
+ else
185
+ clevelpos[nlevelpos] = clevel;
186
+ nlevelpos += 1
187
+ end
188
+ end
189
+ # Colours!
190
+ ncollin = 11;
191
+ ncolbox = 1;
192
+ ncollab = 2;
193
+
194
+ # Finally start plotting this page!
195
+ pladv(0);
196
+ plcol0(ncolbox);
197
+
198
+ plvpas(0.1, 0.9, 0.1, 0.9, 1.0);
199
+ plwind(xpmin, xpmax, ypmin, ypmax);
200
+ plbox("", 0.0, 0, "", 0.0, 0);
201
+
202
+ plcol0(ncollin);
203
+ if(nlevelneg > 0)
204
+ # Negative contours
205
+ pllsty(2);
206
+ plcont(z, nil, nil, clevelneg, xg, yg);
207
+ end
208
+
209
+ if(nlevelpos >0)
210
+ # Positive contours
211
+ pllsty(1);
212
+ plcont(z, nil, nil, clevelpos, xg, yg);
213
+ end
214
+
215
+ # Draw outer boundary
216
+ px = NArray.float(PPERIMETERPTS)
217
+ py = NArray.float(PPERIMETERPTS)
218
+ PPERIMETERPTS.times do |i|
219
+ t = (2.0*PI/(PPERIMETERPTS-1.0))*i;
220
+ px[i] = x0 + rmax*cos(t);
221
+ py[i] = y0 + rmax*sin(t);
222
+ end
223
+
224
+ plcol0(ncolbox);
225
+ plline(px, py);
226
+
227
+ plcol0(ncollab);
228
+ pllab("", "", "Shielded potential of charges in a conducting sphere");
229
+ end
230
+
231
+
232
+ #--------------------------------------------------------------------------
233
+ # Does several contour plots using different coordinate mappings.
234
+ #--------------------------------------------------------------------------
235
+
236
+ mark = 1500
237
+ space = 1500
238
+
239
+ # Parse and process command line arguments
240
+
241
+ PLOptionParser.parse!
242
+
243
+ # Initialize plplot
244
+
245
+ plinit();
246
+
247
+ # Set up function arrays
248
+
249
+ xg1 = NArray.float(XPTS)
250
+ yg1 = NArray.float(YPTS);
251
+ z = NArray.float(YPTS, XPTS);
252
+ w = NArray.float(YPTS, XPTS);
253
+
254
+ XPTS.times do |i|
255
+ xx = (i - (XPTS / 2.0)) / (XPTS / 2.0);
256
+ YPTS.times do |j|
257
+ yy = (j - (YPTS / 2.0)) / (YPTS / 2.0) - 1.0;
258
+ z[j,i] = xx * xx - yy * yy;
259
+ w[j,i] = 2 * xx * yy;
260
+ end
261
+ end
262
+
263
+ # Set up grids
264
+
265
+ xg = NArray.float(YPTS, XPTS)
266
+ yg = NArray.float(YPTS, XPTS);
267
+
268
+ XPTS.times do |i|
269
+ YPTS.times do |j|
270
+ xx, yy = mypltr(i, j, TR);
271
+
272
+ argx = xx * PI/2;
273
+ argy = yy * PI/2;
274
+ distort = 0.4;
275
+
276
+ xg1[i] = xx + distort * cos(argx);
277
+ yg1[j] = yy - distort * cos(argy);
278
+
279
+ xg[j,i] = xx + distort * cos(argx) * cos(argy);
280
+ yg[j,i] = yy - distort * cos(argx) * cos(argy);
281
+ end
282
+ end
283
+
284
+ # Plot using identity transform
285
+ =begin
286
+ plenv(-1.0, 1.0, -1.0, 1.0, 0, 0);
287
+ plcol0(2);
288
+ plcont(z, nil, nil, CLEVEL) {|x,y| mypltr(x,y,TR)}
289
+ plstyl(mark, space);
290
+ plcol0(3);
291
+ plcont(w, nil, nil, CLEVEL) {|x,y| mypltr(x,y,TR)}
292
+ plstyl
293
+ plcol0(1);
294
+ pllab("X Coordinate", "Y Coordinate", "Streamlines of flow");
295
+ =end
296
+ pl_setcontlabelformat(4,3);
297
+ pl_setcontlabelparam(0.006, 0.3, 0.1, 1);
298
+ plenv(-1.0, 1.0, -1.0, 1.0, 0, 0);
299
+ plcol0(2);
300
+ plcont(z, nil, nil, CLEVEL) {|x,y| mypltr(x,y,TR)}
301
+ plstyl(mark, space);
302
+ plcol0(3);
303
+ plcont(w, nil, nil, CLEVEL) {|x,y| mypltr(x,y,TR)}
304
+ plstyl
305
+ plcol0(1);
306
+ pllab("X Coordinate", "Y Coordinate", "Streamlines of flow");
307
+ pl_setcontlabelparam(0.006, 0.3, 0.1, 0);
308
+
309
+ # Plot using 1d coordinate transform
310
+
311
+ plenv(-1.0, 1.0, -1.0, 1.0, 0, 0);
312
+ plcol0(2);
313
+ plcont(z, nil, nil, CLEVEL, xg1, yg1)
314
+
315
+ plstyl(mark, space);
316
+ plcol0(3);
317
+ plcont(w, nil, nil, CLEVEL, xg1, yg1)
318
+ plstyl
319
+ plcol0(1);
320
+ pllab("X Coordinate", "Y Coordinate", "Streamlines of flow");
321
+ =begin
322
+ pl_setcontlabelparam(0.006, 0.3, 0.1, 1);
323
+ plenv(-1.0, 1.0, -1.0, 1.0, 0, 0);
324
+ plcol0(2);
325
+ plcont(z, nil, nil, CLEVEL, xg1, yg1)
326
+
327
+ plstyl(mark, space);
328
+ plcol0(3);
329
+ plcont(z, nil, nil, CLEVEL, xg1, yg1)
330
+ plstyl
331
+ plcol0(1);
332
+ pllab("X Coordinate", "Y Coordinate", "Streamlines of flow");
333
+ pl_setcontlabelparam(0.006, 0.3, 0.1, 0);
334
+ =end
335
+
336
+ # Plot using 2d coordinate transform
337
+
338
+ plenv(-1.0, 1.0, -1.0, 1.0, 0, 0);
339
+ plcol0(2);
340
+ plcont(z, nil, nil, CLEVEL, xg, yg)
341
+
342
+ plstyl(mark, space);
343
+ plcol0(3);
344
+ plcont(w, nil, nil, CLEVEL, xg, yg)
345
+ plstyl
346
+ plcol0(1);
347
+ pllab("X Coordinate", "Y Coordinate", "Streamlines of flow");
348
+ =begin
349
+ pl_setcontlabelparam(0.006, 0.3, 0.1, 1);
350
+ plenv(-1.0, 1.0, -1.0, 1.0, 0, 0);
351
+ plcol0(2);
352
+ plcont(z, nil, nil, CLEVEL, xg, yg)
353
+
354
+ plstyl(mark, space);
355
+ plcol0(3);
356
+ plcont(w, nil, nil, CLEVEL, xg, yg)
357
+ plstyl(
358
+ plcol0(1);
359
+ pllab("X Coordinate", "Y Coordinate", "Streamlines of flow");
360
+ =end
361
+ pl_setcontlabelparam(0.006, 0.3, 0.1, 0);
362
+ #pl_setcontlabelparam(0.006, 0.3, 0.1, 1);
363
+ polar();
364
+
365
+ pl_setcontlabelparam(0.006, 0.3, 0.1, 0);
366
+ #pl_setcontlabelparam(0.006, 0.3, 0.1, 1);
367
+ potential();
368
+
369
+ # Clean up
370
+
371
+ plend();
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ $-w = true if $0 == __FILE__
3
+
4
+ require 'rubygems'
5
+ require 'plplot'
6
+ include PLplot
7
+
8
+ # Window positioning demo.
9
+ #
10
+ # Demonstrates absolute positioning of graphs on a page.
11
+
12
+ # Parse and process command line arguments
13
+
14
+ PLOptionParser.parse!
15
+
16
+ # Initialize plplot
17
+
18
+ plinit
19
+
20
+ pladv(0)
21
+ plvpor(0.0, 1.0, 0.0, 1.0)
22
+ plwind(0.0, 1.0, 0.0, 1.0)
23
+ plbox("bc", 0.0, 0, "bc", 0.0, 0)
24
+
25
+ plsvpa(50.0, 150.0, 50.0, 100.0)
26
+ plwind(0.0, 1.0, 0.0, 1.0)
27
+ plbox("bc", 0.0, 0, "bc", 0.0, 0)
28
+ plptex(0.5, 0.5, 1.0, 0.0, 0.5, "BOX at (50,150,50,100)")
29
+ plend
@@ -0,0 +1,151 @@
1
+ #!/usr/bin/env ruby
2
+ $-w = true if $0 == __FILE__
3
+
4
+ require 'rubygems'
5
+ require 'plplot'
6
+ include PLplot
7
+ include Math
8
+
9
+ # Mesh plot demo.
10
+ #
11
+ # Copyright (C) 2004 Rafael Laboissiere
12
+ #
13
+ # This file is part of PLplot.
14
+ #
15
+ # PLplot is free software; you can redistribute it and/or modify
16
+ # it under the terms of the GNU General Library Public License as published
17
+ # by the Free Software Foundation; either version 2 of the License, or
18
+ # (at your option) any later version.
19
+ #
20
+ # PLplot is distributed in the hope that it will be useful,
21
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
22
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23
+ # GNU Library General Public License for more details.
24
+ #
25
+ # You should have received a copy of the GNU Library General Public License
26
+ # along with PLplot; if not, write to the Free Software
27
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
28
+
29
+ XPTS = 35 # Data points in x
30
+ YPTS = 46 # Data points in y
31
+ LEVELS = 10
32
+
33
+ opt = [ PL::DRAW_LINEXY, PL::DRAW_LINEXY ]
34
+
35
+ alt = [ 33.0, 17.0 ]
36
+ az = [ 24.0, 115.0 ]
37
+
38
+ title = [
39
+ "#frPLplot Example 11 - Alt=33, Az=24, Opt=3",
40
+ "#frPLplot Example 11 - Alt=17, Az=115, Opt=3",
41
+ ]
42
+
43
+ # Makes transliteration from C example easier
44
+ def pow(a,b)
45
+ a ** b
46
+ end
47
+
48
+ def cmap1_init()
49
+
50
+ i = [0.0, 1.0] # left, right boundaries
51
+
52
+ h = [240, 0] # blue -> green -> yellow -> red
53
+ l = [0.6, 0.6]
54
+ s = [0.8, 0.8]
55
+
56
+ plscmap1n( 256 )
57
+ plscmap1l(PL::CMAP_HLS, i, h, l, s)
58
+ end
59
+
60
+ #--------------------------------------------------------------------------
61
+ # Does a series of mesh plots for a given data set, with different
62
+ # viewing options in each plot.
63
+ #--------------------------------------------------------------------------
64
+
65
+ # Parse and process command line arguments
66
+
67
+ PLOptionParser.parse!
68
+
69
+ # Initialize plplot
70
+
71
+ plinit
72
+
73
+ # Could be done more tersely using NArray methods, but this is a closer
74
+ # transliteration from the C example.
75
+
76
+ x = NArray.float(XPTS)
77
+ y = NArray.float(YPTS)
78
+
79
+ z = NArray.float(YPTS, XPTS)
80
+
81
+ XPTS.times do |i|
82
+ x[i] = 3.0 * ( i - ( XPTS / 2.0 ) ) / ( XPTS / 2.0 )
83
+ end
84
+
85
+ YPTS.times do |i|
86
+ y[i] = 3.0 * ( i - ( YPTS / 2.0 ) ) / ( YPTS / 2.0 )
87
+ end
88
+
89
+ XPTS.times do |i|
90
+ xx = x[i]
91
+ YPTS.times do |j|
92
+ yy = y[j]
93
+ z[j,i] = 3.0 * ( 1.0 - xx ) * ( 1.0 - xx ) * exp( -( xx * xx ) - ( yy + 1.0 ) * ( yy + 1.0 ) ) -
94
+ 10.0 * ( xx / 5.0 - pow( xx, 3.0 ) - pow( yy, 5.0 ) ) * exp( -xx * xx - yy * yy ) -
95
+ 1.0 / 3.0 * exp( -( xx + 1 ) * ( xx + 1 ) - ( yy * yy ) )
96
+
97
+ if ( false ) # Jungfraujoch/Interlaken
98
+ if ( z[j,i] < -1.0 )
99
+ z[j,i] = -1.0
100
+ end
101
+ end
102
+ end
103
+ end
104
+
105
+ zmin, zmax = plMinMax2dGrid(z)
106
+ step = (zmax - zmin) / (LEVELS + 1)
107
+ clevel = []
108
+ LEVELS.times do |i|
109
+ clevel[i] = zmin + step + step * i
110
+ end
111
+
112
+ cmap1_init()
113
+ 2.times do |k|
114
+ 4.times do |i|
115
+ pladv( 0 )
116
+ plcol0( 1 )
117
+ plvpor( 0.0, 1.0, 0.0, 0.9 )
118
+ plwind( -1.0, 1.0, -1.0, 1.5 )
119
+ plw3d( 1.0, 1.0, 1.2, -3.0, 3.0, -3.0, 3.0, zmin, zmax, alt[k], az[k] )
120
+ plbox3( "bnstu", "x axis", 0.0, 0,
121
+ "bnstu", "y axis", 0.0, 0,
122
+ "bcdmnstuv", "z axis", 0.0, 4 )
123
+
124
+ plcol0( 2 )
125
+
126
+ # wireframe plot
127
+ if ( i == 0 )
128
+ plmesh( x, y, z, opt[k] )
129
+
130
+ # magnitude colored wireframe plot
131
+ elsif ( i == 1 )
132
+ plmesh( x, y, z, opt[k] | PL::MAG_COLOR )
133
+
134
+ # magnitude colored wireframe plot with sides
135
+ elsif ( i == 2 )
136
+ plot3d( x, y, z, opt[k] | PL::MAG_COLOR, 1 )
137
+
138
+ # magnitude colored wireframe plot with base contour
139
+ elsif ( i == 3 )
140
+ #plmeshc( x, y, z, opt[k] | PL::MAG_COLOR | PL::BASE_CONT, clevel )
141
+ #plmeshc( x, y, z, opt[k] | PL::MAG_COLOR | PL::SURF_CONT, clevel )
142
+ plmeshc( x, y, z, opt[k] | PL::MAG_COLOR | PL::TOP_CONT, clevel )
143
+ end
144
+
145
+ plcol0( 3 )
146
+ plmtex( "t", 1.0, 0.5, 0.5, title[k] )
147
+ end
148
+ end
149
+
150
+ # Clean up
151
+ plend