Water Applet Source Code
{Java2HtmlPlugin import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.awt.image.*; public class WaveApplet extends Applet implements Runnable { int width; int height; int oldMouseY; int size; int swap; Image image; class Surface { float[ h; public Surface(int size) { h = new floatsize; } }; float[] v; Surface[] b; float[] s;
public WaveApplet() { }
public void init() { width = this.getWidth(); height = this.getHeight(); size = width; v = new floatsize; b = new Surface[] {new Surface(size), new Surface(size)}; s = new floatsize;
this.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent arg0) { } public void mouseEntered(MouseEvent arg0) { oldMouseY = arg0.getY(); } public void mouseExited(MouseEvent arg0) { } public void mousePressed(MouseEvent arg0) { } public void mouseReleased(MouseEvent arg0) { }});
this.addMouseMotionListener(new MouseMotionListener() {
public void mouseDragged(MouseEvent arg0) { }
public void mouseMoved(MouseEvent arg0) { rotate(oldMouseY-arg0.getY()); oldMouseY = arg0.getY(); } }); this.requestFocus(); image = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
new Thread(this).start();
for (int i = 0; i < size; i++) { b[1].hi = 60; } for (int i = 0; i < size; i++) { b[2].hi = b[3].hi; }
for (int i = 0; i < size; i++) { si = (float) Math.sin((float)i*10/size)*(float)size/4+(float)size/3; } }
public void rotate(int v) { v=v*3; for (int i = 0; i < size; i++) { si+=v*((float)i-size/2)/size; } }
public void run() { while (true) { if (getGraphics() != null) { process(); paint(getGraphics()); } } }
private void process() { for (int j = 0; j < 2; j++) { Surface b0 = bswap; swap=(swap+1)%2; Surface b1 = bswap; float a = 0.05F; float b = 1F; float d = 0.003F; float g = 1F;
for (int i = 0; i < size-1; i++) {
if (b0.hi<0.1 && b0.hi+1<0.1) { vi = 0; continue; } // 1. Kräfte berechnen: Drücke float p0 = b0.hi+si; float pr = b0.hi+1+si+1;
// 2. Geschwindigkeiten aus Kräften bilden float dv = (p0-pr)*a;
// 3. Geschwindigkeiten aufsummieren vi += dv;
for (int i = 0; i < size; i++) { b1.hi = b0.hi; }
for (int i = 0; i < size-1; i++) { float dh = vi*b; b1.hi-=dh; b1.hi+1+=dh; } } }
public void paint(Graphics g) { Graphics vg = image.getGraphics(); vg.setColor(Color.BLACK); vg.fillRect(0, 0, width, height); int wd = width/size; Surface buffa = bswap; for (int i = 1; i < buffa.h.length-1; i++) { int y = (int) (buffa.hi+si); int y1 = (int) si; vg.setColor(Color.BLUE); vg.fillRect((i * wd), height-y, wd, y-y1); vg.setColor(Color.DARK_GRAY); vg.fillRect((i * wd), height-y1, wd, y1); } g.drawImage(image, 0, 0, width, height, this); }
} }]