/*
Example of drawing pixel-by-pixel.
*/
import java.util.Random;
public class Stripes extends MISApplet {
	static Random rnd_ = new Random();
	Multispline fallOff_ = new Multispline();
	public Stripes() {
		fallOff_.Ts = new double[3];
		fallOff_.vals = new double[3][1];
		fallOff_.derivs = new double[3][1];
		fallOff_.Ts[0] = -0.5;
		fallOff_.Ts[1] = 0.0;
		fallOff_.Ts[2] = 0.5;
		fallOff_.derivs[0][0] = 
			fallOff_.derivs[1][0] = 
				fallOff_.derivs[2][0] = 0;
		fallOff_.vals[0][0] = 
			fallOff_.vals[2][0] = 0.0;
		fallOff_.vals[1][0] = 1.0;
		fallOff_.precalc();
	}
    public void initFrame(double time) { 
		double dt = time - lastt;
		System.out.println("dt "+dt);
		if(rb>2 || rb<-2) {
			rm = randM();
			rv = newV(rv);
			rb = Math.max(Math.min(rb,2.),-2.);
		}
		if(gb>2 || gb<-2) {
			gm = randM();
			gv = newV(gv);
			gb = Math.max(Math.min(gb,2.),-2.);
		}
		if(bb>2 || bb<-2) {
			bm = randM();
			bv = newV(bv);
			bb = Math.max(Math.min(bb,2.),-2.);
		}
		rb += dt*rv;
		bb += dt*bv;
		gb += dt*gv;
		lastt = time; 
    }
    public void setPixel(int x, int y, int rgb[]) { 
		double X = (x - W/2)/(double)H,
			Y = (H/2 - y)/(double)H;
		//System.out.println("Y "+Y+ " dy "+(Y - (rm*X+rb)));
		rgb[0] = value(Y - (rm*X+rb));
		rgb[1] = value(Y - (gm*X+gb));
		rgb[2] = value(Y - (bm*X+bb));
    }
    double 
    	rm = 0,rb = -10,rv = 0,
    	gm = 0,gb = -10,gv = 0,
    	bm = 0,bb = -10,bv = 0,
    	lastt;
    static double randM() {
		return rnd_.nextDouble()*2. - 1.;
	}
	static double newV(double last) {
		double ret = rnd_.nextDouble()*0.8+0.04;
		if(last>0)
			ret *=-1;
		return ret;
	}
	static double mm[] = new double[1]; // yuk
	int value(double dy) {
		fallOff_.calc(dy,mm);
		return (int)(mm[0]*255);
		/*
		double dy2 = Math.abs(dy);
		if(dy2>0.5)
			return 0;
		else return 255 - (int)(512.0*dy2);
		*/
	}
}
