Generar gráfico a partir de fibonacci con PHP

Hola,

De ves en cuando me pongo a programar cosas que no sirvan para nada, o que solo sirvan para mi distracción (sí, trabajo programando y me distraigo del trabajo programando :P),  y hace tiempo pensé en hacer un código que generara fractales.

Se que hay varias formulas ya hechas para los fractales, pero yo pensaba idear algo más, entonces me pareció oportuno empezar con la generación y graficación de la serie fibonacci.

Les dejo el código y la imagen de ejemplo que se genera, ustedes pueden modificar en el código las iteraciones que quieran, para que sea más grande o más pequeño, eso directamente en el for.

Pueden también seleccionar que los rectangulos sean rellenados o solo el contorno.

Pueden ajustar el tamaño del lienzo, en este caso lo dejé muy grande (12000x6150), pero eso lo ajustan directo en las primeras opciones.

Les dejo el código pegado aquí y también en pastebin, por que Blogger no tiene gestión para code (creo yo).

 Clic derecho, abrir en nueva pestaña la imagen para ver a tamaño completo :D
http://kaguamedia.com/fibonacci.jpg -> enlace a tamaño completo (blogger la redimensiona)

Enlace Pastebin: http://pastebin.com/ZTaeYk2a

//Tamaño del lienzo
$a=12000;
$b=6150;

//Tamaño del cuadro inicial
$cuadroInicial = 10;

//definimos el lienzo
$lienzo = imagecreatetruecolor($a, $b);

//se definen los valores iniciales de la posición, se toma el centro
$x1Inicial = $a/2-($cuadroInicial/2);
$y1Inicial = $b/2-($cuadroInicial/2);
$x2Inicial = $a/2+($cuadroInicial/2);
$y2Inicial = $b/2+($cuadroInicial/2);

//para inicializar la secuencia de fibonacci
$n1=1;
$n2=0;

$espaciado = 10;


//Asignamos el sentido inicial
$sentido = 'inicial';

for($i=0;$i<=13;$i++)
{
$suma = $n1+$n2;
$n1=$n2;
$n2=$suma;
#echo $suma . " ";

$ti = $cuadroInicial*$suma; //Esta variable lleva de forma correcta el tamaño del cuadrado que se genera
$tiValores[$i] = $cuadroInicial*$suma;
$color = imagecolorallocate($lienzo, rand(10,210), rand(10,210), rand(10,210));


$x1anterior = $x1Inicial;
$x2anterior = $x2Inicial;
$y1anterior = $y1Inicial;
$y2anterior = $y2Inicial;

///*
// para definir en que sentido aumenta el cuadrado
if ($sentido == 'derecha' && $i<2 p="">
{
$x1Inicial = $x1Inicial+$ti; //caso derecha primer iteración
$x2Inicial = $x1Inicial+$ti; //caso derecha primer iteración
}
else
{
if ($sentido == 'derecha')
{
$x1Inicial = $x2anterior;
$x2Inicial = $x1Inicial+$ti;
$y1Inicial = $y2anterior;
$y2Inicial = $y1Inicial-$ti;
}
elseif ($sentido == 'arriba')
{
//reacomodando una variable para que vuelva a ser el eje guía
if ($i>3)
$y1anterior=$y2anterior;

$x1Inicial = $x2anterior;
$x2Inicial = $x1Inicial-$ti;
$y1Inicial = $y1anterior;
$y2Inicial = $y1Inicial-$ti;
}
elseif ($sentido == 'izquierda')
{
$x1Inicial = $x2anterior;
$x2Inicial = $x1Inicial-$ti;
$y1Inicial = $y2anterior;
$y2Inicial = $y1Inicial+$ti;
}
elseif ($sentido == 'abajo')
{
$x1Inicial = $x2anterior;
$x2Inicial = $x1Inicial+$ti;
$y1Inicial = $y2anterior;
$y2Inicial = $y1Inicial+$ti;
}
}

imagefilledrectangle($lienzo, $x1Inicial, $y1Inicial, $x2Inicial, $y2Inicial, $color);
#imagerectangle($lienzo, $x1Inicial, $y1Inicial, $x2Inicial, $y2Inicial, $color);

imagestring($lienzo, 5, 5, $espaciado,  "Iteracion $i - x1: $x1Inicial, x2: $x2Inicial, y1: $y1Inicial, y2: $y2Inicial $sentido suma: $suma cuadroinicial: $ti", $color);
$espaciado = $espaciado+20;
//Para definir el sentido de la imagen
if ($sentido=='inicial')
$sentido = 'derecha';
elseif ($sentido=='derecha')
$sentido = 'arriba';
elseif ($sentido=='arriba')
$sentido = 'izquierda';
elseif ($sentido == 'izquierda')
$sentido = 'abajo';
else
$sentido = 'derecha';


// Imprimir y liberar memoria

}
header('Content-Type: image/jpeg');

imagejpeg($lienzo);
imagedestroy($lienzo);

?>

PD. Si, hay programas que hacen esto y facilitan la vida con un solo clic, pero yo quería programarlo :P

PD2, Espero pronto pueda hacer el código para la generación de fractales, serán "personalizados", la idea que tengo está buena! :D

Comentarios

Entradas populares de este blog

Integrar API de Google Maps, archivos kml, kmz y otras fumarolas :D

Musimetría - música generada de forma automática por computadora.

Solución [fix] a hamachi Logging in .. failed, busy