import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.lang.Math.*;

public class standing3 extends Applet implements Runnable {
    Thread th=null;
    float y1[] = new float[50];
    float y[] = new float[50];
    double t = 0;
    double scale=0.175;
    //一応波長が6cm。周波数が1秒のつもり。72dpiでscaleは計算。(あってない)
    //500Mhzの計算機だと50点が限界か?
    Graphics g;
    static int DOUBLENUM = 2;                  //GUIの変数の数をいれる。
    Gui_double []gui= new Gui_double[DOUBLENUM];

    public void init(){
        Button bt;
       	g=getGraphics();
        //ここにラベルと初期値をいれる。使う数だけ初期化する。
	gui[0]=new Gui_double("lambda 1<lambda<10cm","6",5);
	gui[1]=new Gui_double("freq. 1<nu<10Hz","1",5);
        //
        add(bt=new Button("Draw"));
        bt.addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent e){
               int i;
               for (i=0; i < DOUBLENUM ;i++){
                  gui[i].dval=new Double(gui[i].tf.getText()).doubleValue();
               }
               repaint();
           }
        });
    }
 
    public void start(){
        if (th==null){
            th=new Thread(this);
            th.start();
        }
    }

    public void run(){
        int i;double PI=3.1416;
        while(true){
           for(i=0;i<50;i++){
	       //data を作成 式は簡単なはず。                    
             y[i]=30.f*(float)Math.sin(2*PI*((double)i*scale/gui[0].dval-gui[1].dval*t*0.01));
             y1[i]=30.f*(float)Math.sin(2*PI*((double)i*scale/gui[0].dval+gui[1].dval*t*0.01));
            }
            t=t+1.;
            repaint();

            try {
                th.sleep(100);
            }
            catch (InterruptedException e){}
        }
    }
    class Gui_double{
        Label la;
        TextField tf;
        double dval;
        public Gui_double(String st1,String st2,int d_field){
            add(la=new Label(st1));
            add(tf=new TextField(st2,d_field));
        }
    }
    public void paint(Graphics g){
        int i,ix,iy,ix0,iy0;
        g.drawRect(0,60,500,400);
            for(i=1;i<50;i++){
                ix0=(i-1)*10;iy0=100-(int)y[i-1];
                ix=i*10;iy=100-(int)y[i];
                g.drawLine(ix0,iy0,ix,iy);
            }
            for(i=1;i<50;i++){
                ix0=(i-1)*10;iy0=200-(int)y1[i-1];
                ix=i*10;iy=200-(int)y1[i];
                g.drawLine(ix0,iy0,ix,iy);
            }
            for(i=1;i<50;i++){
                ix0=(i-1)*10;iy0=300-(int)(y[i-1]+y1[i-1]);
                ix=i*10;iy=300-(int)(y[i]+y1[i]);
                g.drawLine(ix0,iy0,ix,iy);
            } 

        /*      g.drawImage(img,x,y,this);*/
    }
    public void stop(){
        if (th!=null){
            th.stop();
            th=null;
        }
    }
}

