Created
July 5, 2019 10:06
-
-
Save ahmednasserpro/ce60648ad94585fcd385cfc714c9479f to your computer and use it in GitHub Desktop.
SierpinskiTriangle drawing sierpinski triangles with java swing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.awt.*; | |
import java.awt.event.*; | |
import javax.swing.*; | |
public class Test { | |
public static void main(String[] args){ | |
JFrame f = new SierpinskiTriangle(); | |
f.setSize(300, 300); | |
f.setLocationRelativeTo(null); | |
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |
f.setVisible(true); | |
} | |
} | |
class SierpinskiTriangle extends JFrame { | |
private JButton b1 = new JButton("-"); | |
private JButton b2 = new JButton("+"); | |
private SierpinskiPanel sie = new SierpinskiPanel(); | |
private int order = 0; | |
public SierpinskiTriangle() { | |
JPanel panel = new JPanel(); | |
panel.add(b1); | |
panel.add(b2); | |
add(panel, BorderLayout.SOUTH); | |
add(sie); | |
b1.addActionListener(new ActionListener() { | |
@Override | |
public void actionPerformed(ActionEvent e) { | |
if (order != 0) { | |
order--; | |
sie.setOrder(order); | |
} | |
} | |
}); | |
b2.addActionListener(new ActionListener() { | |
@Override | |
public void actionPerformed(ActionEvent e) { | |
if (order != 10) { | |
order++; | |
sie.setOrder(order); | |
} | |
} | |
}); | |
} | |
private static class SierpinskiPanel extends JPanel { | |
private int order = 0; | |
public void setOrder(int order) { | |
this.order = order; | |
repaint(); | |
} | |
@Override | |
protected void paintComponent(Graphics g) { | |
super.paintComponent(g); | |
Point p1 = new Point(getWidth() / 2, 10); | |
Point p2 = new Point(getWidth() - 10, getHeight() - 10); | |
Point p3 = new Point(10, getHeight() - 10); | |
displayTriangles(g, order, p1, p2, p3); | |
} | |
private static void displayTriangles(Graphics g, int order, | |
Point p1, Point p2, Point p3) { | |
if (order == 0) { | |
g.drawLine(p1.x, p1.y, p2.x, p2.y); | |
g.drawLine(p1.x, p1.y, p3.x, p3.y); | |
g.drawLine(p2.x, p2.y, p3.x, p3.y); | |
} else { | |
Point p12 = midPoint(p1, p2); | |
Point p23 = midPoint(p2, p3); | |
Point p31 = midPoint(p3, p1); | |
displayTriangles(g, order - 1, p1, p12, p31); | |
displayTriangles(g, order - 1, p12, p2, p23); | |
displayTriangles(g, order - 1, p31, p23, p3); | |
} | |
} | |
private static Point midPoint(Point p1, Point p2) { | |
return new Point((p1.x + p2.x) / 2, (p1.y + p2.y) / 2); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment