sierpinski.java

来自「分形算法的Java程序」· Java 代码 · 共 63 行

JAVA
63
字号
//sierpinski垫片(分形频道:fractal.cn)2004
import java.applet.*;
import java.awt.*;

public class Sierpinski extends Applet {

    Graphics g;
    Point a1,b1,c1, a2,b2,c2, a3,b3,c3;

    int level = 0;

    public void init() {
        setBackground(new Color(255,255,255));//设置背景色为白色
    }
    
    //鼠标左键递归深度增加、鼠标右键递归深度减小
    public boolean mouseDown(Event ev, int x, int y) {
        if (!ev.metaDown()) level += 1;
        else if (level>0) level -= 1;
        repaint();
        return true;
    }


    public void paint(Graphics g) {

        // 设置初值
        int xCoords[] = {10, 390, 200};
        int yCoords[] = {390, 390, 10};
        g.drawPolygon(xCoords, yCoords, 3);

        drawTriangle(g, new Point(10,390),new Point(390,390),new Point(200,10), level);
    }

    //画三角形
    public void drawTriangle(Graphics g, Point a, Point b, Point c, int level) {

        if (level==0) return;

        level -= 1;

        int xCoords[] = {c.x, (c.x+b.x)/2, (a.x+c.x)/2};
        int yCoords[] = {b.y, (c.y+a.y)/2, (c.y+a.y)/2};

        g.drawPolygon(xCoords, yCoords, 3);

        // 3个递归三角形
        a1 = a;
        b1 = new Point(c.x, b.y);
        c1 = new Point((a.x+c.x)/2, (c.y+a.y)/2);
        drawTriangle(g, a1, b1, c1, level);

        a2 = new Point(c.x, b.y);
        b2 = b;
        c2 = new Point((c.x+b.x)/2, (c.y+a.y)/2);
        drawTriangle(g, a2, b2, c2, level);

        a3 = new Point((a.x+c.x)/2, (c.y+a.y)/2);
        b3 = new Point((c.x+b.x)/2, (c.y+a.y)/2);
        c3 = c;
        drawTriangle(g, a3, b3, c3, level);
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?