Hallo Leute,

Heute wieder ein Off-Topic Artikel, diesmal aber einer der doch wieder tatsächlich mit Programmieren zu tun hat. Heute werde ich euch zeigen wie ihr ein Sierpinski Dreieck in Java programmieren könnt.Sierpinski-Dreieck Dabei werden wir uns der Rekursion bedienen. Zuerst aber: „Was ist ein Sierpinski-Dreieck?“. Ein Sierpinski-Dreieck ist ein Fraktal das ein in sich selbst enthaltene Teilmenge ist. Wie wir das ganze nun in Java machen, zeige ich euch nun:

Der erste Schritt den wir machen müssen ist ein Fenster zu erstellen und die benötigten Images zum Zeichnen. Dabei verwenden wir ein JPanel und ein JFrame.  Wir erstellen zuerst eine neue Klasse die die JPanel Klasse erweitert, danach erstellen wir ein JFrame und fügen das JPanel dem JFrame hinzu. Danach erstellen wir ein BufferedImage, mit der Größe unseres JPanels/JFrames. Nun overriden wir die paint Methode und malen unser BufferedImage an die Stelle 0,0.  Dies sollte relativ trivial sein: Nun kommen wir zum spannenden Teil: Die Rekursion: Wir wissen das jedes Dreieck, drei weitere Dreiecke hervorruft. Wie wir anhand des Bildes erkennen sehen wir, dass die X-Coordinate jeweils um 1/4 der Breite verschoben wird, die Y-Coordinate jeweils um die hälfte der Höhe. Dabei kommen wir nun zu folgendem code:

void zeichneSierpinski(double x, double y, double w, double h) {
	zeichneDreieck(x,y,w,h);
	if((x<0.5) || (h<0.5))
			return;
	double h2 = h/2;
	double w2 = w/2;
	zeichneSierpinski(x,y,w2,h2);
	zeichneSierpinski(x+w2/2,y+h2,w2,h2);
	zeichneSierpinski(x+w2,y,w2,h2);
}

Wie wir sehen ist der Code recht simpel und  basiert auf den vorhergemachten Erkenntnissen. Der Code zum zeichnen eines Dreiecks sieht dann wie folgt aus:

drawTriangle(int x, int y,int w, int h) {
	Graphics g = (Graphics) frame.bi.getGraphics();
	g.setColor(Color.black);

	g.drawLine(x,y,x+ w,y);
	g.drawLine(x,y,x+(w/2), y+h);
	g.drawLine(x+w,y, x+(w/2), y+ h);
}

Ich hoffe euch hat die kleine Anleitung gefallen und ihr habt etwas neues gelernt! Bis zum nächsten mal und wie immer: Kommentiert fleißig!