//
// JavaLine.java
// (c) Neil Gershenfeld  2/6/03
// demonstrates Java by animating sin(k*x)/k*x
//

import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

public class JavaLine extends JApplet implements Runnable {
	Thread T;
	final int NPTS = 500;
	final int NSTEPS = 100;
	int point,step;
	int x[] = new int[NPTS];
	int y[] = new int[NPTS];
	
	class LinePanel extends JPanel {
		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			super.setBackground(Color.white);
			Graphics2D g2d = (Graphics2D) g;
			GeneralPath path = new GeneralPath(GeneralPath.WIND_EVEN_ODD,NPTS);
			path.moveTo(x[0],y[0]);
			for (point = 1; point < (NPTS-1); ++point) {
				path.lineTo(x[point],y[point]);
			}
			g2d.draw(path);  
		}
	}
	
	public void init() {
		Container C = getContentPane();
		C.add(new LinePanel());
	}
	
	public void start() {
		if (T == null) {
			T = new Thread(this);
			T.start();
		}
	}
	
	public void stop() {
		if (T != null) {
			T = null;
		}
	}
	
	public void run() {
		double r;
		while (true) {
			for (step = 1; step < NSTEPS; ++step) {
				for (point = 0; point < (NPTS-1); ++point) {
					r = 100 * (step*(point+0.5-NPTS/2))/(NPTS*NSTEPS);
					x[point] = point;
					y[point] = (int) ((NPTS/2) - (NPTS/2)*Math.sin(r)/r);
				}
				repaint();
				try {Thread.sleep(10);}
				catch (InterruptedException e) { }
			}
		}
	}
}