Rekursive Sierpinski-Dreieck ist Java

Ich versuche zu zeichnen, Sierpinski-Dreieck ist rekursiv in Java, aber es funktioniert nicht, obwohl mir die Logik scheint in Ordnung. Der base case ist, wenn die Dreiecke sind innerhalb von 2 Pixel von einander, daher die Verwendung der abstandsformel.

import java.awt.Graphics;
import java.awt.Color;
import java.awt.Font;
import java.awt.Canvas;

public class Triangle extends Canvas implements Runnable
{
    private static final int WIDTH = 800;
    private static final int HEIGHT = 600;


public Triangle()
{
    setBackground(Color.WHITE);
}

public void paint( Graphics window )
{
    window.setColor(Color.BLUE);
    window.setFont(new Font("ARIAL",Font.BOLD,24));     
    window.drawString("Serpinski's Gasket", 25, 50);

    triangle(window, (WIDTH-10)/2, 20, WIDTH-40, HEIGHT-20, 40, HEIGHT-20, 4);
}

public void triangle(Graphics window, int x1, int y1, int x2, int y2, int x3, int y3, int r)
{


    //if statement base case
        //midpoint = (x1 + x2 /2), (y1 + y2/2)
        if(Math.sqrt((double)(Math.pow(x2-x1, 2)) + (double)(Math.pow(y2-y1, 2))) > 2)
        //if(r==0)
        {
            window.drawLine(x1, y1, x2, y2);     
            window.drawLine(x2, y2, x3, y3);
            window.drawLine(x3, y3, x1, y1);
        }

        int xa, ya, xb, yb, xc, yc;   //make 3 new triangles by connecting the midpoints of
        xa = (x1 + x2) / 2;             //. the previous triangle 
        ya = (y1 + y2) / 2;
        xb = (x1 + x3) / 2;
        yb = (y1 + y3) / 2;
        xc = (x2 + x3) / 2;
        yc = (y2 + y3) / 2;


        triangle(window, x1, y1, xa, ya, xb, yb, r-1);   //recursively call the function using the 3 triangles
        triangle(window, xa, ya, x2, y2, xc, yc, r-1);
        triangle(window, xb, yb, xc, yc, x3, y3, r-1);

}

public void run()
{
    try{
        Thread.currentThread().sleep(3);    
    }
    catch(Exception e)
    {
    }
}
}

Den Läufer ist

import javax.swing.JFrame;

public class FractalRunner extends JFrame
{
    private static final int WIDTH = 800;
    private static final int HEIGHT = 600;

public FractalRunner()
{
    super("Fractal Runner");

    setSize(WIDTH+40,HEIGHT+40);

    getContentPane().add(new Triangle());   

    setVisible(true);
}

public static void main( String args[] )
{
    FractalRunner run = new FractalRunner();
}
}

Mir das sollte funktionieren, aber es führt zu einer Laufzeit - /StackOverFlow-Fehler, ich weiß nicht, wie korrigieren. Keine Hilfe?

InformationsquelleAutor flaw600 | 2013-02-16
Schreibe einen Kommentar