public x16(String[] args) { int i, j; double x, y, argx, argy, distort, r, t, zmin, zmax; double[] px = new double[PERIMETERPTS]; double[] py = new double[PERIMETERPTS]; double[][] xg0 = new double[XPTS][YPTS]; double[][] yg0 = new double[XPTS][YPTS]; double[][] xg1 = new double[XPTS][YPTS]; double[][] yg1 = new double[XPTS][YPTS]; double[][] z = new double[XPTS][YPTS]; double[][] w = new double[XPTS][YPTS]; double[][] xg2 = new double[XPTS][YPTS]; double[][] yg2 = new double[XPTS][YPTS]; double[] clevel = new double[NSHADES]; double[] shedge = new double[NSHADES + 1]; final int cont_color = 0; final double fill_width = 2., cont_width = 0.; double[] colorbar_width = new double[1]; double[] colorbar_height = new double[1]; int[] num_values = new int[NUM_AXES]; double[][] values = new double[NUM_AXES][NSHADES + 1]; String axis_opts[] = {"bcvtm"}; double axis_ticks[] = {0.0}; int axis_subticks[] = {0}; int label_opts[] = {PL_COLORBAR_LABEL_BOTTOM}; String labels[] = {"Magnitude"}; // Parse and process command line arguments. pls.parseopts(args, PL_PARSE_FULL | PL_PARSE_NOPROGRAM); // Load colour palettes pls.spal0("cmap0_black_on_white.pal"); pls.spal1("cmap1_gray.pal", true); // Reduce colors in cmap 0 so that cmap 1 is useful on a // 16-color display pls.scmap0n(3); // Initialize plplot pls.init(); // Set up data array for (i = 0; i < XPTS; i++) { x = (double) (i - (XPTS / 2)) / (double) (XPTS / 2); for (j = 0; j < YPTS; j++) { y = (double) (j - (YPTS / 2)) / (double) (YPTS / 2) - 1.0; z[i][j] = -Math.sin(7. * x) * Math.cos(7. * y) + x * x - y * y; w[i][j] = -Math.cos(7. * x) * Math.sin(7. * y) + 2 * x * y; } } f2mnmx(z, XPTS, YPTS); zmin = fmin; zmax = fmax; for (i = 0; i < NSHADES; i++) clevel[i] = zmin + (zmax - zmin) * (i + 0.5) / NSHADES; for (i = 0; i < NSHADES + 1; i++) shedge[i] = zmin + (zmax - zmin) * i / NSHADES; for (i = 0; i < XPTS; i++) { for (j = 0; j < YPTS; j++) { // Replacement for mypltr of x16c.c x = tr[0] * i + tr[1] * j + tr[2]; y = tr[3] * i + tr[4] * j + tr[5]; argx = x * Math.PI / 2; argy = y * Math.PI / 2; distort = 0.4; // Note xg0 ==> yg1 are one-dimensional because of arrangement of // zeros in the final tr definition above. However, for now // we are using raw interface here so must nominally treat them // as two-dimensional. xg0[i][j] = x; yg0[i][j] = y; xg1[i][j] = x + distort * Math.cos(argx); yg1[i][j] = y - distort * Math.cos(argy); xg2[i][j] = x + distort * Math.cos(argx) * Math.cos(argy); yg2[i][j] = y - distort * Math.cos(argx) * Math.cos(argy); } } // Plot using identity transform pls.adv(0); pls.vpor(0.1, 0.9, 0.1, 0.9); pls.wind(-1.0, 1.0, -1.0, 1.0); pls.psty(0); pls.shades(z, -1., 1., -1., 1., shedge, fill_width, cont_color, cont_width, true, xg0, yg0); // Smaller text pls.schr(0.0, 0.75); // Small ticks on the vertical axis pls.smaj(0.0, 0.5); pls.smin(0.0, 0.5); num_values[0] = NSHADES + 1; for (i = 0; i < NSHADES + 1; i++) { values[0][i] = shedge[i]; } pls.colorbar( colorbar_width, colorbar_height, PL_COLORBAR_SHADE | PL_COLORBAR_SHADE_LABEL, 0, 0.005, 0.0, 0.0375, 0.875, 0, 1, 1, 0.0, 0.0, cont_color, cont_width, label_opts, labels, axis_opts, axis_ticks, axis_subticks, num_values, values); // Reset text and tick sizes pls.schr(0.0, 1.0); pls.smaj(0.0, 1.0); pls.smin(0.0, 1.0); pls.col0(1); pls.box("bcnst", 0.0, 0, "bcnstv", 0.0, 0); pls.col0(2); pls.lab("distance", "altitude", "Bogon density"); // Plot using 1d coordinate transform // Load colour palettes pls.spal0("cmap0_black_on_white.pal"); pls.spal1("cmap1_blue_yellow.pal", true); // Reduce colors in cmap 0 so that cmap 1 is useful on a // 16-color display pls.scmap0n(3); pls.adv(0); pls.vpor(0.1, 0.9, 0.1, 0.9); pls.wind(-1.0, 1.0, -1.0, 1.0); pls.psty(0); pls.shades(z, -1., 1., -1., 1., shedge, fill_width, cont_color, cont_width, true, xg1, yg1); // Smaller text pls.schr(0.0, 0.75); // Small ticks on the vertical axis pls.smaj(0.0, 0.5); pls.smin(0.0, 0.5); num_values[0] = NSHADES + 1; for (i = 0; i < NSHADES + 1; i++) { values[0][i] = shedge[i]; } pls.colorbar( colorbar_width, colorbar_height, PL_COLORBAR_SHADE | PL_COLORBAR_SHADE_LABEL, 0, 0.005, 0.0, 0.0375, 0.875, 0, 1, 1, 0.0, 0.0, cont_color, cont_width, label_opts, labels, axis_opts, axis_ticks, axis_subticks, num_values, values); // Reset text and tick sizes pls.schr(0.0, 1.0); pls.smaj(0.0, 1.0); pls.smin(0.0, 1.0); pls.col0(1); pls.box("bcnst", 0.0, 0, "bcnstv", 0.0, 0); pls.col0(2); pls.lab("distance", "altitude", "Bogon density"); // Plot using 2d coordinate transform // Load colour palettes pls.spal0("cmap0_black_on_white.pal"); pls.spal1("cmap1_blue_red.pal", true); // Reduce colors in cmap 0 so that cmap 1 is useful on a // 16-color display pls.scmap0n(3); pls.adv(0); pls.vpor(0.1, 0.9, 0.1, 0.9); pls.wind(-1.0, 1.0, -1.0, 1.0); pls.psty(0); pls.shades(z, -1., 1., -1., 1., shedge, fill_width, cont_color, cont_width, false, xg2, yg2); // Smaller text pls.schr(0.0, 0.75); // Small ticks on the vertical axis pls.smaj(0.0, 0.5); pls.smin(0.0, 0.5); num_values[0] = NSHADES + 1; for (i = 0; i < NSHADES + 1; i++) { values[0][i] = shedge[i]; } pls.colorbar( colorbar_width, colorbar_height, PL_COLORBAR_SHADE | PL_COLORBAR_SHADE_LABEL, 0, 0.005, 0.0, 0.0375, 0.875, 0, 1, 1, 0.0, 0.0, cont_color, cont_width, label_opts, labels, axis_opts, axis_ticks, axis_subticks, num_values, values); // Reset text and tick sizes pls.schr(0.0, 1.0); pls.smaj(0.0, 1.0); pls.smin(0.0, 1.0); pls.col0(1); pls.box("bcnst", 0.0, 0, "bcnstv", 0.0, 0); pls.col0(2); pls.cont(w, 1, XPTS, 1, YPTS, clevel, xg2, yg2); pls.lab("distance", "altitude", "Bogon density, with streamlines"); // Plot using 2d coordinate transform // Load colour palettes pls.spal0(""); pls.spal1("", true); // Reduce colors in cmap 0 so that cmap 1 is useful on a // 16-color display pls.scmap0n(3); pls.adv(0); pls.vpor(0.1, 0.9, 0.1, 0.9); pls.wind(-1.0, 1.0, -1.0, 1.0); pls.psty(0); pls.shades(z, -1., 1., -1., 1., shedge, fill_width, 2, 3., false, xg2, yg2); // Smaller text pls.schr(0.0, 0.75); // Small ticks on the vertical axis pls.smaj(0.0, 0.5); pls.smin(0.0, 0.5); num_values[0] = NSHADES + 1; for (i = 0; i < NSHADES + 1; i++) { values[0][i] = shedge[i]; } pls.colorbar( colorbar_width, colorbar_height, PL_COLORBAR_SHADE | PL_COLORBAR_SHADE_LABEL, 0, 0.005, 0.0, 0.0375, 0.875, 0, 1, 1, 0.0, 0.0, 2, 3.0, label_opts, labels, axis_opts, axis_ticks, axis_subticks, num_values, values); // Reset text and tick sizes pls.schr(0.0, 1.0); pls.smaj(0.0, 1.0); pls.smin(0.0, 1.0); pls.col0(1); pls.box("bcnst", 0.0, 0, "bcnstv", 0.0, 0); pls.col0(2); pls.lab("distance", "altitude", "Bogon density"); // Note this exclusion API will probably change so don't bother // with it for x16.java example. // Example with polar coordinates. // Load colour palettes pls.spal0("cmap0_black_on_white.pal"); pls.spal1("cmap1_gray.pal", true); // Reduce colors in cmap 0 so that cmap 1 is useful on a // 16-color display pls.scmap0n(3); pls.adv(0); pls.vpor(.1, .9, .1, .9); pls.wind(-1., 1., -1., 1.); pls.psty(0); // Build new coordinate matrices. for (i = 0; i < XPTS; i++) { r = ((double) i) / (XPTS - 1); for (j = 0; j < YPTS; j++) { t = (2. * Math.PI / (YPTS - 1.)) * j; xg2[i][j] = r * Math.cos(t); yg2[i][j] = r * Math.sin(t); z[i][j] = Math.exp(-r * r) * Math.cos(5. * Math.PI * r) * Math.cos(5. * t); } } // Need a new shedge to go along with the new data set. f2mnmx(z, XPTS, YPTS); zmin = fmin; zmax = fmax; for (i = 0; i < NSHADES + 1; i++) shedge[i] = zmin + (zmax - zmin) * i / NSHADES; pls.shades(z, -1., 1., -1., 1., shedge, fill_width, cont_color, cont_width, false, xg2, yg2); // Smaller text pls.schr(0.0, 0.75); // Small ticks on the vertical axis pls.smaj(0.0, 0.5); pls.smin(0.0, 0.5); num_values[0] = NSHADES + 1; for (i = 0; i < NSHADES + 1; i++) { values[0][i] = shedge[i]; } pls.colorbar( colorbar_width, colorbar_height, PL_COLORBAR_SHADE | PL_COLORBAR_SHADE_LABEL, 0, 0.005, 0.0, 0.0375, 0.875, 0, 1, 1, 0.0, 0.0, cont_color, cont_width, label_opts, labels, axis_opts, axis_ticks, axis_subticks, num_values, values); // Reset text and tick sizes pls.schr(0.0, 1.0); pls.smaj(0.0, 1.0); pls.smin(0.0, 1.0); // Now we can draw the perimeter. (If do before, shade stuff may overlap.) for (i = 0; i < PERIMETERPTS; i++) { t = (2. * Math.PI / (PERIMETERPTS - 1)) * i; px[i] = Math.cos(t); py[i] = Math.sin(t); } pls.col0(1); pls.line(px, py); // And label the plot. pls.col0(2); pls.lab("", "", "Tokamak Bogon Instability"); // Clean up pls.end(); }
public x11(String[] args) { int i, j, k; double[] x = new double[XPTS]; double[] y = new double[YPTS]; double[][] z = new double[XPTS][YPTS]; double zmin = Double.MAX_VALUE, zmax = Double.MIN_VALUE; double xx, yy; int nlevel = LEVELS; double[] clevel = new double[LEVELS]; double step; // Parse and process command line arguments. pls.parseopts(args, PL_PARSE_FULL | PL_PARSE_NOPROGRAM); // Initialize plplot. pls.init(); for (i = 0; i < XPTS; i++) x[i] = 3. * (i - (XPTS / 2)) / (XPTS / 2); for (j = 0; j < YPTS; j++) y[j] = 3. * (j - (YPTS / 2)) / (YPTS / 2); for (i = 0; i < XPTS; i++) { xx = x[i]; for (j = 0; j < YPTS; j++) { yy = y[j]; z[i][j] = 3. * (1. - xx) * (1. - xx) * Math.exp(-(xx * xx) - (yy + 1.) * (yy + 1.)) - 10. * (xx / 5. - Math.pow(xx, 3.) - Math.pow(yy, 5.)) * Math.exp(-xx * xx - yy * yy) - 1. / 3. * Math.exp(-(xx + 1) * (xx + 1) - (yy * yy)); // if ( false ) // Jungfraujoch/Interlaken // { // if ( z[i][j] < -1. ) // z[i][j] = -1.; // } if (zmin > z[i][j]) zmin = z[i][j]; if (zmax < z[i][j]) zmax = z[i][j]; } } step = (zmax - zmin) / (nlevel + 1); for (i = 0; i < nlevel; i++) clevel[i] = zmin + step + step * i; cmap1_init(); for (k = 0; k < 2; k++) { for (i = 0; i < 4; i++) { pls.adv(0); pls.col0(1); pls.vpor(0.0, 1.0, 0.0, 0.9); pls.wind(-1.0, 1.0, -1.0, 1.5); pls.w3d(1.0, 1.0, 1.2, -3.0, 3.0, -3.0, 3.0, zmin, zmax, alt[k], az[k]); pls.box3( "bnstu", "x axis", 0.0, 0, "bnstu", "y axis", 0.0, 0, "bcdmnstuv", "z axis", 0.0, 4); pls.col0(2); // wireframe plot if (i == 0) pls.mesh(x, y, z, opt[k]); // magnitude colored wireframe plot else if (i == 1) pls.mesh(x, y, z, opt[k] | MAG_COLOR); // magnitude colored wireframe plot with sides else if (i == 2) pls.plot3d(x, y, z, opt[k] | MAG_COLOR, true); // magnitude colored wireframe plot with base contour else if (i == 3) pls.meshc(x, y, z, opt[k] | MAG_COLOR | BASE_CONT, clevel); pls.col0(3); pls.mtex("t", 1.0, 0.5, 0.5, title[k]); } } pls.end(); }