// User Interface for Sierpinski Lab // Author: Chris Wilcox // Date: 11/3/2016 // Class: CS163 // Email: wilcox@cs.colostate.edu // Copied from: // http://stackoverflow.com/questions/16311976/drawing-sierpinski-triangle-fractal-java import java.awt.Color; import java.awt.Dimension; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.util.ArrayList; import javax.swing.JFrame; import javax.swing.JPanel; public class UserInterface extends JPanel { private static final long serialVersionUID = 1L; // Array list of triangles from student code ArrayList triangles; // Constructor builds frame for rendering public UserInterface() { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(new Dimension(400, 400)); frame.setLocationRelativeTo(null); frame.add(this); frame.setVisible(true); } // Send triangles to be drawn public void draw(ArrayList triangles) { this.triangles = triangles; this.repaint(); } // Render triangles using graphics context public void paintComponent(Graphics g) { // Enable antialiasing Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // Iterate triangles for (int i = 0; i < triangles.size(); i++) { Triangle t = triangles.get(i); int[] xPoints = {(int)t.x0, (int)t.x1, (int)t.x2}; int[] yPoints = {(int)t.y0, (int)t.y1, (int)t.y2}; // Reverse coordinates int panelHeight = this.getSize().height; yPoints[0] = panelHeight - yPoints[0] - 1; yPoints[1] = panelHeight - yPoints[1] - 1; yPoints[2] = panelHeight - yPoints[2] - 1; // Inside triangles are filled, outside are wireframe if (i % 4 == 0) { // Draw inside triangle g2.setPaint(new GradientPaint(xPoints[0], yPoints[0], Color.lightGray, xPoints[1], yPoints[1], Color.blue, false)); g.fillPolygon(xPoints, yPoints, 3); } else { // Draw outside triangles g.setColor(Color.blue); g.drawPolygon(xPoints, yPoints, 3); } } } }