next up previous
Next: 3 スレッドの中断と再開 Up: 2 絵の表示 Previous: 2.3 Appletの例 CurveTest.html

2.4 CurveTest.java


// 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);
    }
}


generated through LaTeX2HTML. M.Inaba 平成18年5月7日