// CCurveTest.java import java.awt.*; import java.awt.geom.*; import java.applet.*; public class CurveTest extends Applet { double dist(double x0, double y0, double x1, double y1) { return( Math.sqrt((double) ((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0)))); } void line (Graphics g, int x0, int y0, int x1, int y1) { g.drawLine(x0,y0,x1,y1); } void CCurve (Graphics g, double x0, double y0, double x1, double y1, double minlen) { if (dist(x0,y0,x1,y1) < minlen) line(g, (int)x0,(int)y0, (int)x1,(int)y1); else { double x2= (x0 + y0 + x1 - y1) / 2.0; double y2= (-x0 + y0 + x1 + y1) / 2.0; CCurve(g, x0,y0, x2, y2, minlen); CCurve(g, x2,y2, x1, y1, minlen); } } void CCurve (Graphics g, Point2D p0, Point2D p1, int minlen) { CCurve(g, p0.getX(),p0.getY(), p1.getX(),p1.getY(),minlen); } void DragonCurve (Graphics g, double x0, double y0, double x1, double y1, double minlen) { if (dist(x0,y0,x1,y1) < minlen) line(g, (int)x0,(int)y0, (int)x1,(int)y1); else { double x2= (x0 + y0 + x1 - y1) / 2.0; double y2= (-x0 + y0 + x1 + y1) / 2.0; DragonCurve(g, x0,y0, x2, y2, minlen); DragonCurve(g, x1,y1, x2, y2, minlen); } } public void init() { setSize(600,850); } public void paint(Graphics g) { CCurve(g, 200, 100, 400, 100, 10); DragonCurve(g, 200, 400, 400, 400, 5); CCurve(g, new Point2D.Double(200.0,600.0), new Point2D.Double(400.0,600.0),5); } }