// plot_4d.java plot up to 4d data, mouse select choice import java.io.*; import java.*; import java.awt.*; import java.awt.event.*; public class plot_4d extends Frame { // mouse and display variables int xm, ym, bm; // mouse position int height = 800; int width = 800; double xmin = 0.0; // scaled for plotting double xmax = 1.0; double ymin = 0.0; double ymax = 1.0; double zmin = 0.0; double zmax = 1.0; double tmin = 0.0; double tmax = 1.0; double umin = 0.0; double umax = 1.0; double dxmin, dxmax, dymin, dymax, dzmin, dzmax, dtmin, dtmax, dumin, dumax; double v1min = 0.0; // computed based on mouse click double v1max = 1.0; double v2min = 0.0; double v2max = 1.0; double v3min = 0.0; double v3max = 1.0; double v4min = 0.0; double v4max = 1.0; double xw, yh, xoff, yoff; int dim = 4; // should be read in int nn[] = new int[dim]; // nx, ny, nz, nt in var order int var1 = 0; // x=0, y=1, z=2, t=3 front axis mouse change int var2 = 1; // x=0, y=1, z=2, t=3 side axis int var3 = 2; // x=0, y=1, z=2, t=3 scan-run int var4 = 3; // x=0, y=1, z=2, t=3 other-run double v1, v2, v3, v4; int v3step = 1; int v4step = 1; int nx = 5; // computed based on data int ny = 5; int nz = 5; int nt = 5; int nv1 = 5; // nx, ny, nz, nt based on var1, var2, var3, var4 int nv2 = 5; int nv3 = 5; int nv4 = 5; int nxyzt = nx*ny*nz*nt; double pt[][]; // = new double[nxyzt][dim+1]; double ya = 0.5; // orthographic typ 0.2 to 0.7, must fix text double xs = (0.666*(width-100)); double ys = (0.666*(height-100)); int xp, yp; // for passing back ortho point boolean debug = true; int n_input; boolean run34 = false; public plot_4d() { System.out.println("plot_4d.java running."); setTitle("plot_4d x,y,z,t value u"); setSize(width,height); setBackground(Color.white); setForeground(Color.black); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); setVisible(true); this.addMouseListener (new mousePressHandler()); try { read_data(); nn[0] = nx; nn[1] = ny; nn[2] = nz; nn[3] = nt; nv1 = nn[var1]; nv2 = nn[var2]; nv3 = nn[var3]; nv4 = nn[var4]; v3step = nn[var3]-1; v4step = nn[var4]-1; } // end try catch(IOException exception) { System.out.println(exception); } repaint(); } // plot_4d constructor public class do_scan extends Thread // var1, var2, var3, var4, v3step, v4step can be changed { do_scan() { System.out.println("do_scan on var3="+var3+" with nv3="+nv3); System.out.println("do_scan on var4="+var4+" with nv4="+nv4); } public void run() { for(int iii=0; iii= "+nxyzt); lin = nxyzt-1; } return lin; } // end i4x // orthographic projection, sets xp,yp void ortho(double x, double y, double u) { double x1, y1, u1, x2, y2, x3, y3; x1 = (x-xmin)/(xmax-xmin); // zero base, normalized y1 = (y-ymin)/(ymax-ymin); u1 = (u-umin)/(umax-umin); // u-umin; x2 = x1+y1*ya; // ortho z is up, y is back y2 = u1+y1*ya; x3 = x2*xs; // scale y3 = y2*ys; x3 = x3+25; // away from boarder y3 = height-y3-25; // away from boarder xp = (int)x3; yp = (int)y3; //System.out.println("ortho xp="+xp+", yp="+yp); //System.out.println("x1="+x1+", y1="+y1+", u1="+u1); //System.out.println(" "); } // end ortho void set_color(int i, Graphics g) { if(i<0) {g.setColor(Color.black); return;} if(i>9) {g.setColor(Color.gray); return; } switch(i) { case 0: g.setColor(Color.black); break; case 1: g.setColor(Color.pink); break; // should be brown case 2: g.setColor(Color.red); break; case 3: g.setColor(Color.orange); break; case 4: g.setColor(Color.yellow); break; case 5: g.setColor(Color.green); break; case 6: g.setColor(Color.blue); break; case 7: g.setColor(Color.magenta); break; case 8: g.setColor(Color.cyan); break; case 9: g.setColor(Color.gray); break; } } // end set_color void rderiv(int order, int npts, int point, double h, double c[]) { nderiv D = new nderiv(); int a[] = new int[npts]; // basic discretization from nderiv int b[] = new int[1]; // out parameter, denominator D.deriv(order,npts,point,a,b); for(int i=0; i6) // exit on blank or short line { if(debug && n_input==0) System.out.println("input: "+input_line); len = input_line.length(); index = 0; // first x if(debug && n_input==0) System.out.println("index="+index); last = input_line.indexOf(' ',index+1); if(debug && n_input==0) System.out.println("last="+last); amount = Double.parseDouble(input_line.substring(index+1,last)); if(debug && n_input==0) System.out.println("amount="+amount); pt[n_input][0] = amount; index = input_line.indexOf(' ',last); // second y if(debug && n_input==0) System.out.println("index="+index); last = input_line.indexOf(' ',index+1); if(debug && n_input==0) System.out.println("last="+last); amount = Double.parseDouble(input_line.substring(index+1,last)); if(debug && n_input==0) System.out.println("amount="+amount); pt[n_input][1] = amount; index = input_line.indexOf(' ',last); // third z if(debug && n_input==0) System.out.println("index="+index); last = input_line.indexOf(' ',index+1); if(debug && n_input==0) System.out.println("last="+last); amount = Double.parseDouble(input_line.substring(index+1,last)); if(debug && n_input==0) System.out.println("amount="+amount); pt[n_input][2] = amount; index = input_line.indexOf(' ',last); // fourth t if(debug && n_input==0) System.out.println("index="+index); last = input_line.indexOf(' ',index+1); if(debug && n_input==0) System.out.println("last="+last); amount = Double.parseDouble(input_line.substring(index+1,last)); if(debug && n_input==0) System.out.println("amount="+amount); pt[n_input][3] = amount; index = input_line.indexOf(' ',last); // u if(debug && n_input==0) System.out.println("index="+index); last = input_line.indexOf(' ',index+1); if(last==-1) last = len; if(debug && n_input==0) System.out.println("last="+last); amount = Double.parseDouble(input_line.substring(index+1,last)); if(debug && n_input==0) System.out.println("amount="+amount); pt[n_input][4] = amount; if(n_input==0) { dxmin = pt[n_input][0]; dxmax = pt[n_input][0]; dymin = pt[n_input][1]; dymax = pt[n_input][1]; dzmin = pt[n_input][2]; dzmax = pt[n_input][2]; dtmin = pt[n_input][3]; dtmax = pt[n_input][3]; dumin = pt[n_input][4]; dumax = pt[n_input][4]; } else { dxmin = Math.min(dxmin,pt[n_input][0]); dxmax = Math.max(dxmax,pt[n_input][0]); dymin = Math.min(dymin,pt[n_input][1]); dymax = Math.max(dymax,pt[n_input][1]); dzmin = Math.min(dzmin,pt[n_input][2]); dzmax = Math.max(dzmax,pt[n_input][2]); dtmin = Math.min(dtmin,pt[n_input][3]); dtmax = Math.max(dtmax,pt[n_input][3]); dumin = Math.min(dumin,pt[n_input][4]); dumax = Math.max(dumax,pt[n_input][4]); } n_input++; if(n_input==nxyzt) break; input_line = in.readLine(); // done with this line, read next } // end while } // end try catch(IOException exception) { System.out.println(exception); } System.out.println("read_data finished, n_input="+n_input); System.out.println("xmin="+dxmin+", xmax="+dxmax+", last="+pt[nxyzt-1][0]); System.out.println("ymin="+dymin+", ymax="+dymax+", last="+pt[nxyzt-1][1]); System.out.println("zmin="+dzmin+", zmax="+dzmax+", last="+pt[nxyzt-1][2]); System.out.println("tmin="+dtmin+", tmax="+dtmax+", last="+pt[nxyzt-1][3]); System.out.println("umin="+dumin+", umax="+dumax+", last="+pt[nxyzt-1][4]); for(int i=0; i