dh-Materialien
Java Projekte
// JavaProject SierpinskiTriangle

// SierpinskiTriangle.java

import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;


class Canvas extends JPanel {
    private static final long serialVersionUID = 0L;

    int n = 0; // Rekursionstiefe

    Graphics2D g2d;
    BasicStroke stroke = new BasicStroke(0.5f);
    Point2D.Double A, B, C;

    public Canvas() {
        setBounds(3, 19, 256, 256);
    }

    private void defineRendering(Graphics2D g) {
        RenderingHints rh;
        rh = new RenderingHints (
            RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON
        );
        g.setRenderingHints(rh);
    }

    Point2D.Double calculateMidpoint(Point2D A, Point2D B) {
        double xnew = 0.5*(A.getX() + B.getX());
        double ynew = 0.5*(A.getY() + B.getY());
        return new Point2D.Double(xnew, ynew);
    }

    private void showSierpinskiTriangle(int n) {
        double h = 128*Math.sqrt(3);
        A = new Point2D.Double(0, h);
        B = new Point2D.Double(256, h);
        C = new Point2D.Double(128, 0);
        hitTriangle(A, B, C, n);
    }

    private void hitTriangle(Point2D A, Point2D B, Point2D C, int n) {
        if (n == 0) {
            drawTriangle(A, B, C);
            return;
        }
        Point2D.Double Mc = calculateMidpoint(A, B);
        Point2D.Double Mb = calculateMidpoint(A, C);
        Point2D.Double Ma = calculateMidpoint(B, C);
        hitTriangle(Mb, Ma, C, n-1);
        hitTriangle(Mc, B, Ma, n-1);
        hitTriangle(A, Mc, Mb, n-1);
    }

    private void drawTriangle(Point2D A, Point2D B, Point2D C) {
        Polygon triangle = new Polygon();
        triangle.addPoint((int) A.getX(), (int) A.getY());
        triangle.addPoint((int) B.getX(), (int) B.getY());
        triangle.addPoint((int) C.getX(), (int) C.getY());
        g2d.fillPolygon(triangle);
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g2d = (Graphics2D) g.create();
        defineRendering(g2d);
        g2d.setPaint(Color.GRAY);
        g2d.setStroke(stroke);

        g2d.setPaint(Color.DARK_GRAY);
        showSierpinskiTriangle(n);
        g2d.dispose();
    }
}


class CFrame extends JFrame {
    private static final long serialVersionUID = 0L;

    Image icon;

    Canvas canvas;
    BContainer container;

    public CFrame() {
        setTitle("Sierpiński-Dreieck");
        icon = Toolkit.getDefaultToolkit().getImage("dh.png");
        setIconImage(icon);
        setSize(349, 301);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setLayout(null);

        canvas = new Canvas();
        add(canvas);

        container = new BContainer(canvas);
        add(container);

        setVisible(true);
    }
}


public class SierpinskiTriangle {

    public static void main(String[] args) {
        new CFrame();
    }
}



// BContainer.java

import java.awt.*;
import java.awt.event.*;
import java.awt.Container;
import java.awt.event.ActionEvent;

import javax.swing.*;


class Button extends JButton {
    private static final long serialVersionUID = 0L;

    public Button(String txt) {
        setText(txt);
    }
}

public class BContainer extends Container implements ActionListener {
    private static final long serialVersionUID = 0L;

    Canvas canvas;

    Button b0 = new Button("n = 0");
    Button b1 = new Button("n = 1");
    Button b2 = new Button("n = 2");
    Button b3 = new Button("n = 3");
    Button b4 = new Button("n = 4");
    Button b5 = new Button("n = 5");
    Button b6 = new Button("n = 6");
    Button b7 = new Button("n = 7");

    Button[] b = {b0, b1, b2, b3, b4, b5, b6, b7};

    public BContainer(Canvas canvas) {
        this.canvas = canvas;
        setBounds(262, 1, 68, 259);
        setLayout(new GridLayout(8, 1, 3, 3));

        for (int i=0; i<8; i++) {
            b[i].addActionListener(this);
            add(b[i]);
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == b0) canvas.n = 0;
        if (e.getSource() == b1) canvas.n = 1;
        if (e.getSource() == b2) canvas.n = 2;
        if (e.getSource() == b3) canvas.n = 3;
        if (e.getSource() == b4) canvas.n = 4;
        if (e.getSource() == b5) canvas.n = 5;
        if (e.getSource() == b6) canvas.n = 6;
        if (e.getSource() == b7) canvas.n = 7;
        canvas.repaint();
    }
}

Download SierpinskiTriangle