Mensajes [1] - Enviado el Domingo 05 de Agosto de 2007 a las 15:09hs
Hola..
El codigo que adjunto grafica la curva de Koch hasta un nivel predeterminado.
El problema que tengo es en la funcion kochRecursivo(double, int), cuando el parametro entero es 0, grafica una linea (eso es normal), en ese caso no hay recursion, pero cuando paso un valor >0, genera error, no se de que tipo.
Agradeceria su ayuda informandome de que tipo es el error
**********************************************
import java.awt.*;
import javax.swing.*;
public class Cursor
{
private double x;//refiere a la coordenada en x a graficar
private double y;//refiere a la coordenada en y a graficar
private double angulo;//refiere al angulo de giro representado en gradianes
private Color color; //modifica el color de la grafica
private Graphics g;// objeto que permite graficar
public Cursor ()
{
x=0.0;//inicializacion de las variables en valores válidos
y=0.0;
angulo=0.0;
this.color=Color.black;
}
public void definirInicio(double x,double y,double angulo,Graphics g)
{
//situa el cursor en el origen del plano y brinda la interfaz para graficar
this.x=x;
this.y=y;
this.angulo=angulo*Math.PI/180;
this.g=g;
}
public void CambiarColor(Color color)
{
//funcion que perimiote cambiar el color de la grafica
this.color=color;
}
public void Girar(double angulo)
{
//cambia el angulo del cursor
//recibe grados hexagecimales y los convierte a radianes
this.angulo=angulo*Math.PI/180;
}
public void nuevaPosicion(double x, double y)
{
//coloca el cursor al final de un trazo
this.x=x;
this.y=y;
}
public void trazar(double distancia)
{
//dibuja una linea de un color especifico
//desde la coordenada inicial (x,y) hasta una nueva coordenada
//(coorx,coordy) definida segun la longitud del trazo
double coordx = x + (distancia*Math.cos(angulo));//distancia convertida a abcisa (como si fueran polares)
double coordy = y + (distancia*Math.sin(angulo));//distancia convertida a ordenada (como si fueran polares)
g.setColor(color);//cambio del color
g.drawLine((int)coordx,(int)coordy,(int)x,(int)y);//trazo de la linea
nuevaPosicion(coordx,coordy);//coloca el cursor al final del trazo
}
public void putPixel (double x, double y)
{
g.setColor(color);
g.drawLine((int)x,(int)y,(int)x,(int)y);
}
}
**********************************************************
import java.awt.*;
import javax.swing.*;
public class Koch extends JFrame
{
Cursor tortuga;
public Koch()
{
tortuga = new Cursor();
setSize(500,500);
setVisible(true);
}
public void paint (Graphics g)
{
super.paint(g);
tortuga.definirInicio(50,250,0,g);
kochRecursivo(300.0,1);
}
public void kochRecursivo(double distancia,int nivel)
{
if(nivel==0)
{
tortuga.trazar(distancia);
}
else
{
kochRecursivo(distancia/3,nivel--);
tortuga.Girar(60);
kochRecursivo(distancia/3,nivel--);
tortuga.Girar(-120);
kochRecursivo(distancia/3,nivel--);
tortuga.Girar(60);
kochRecursivo(distancia/3,nivel--);
}
}
public static void main (String [] args)
{
Koch aplicacion = new Koch();
aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}