// 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