user9767134
user9767134

Reputation: 11

Can't get past recursion for Sierpinki's Triangle

I just need to get this code working. I know it's not good form or very efficient but I just need it to draw the Sierpinski's Triangle, recursively. It reaches the first recursive call, but never gets past it and only draws part of the triangle. I know I'm being stupid and the answer will be obvious but I haven't coded in a long time. Thank you for any help!

import javax.swing.*;
import java.awt.*;

public class recursiveTriangle18 extends JApplet
{
   private final int APPLET_WIDTH = 800;
   private final int APPLET_HEIGHT = 800;

/*
   //x is accross and y is down
   point 1 - Right  A x[0],y[0] (720,600)
   point 2 - Left   B x[1],y[1]
   point 3 - Top    C x[2],y[2]
   point 4 draws back to point 1 to complete triangle

*/  private int[] xPos = {720, 80, 400, 720};
    private int[] yPos = {600, 600, 40, 600};

   //-----------------------------------------------------------------
   //  Sets up the basic applet environment.
   //-----------------------------------------------------------------
   public void init()
   {
      setBackground (Color.white);
      setSize (APPLET_WIDTH, APPLET_HEIGHT);
   }

   //-----------------------------------------------------------------
   //  Draws a rocket using polygons and polylines.
   //-----------------------------------------------------------------
   public void paint (Graphics page)
   {

        page.setColor (Color.BLUE);
        page.drawPolyline (xPos, yPos, xPos.length);

        Triangle(xPos,yPos, 0, page);

   }//end of paint

   public void Triangle(int[] xPos, int[] yPos, int flag, Graphics page)
   {
       //Find the distance between 2 points ex. - x,y & x1,y1
       int x = xPos[0];
       int x1 = xPos[1];
       int x2 = xPos[2];
       int x3 = xPos[3];
       int y = yPos[0];
       int y1 = yPos[1];
       int y2 = yPos[2];
       int y3 = yPos[3];

       double dist = Math.sqrt((x-x1)*(x-x1) + (y-y1)*(y-y1));
       //find the mid points of each line segment
       while (dist >= 100){
            int midpointx = ((x+x1)/2);
            int midpointy = ((y+y1)/2);
            int midpointx1 = ((x1+x2)/2);
            int midpointy1 = ((y1+y2)/2);
            int midpointx2 = ((x2+x3)/2);
            int midpointy2 = ((y2+y3)/2);


            //make the x and y array (3 points + first point to finish triangle)

            //create x,y Array using the midpoints you calculated

            int [] xpoints = {midpointx2, midpointx, midpointx2};
            int [] ypoints = {midpointy2,y, midpointy, midpointy2};


            int [] xpoints1 = {midpointx, midpointx1, x1, midpointx};
            int [] ypoints1 = {midpointy, midpointy1, y1, midpointy};

            int [] xpoints2 = {midpointx1, midpointx2,x2,midpointx1};
            int [] ypoints2 = {midpointy1, midpointy2,y2,midpointy1};


            page.drawPolyline(xpoints1, ypoints1, xpoints1.length);
            page.drawPolyline(xpoints2, ypoints2, xpoints2.length);
            page.drawPolyline(xpoints, ypoints, xpoints.length);

           //if the segment/distance is 300 or so, good length to stop

           // Recursive calls for each section of triangle 
                Triangle(xpoints, ypoints, flag, page); 

                Triangle(xpoints2, ypoints2, flag, page); // how to get here?

                Triangle(xpoints1, ypoints1, flag, page);
            }

            }


    //end of Triangle
}

Upvotes: 1

Views: 64

Answers (1)

Sean Van Gorder
Sean Van Gorder

Reputation: 3453

Triangle(xpoints, ypoints, flag, page); 

Triangle(xpoints2, ypoints2, flag, page); // how to get here?

Every Triangle call is making another call to Triangle, so it's an infinite recursion that never returns. You need an if (stop condition) block around the recursive calls to tell it when to stop recursing.

There's also another issue:

double dist = Math.sqrt((x-x1)*(x-x1) + (y-y1)*(y-y1));
//find the mid points of each line segment
while (dist >= 100){

You never update the value of dist, so this is an infinite loop.

Upvotes: 1

Related Questions