Triangulo De Sierpinsky

Iniciado por zaico, 30 Abril 2012, 00:36 AM

0 Miembros y 1 Visitante están viendo este tema.

zaico

Hola de nuevo ! esta semana estoy intentando hacer un fractal , mediante la recursividad, el caso es que no se porque unicamente me recorre el metodo de la primera llamada y la verdad es que no entiendo el por que, he estado mirando ejemplos, pero debo hacerlo unicamente  con los elementos que veis en el codigo , y estoy seguro que se puede. Solo me falta que funcionen los dos metodos de los triangulos de los lado pero parece ser que algo esta mal, alguien me podria decir el que? gracias!:

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

public class Fractal extends JFrame {
 
 Image img;
 
 public static void main(String[] args){
   
   E10_Fractal pizarra = new E10_Fractal();
   int [] coordX = { 250,500,750};
   int [] coordY = { 700,0,700} ;
   pizarra.dibuja(coordX,coordY,3,1);
 }
 
 public Fractal(){
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   setTitle("Fractal");
   setResizable(false);
   setSize(1000,1000);
   setVisible(true);
   img = createImage(1000,1000);
 }
 
 public void paint(Graphics g){
   g.drawImage(img,0,25,this);
 }
 
 public void dibuja(int [] coordX, int [] coordY, int lados, int contador){
   
   
   if(contador==1){
     Graphics g = img.getGraphics();
     
     
     g.setColor( new Color(255,0,0));
     g.fillPolygon(coordX,coordY,lados);
     
     g.setColor( new Color(0,0,0));
     g.drawPolygon(coordX,coordY,lados);
   }
   dibuja( altoX(coordX), altoY(coordY), lados ,contador-1);
   
   dibuja( izquierdaX(coordX), izquierdaY(coordY), lados ,contador-1);
   
   dibuja (derechaX(coordX), derechaY(coordY), lados ,contador-1);
   
 }
 
 public static int [] altoX(int [] coord){
   coord[2]= coord[1];
   coord[1]= (coord[0]+coord[1])/2;
   return coord;
 }
 
 public static int [] altoY(int [] coord){
   coord[1]= (coord[0]+coord[1])/2;
   
   return coord;
 }
 
 public static int [] izquierdaX(int [] coord){
   coord[0]= (coord[0]+coord[1])/2;
   coord[2]= (coord[1]+coord[2])/2;
   return coord;
 }
 
 public static int [] izquierdaY(int [] coord){
   coord[0]= (coord[0]+coord[1])/2;
   
   return coord;
 }
 public static int [] derechaX(int [] coord){
   coord[0]= coord[1];
   coord[1]= (coord[1]+coord[2])/2;
   return coord;
 }
 
 public static int [] derechaY(int [] coord){
   coord[1]= (coord[0]+coord[1])/2;
   
   return coord;
 }
 
 
 
 
}

zaico

Una ayudita para este novato de la programación!?

Proteus1989

He mirado por encima el código pero lo que he visto es que no tiene fin.
El método dibuja llama SIEMPRE a tres dibujas más y cada uno de ellos a otros 3, y así hasta el fin de los días.

Necesitas un condicional que diga cuando tiene que parar de llamarse recursivamente.

_teiki

 Ademas de lo ya antes mencionado solo se dibuja un triangulo debido a la condición que tienes.