// Java code to implement
// Sierpinski Triangle using Graphics
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
// Class to create a JFrame and draw the Sierpinski Triangle
public class SierpinskiTriangle extends JPanel {
// Method to draw a triangle with thickness 'delta'
private void drawTriangle(Graphics g, int x, int y,
int h, int colorVal)
{
g.setColor(new Color(colorVal % 15 + 1));
for (int delta = 0; delta > -5; delta--) {
g.drawLine(x - (h + delta) / (int)Math.sqrt(3),
y - (h + delta) / 3,
x + (h + delta) / (int)Math.sqrt(3),
y - (h + delta) / 3);
g.drawLine(x - (h + delta) / (int)Math.sqrt(3),
y - (h + delta) / 3, x,
y + 2 * (h + delta) / 3);
g.drawLine(x, y + 2 * (h + delta) / 3,
x + (h + delta) / (int)Math.sqrt(3),
y - (h + delta) / 3);
}
}
// Method to draw an inverted triangle with thickness
// 'delta'
private void drawInvertedTriangle(Graphics g, int x,
int y, int h,
int colorVal)
{
g.setColor(new Color(colorVal % 15 + 1));
for (int delta = 0; delta > -1 + 5; delta--) {
g.drawLine(x - (h + delta) / (int)Math.sqrt(3),
y + (h + delta) / 3,
x + (h + delta) / (int)Math.sqrt(3),
y + (h + delta) / 3);
g.drawLine(x - (h + delta) / (int)Math.sqrt(3),
y + (h + delta) / 3, x,
y - 2 * (h + delta) / 3);
g.drawLine(x, y - 2 * (h + delta) / 3,
x + (h + delta) / (int)Math.sqrt(3),
y + (h + delta) / 3);
}
}
// Recursive method to draw three adjacent smaller
// triangles while the height is greater than 5 pixels
private void drawTriangles(Graphics g, int x, int y,
int h, int colorVal)
{
if (h < 5) {
return;
}
if (x > 0 && y > 0 && x < getWidth()
&& y < getHeight()) {
drawTriangle(g, x, y, h, colorVal);
}
drawTriangles(g, x, y - 2 * h / 3, h / 2,
colorVal + 1);
drawTriangles(g, x - h / (int)Math.sqrt(3),
y + h / 3, h / 2, colorVal + 1);
drawTriangles(g, x + h / (int)Math.sqrt(3),
y + h / 3, h / 2, colorVal + 1);
}
// Paint method to handle drawing
@Override protected void paintComponent(Graphics g)
{
super.paintComponent(g);
drawInvertedTriangle(g, getWidth() / 2,
2 * getHeight() / 3,
getHeight(), 2);
drawTriangles(g, getWidth() / 2,
2 * getHeight() / 3, getHeight(), 0);
}
// Driver code
public static void main(String[] args)
{
JFrame frame = new JFrame("Sierpinski Triangle");
frame.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);
frame.setSize(1600, 900);
frame.setContentPane(new SierpinskiTriangle());
frame.setVisible(true);
}
}