Foro de elhacker.net

Programación => Java => Mensaje iniciado por: zaico en 30 Abril 2012, 00:36 am



Título: Triangulo De Sierpinsky
Publicado por: zaico en 30 Abril 2012, 00:36 am
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!:
Código:
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;
  }
  
  
  
  
}


Título: Re: Triangulo De Sierpinsky
Publicado por: zaico en 1 Mayo 2012, 10:41 am
Una ayudita para este novato de la programación!?


Título: Re: Triangulo De Sierpinsky
Publicado por: Proteus1989 en 1 Mayo 2012, 19:50 pm
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.


Título: Re: Triangulo De Sierpinsky
Publicado por: _teiki en 2 Mayo 2012, 03:31 am
 Ademas de lo ya antes mencionado solo se dibuja un triangulo debido a la condición que tienes.