<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class SierpinskiTriangle extends JApplet {
    /* Pixel offset from frame edge */
    public static int OFFSET = 25;

    /* Recursion depth */ 
    private static int depth = 5;
    
    @Override
    public void paint(Graphics g) {
        // Initialize p1, p2, p3 based on frame size */
        Point p1 = new Point(getWidth() / 2, OFFSET);
        Point p2 = new Point(OFFSET, getHeight() - OFFSET);
        Point p3 = new Point(getWidth() - OFFSET, getHeight() - OFFSET);            

        // Draw Sierpinski's triangle
        drawTriangles(g, depth, p1, p2, p3);
    }
    
    /** drawLine(g,p1,p2): draws a line between p1 and p2 on g
     *  Precondition: true
     */
    private static void drawLine(Graphics g, Point p1, Point p2) {
        g.drawLine(p1.x, p1.y, p2.x, p2.y);
    }
    
    /** midpoint(p1,p2): returns the midpoint between p1 and p2
     *  Precondition: true
     */
    private static Point midpoint(Point p1, Point p2) {
        return new Point((p1.x + p2.x) / 2, (p1.y + p2.y) / 2);
    }

    /** displayTriangles(g,depth,p1,p2,p3): draws a Sierpinski
     *     triangle up to depth with perimeter given by points p1, p2, p3.
     *  Precondition: true
     */
    private static void drawTriangles(Graphics g, int depth, Point p1, Point p2, Point p3) {
        if (depth == 0) {
            // If depth is 0, just draw a triangle connecting points
            drawLine(g, p1, p2);
            drawLine(g, p1, p3);
            drawLine(g, p2, p3);
        } else {
            // Otherwise recursively draw three Sierpinski triangles  
            drawTriangles(g, depth - 1, p1, midpoint(p1,p2), midpoint(p3,p1));
            drawTriangles(g, depth - 1, midpoint(p1,p2), p2, midpoint(p2,p3));
            drawTriangles(g, depth - 1, midpoint(p3,p1), midpoint(p2,p3), p3);
        }
    }
    
    public static void main(String argv[]) {
        JFrame frame = new JFrame("Sierpinski's Triangle");
        frame.add(new SierpinskiTriangle());
        frame.setSize(400, 400);
        frame.setVisible(true);
    }
}
</pre></body></html>