import java.awt.Graphics; public class c09_brownian extends java.applet.Applet { static final double s = 0.5; static final int level = 7; static final int left = 30; static final int w = 300; public void paint(Graphics g) { LineTo lt = new LineTo(g); brownian(lt, level, left, w+left, w/2+left, (1-s)*w+left); brownian(lt, level, w/2+left, (1-s)*w+left, w+left, w+left); } void brownian(LineTo lt, int level, double xleft, double yleft, double xright, double yright) { if (level <= 1) { //lt.drawLine((int)xleft, (int)yleft, (int)xright, (int)yright); for (int x = (int)xleft; x < (int)xright; x++) { double y = (yright*(x-xleft)+yleft*(xright-x))/(xright-xleft); lt.drawLine(x, left+w, x, (int)y); } return; } double nxleft = xleft; double nyleft = yleft; double nxright = (xleft+xright)/2; double d = s*20*Math.sqrt(nxright-nxleft); double r = Math.random() + Math.random() + Math.random() - 1.5; double nyright = (yleft+yright)/2 + r*d; brownian(lt, level-1, nxleft, nyleft, nxright, nyright); nxleft = nxright; nyleft = nyright; nxright = xright; nyright = yright; brownian(lt, level-1, nxleft, nyleft, nxright, nyright); } }