// stokes1.java Stokes wave simulation // Programed by H.Tasaka 1997/12/2/Tue import java.applet.Applet; import java.awt.*; import java.io.*; import java.net.URL; import java.util.StringTokenizer; public class stokes1 extends Applet { private Wave_Simulate1 wave_sim; private double v_inc_r=0.0,v_inc_the=5.0,v_inc_phi=0.0; final static int SIZE_X=300; final static int SIZE_Y=225; final static double RAD=Math.PI/180.; final static int MAX_FI=4; private Stokes_Wave stk_wave; private String datafile="stokes1.dat"; private Point prev; private double w_aa,w_amp[],w_lambda[],w_theta[],w_omega[]; private Label l_aa; private Label l_lambda [] = new Label[MAX_FI]; private Label l_theta [] = new Label[MAX_FI]; private Label l_omega [] = new Label[MAX_FI]; private Scrollbar s_aa; private Scrollbar s_lambda [] = new Scrollbar[MAX_FI]; private Scrollbar s_theta [] = new Scrollbar[MAX_FI]; private Scrollbar s_omega [] = new Scrollbar[MAX_FI]; private Panel subPanel = new Panel(); private Button b_reset; final static void gbcon(GridBagLayout gridbag, GridBagConstraints c, Component cp, Panel p) { gridbag.setConstraints(cp, c); p.add(cp); } public void init(){ resize(340,470); setBackground(Color.gray); w_amp = new double[MAX_FI]; w_lambda = new double[MAX_FI]; w_theta = new double[MAX_FI]; w_omega = new double[MAX_FI]; stk_wave = new Stokes_Wave(); read_stokes(); wave_sim = new Wave_Simulate1(stk_wave); wave_sim.resize(SIZE_X,SIZE_Y); add(wave_sim); GridBagLayout gridbag = new GridBagLayout(); subPanel.setLayout(gridbag); GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.CENTER; c.weightx = 1.0; c.ipady = 0; c.gridwidth = 2; gbcon(gridbag, c, new Label("lambda"), subPanel); c.gridwidth = GridBagConstraints.REMAINDER; gbcon(gridbag, c, new Label("theta"), subPanel); Insets insets1 = new Insets(0, 3, 0, 0); Insets insets2 = new Insets(0, 0, 0, 3); for(int i=0;i= 360.) viewp_the=0.0; else if(viewp_the < 0.0) viewp_the=360.0; if(viewp_phi >= 360.) viewp_phi=0.0; else if(viewp_phi < 0.0) viewp_phi=360.0; } public void start(){ if(kick == null){ doubleBuffer = createImage(SIZE_X,SIZE_Y); myGC = doubleBuffer.getGraphics(); kick = new Thread(this); kick.start(); } } public void stop(){ if(kick != null){ kick.stop(); kick = null; } } public void update(Graphics g){ g.drawImage(doubleBuffer,0,0,this); } public void paint(Graphics g){ update(g); } public void run(){ int zmin[],zmax[]; int continue_e,rcol; double a,x,y,z,stp_x,stp_y,rng,ox,oy,oz,cmax,cmin; zmin = new int[SIZE_X]; zmax = new int[SIZE_X]; myGC.setColor(Color.black); myGC.fillRect(0,0,SIZE_X,SIZE_Y); setscrn_size(); a=viewp_the*RD;sth=Math.sin(a);cth=Math.cos(a); a=viewp_phi*RD;cfi=Math.cos(a);sfi=Math.sin(a); write_marking(); continue_e = 500; stp_x=(wv_xmax-wv_xmin)/20.; stp_y=(wv_ymax-wv_ymin)/50.; for (int continue_n=0;continue_ncmax) cmax=z; if(z= viewp_dwnx)) out0_g=1; if ((dvy_g < 0) || (dvy_g >= viewp_dwny)) out0_g=1; } private void write_marking(){ double memr_x,memr_y,memr_z; int col_r,col_g,col_b,isw; if(mark_sw > 0){ if(mark_sw == 1) isw = 1; else isw = 3; memr_z=0.0; for(int i=0;i 0) { usline3d(mark_xmin,0.0,0.0,0.0,0.0,0.0,155,0,0); usline3d(0.0,0.0,0.0,mark_xmax,0.0,0.0,255,100,100); usline3d(0.0,mark_ymin,0.0,0.0,0.0,0.0,0,100,0); usline3d(0.0,0.0,0.0,0.0,mark_ymax,0.0,100,255,100); usline3d(0.0,0.0,mark_zmin,0.0,0.0,0.0,100,100,0); usline3d(0.0,0.0,0.0,0.0,0.0,mark_zmax,255,255,100); } myGC.setColor(Color.white); turntrs(mark_xmin,0.0,0.0);convert(); myGC.drawString("-x",dvx_g,SIZE_Y-dvy_g); turntrs(mark_xmax,0.0,0.0);convert(); myGC.drawString("+x",dvx_g,SIZE_Y-dvy_g); turntrs(0.0,mark_ymin,0.0);convert(); myGC.drawString("-y",dvx_g,SIZE_Y-dvy_g); turntrs(0.0,mark_ymax,0.0);convert(); myGC.drawString("+y",dvx_g,SIZE_Y-dvy_g); turntrs(0.0,0.0,mark_zmin);convert(); myGC.drawString("-z",dvx_g,SIZE_Y-dvy_g); turntrs(0.0,0.0,mark_zmax);convert(); myGC.drawString("+z",dvx_g,SIZE_Y-dvy_g); } } class Stokes_Wave{ private double sta[][],fk[],fa[],fl[],fm[],fw[]; private double aa; final static double RAD=Math.PI/180.; private int fi; Stokes_Wave(){ sta=new double[10][4]; fk=new double[10];fa=new double[10];fl=new double[10]; fm=new double[10];fw=new double[10]; } public void set_fi_aa(int i,double a){ fi = i;aa=a; } public void set_rad(int i,double amp,double lambda,double theta, double omega){ double k; k = (2.0*Math.PI)/lambda; fk[i]=k;fa[i]=amp;fl[i]=k*Math.cos(theta*RAD); fm[i]=k*Math.sin(theta*RAD);fw[i]=RAD*omega; } public void set_end(){ double a,b,c; for(int i=0;i