Ir al contenido principal

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

Como un simple cambio de nombre en una fanpage me llevó con un bypass en el sistema linkshim de Facebook

Como un simple cambio de nombre en una fanpage me llevó con un bypass en el sistema linkshim de Facebook  Todo inició con el rediseño de marca de un noticiero digital, en el cuál se cambió el nombre, se cambió el logotipo, se cambiaron los nombres de twitter, el usuario de twitter, el instagram, pero OH! al llegar a facebook y hacer el cambio de url de dominio no hubo problema, pero el querer cambiar el nombre inició la pesadilla... "No podemos cambiar tu nombre de dominio debido a que puede ser engañoso para tus usuarios, etc... etc... etc...". Eso es lo primero que me llegó al intentar cambiar el nombre de dominio, pero para mi suerte, vi un botón de "apelación". ¡Que bien! Puedo apelar y dar mis razones de por qué estoy cambiando el nombre.  Y así empiezo:  " Querido FB, Recientemente la empresa xxxx está en un rediseño de marca e imagen, por lo que agradecería puedan ayudarme con el cambio de nom...

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

Hola! Aquí con una pequeña entrada, pero que a más de uno le será útil. Tengo hamachi instalado en varias máquinas, pero en una precisamente al reiniciar, algunas veces me da este problema: usuarioserver@server:~$ sudo hamachi login [sudo] password for usuarioserver: Logging in .. failed, busy Lo busqué en internet y la "solución" que dan, es reinstalar hamachi, y para los que han instalado hamachi en ubuntu, saben que no es una opción, pues se tendrían que hacer estos pasos:  sudo apt-get remove logmein-hamachi sudo dpkg -i logmein-hamachixxx.deb sudo apt-get install -f Para lo cual (siempre) es molesto hacer esos pasos, y algunas veces la configuración se llega a perder.  Para solucionar ese problema, basta con hacer un:  sudo /etc/init.d/logmein-hamachi force-reload Esto forzará el reinicio de hamachi, y así después hacen:  sudo hamachi login Y listo, el problema de failed busy desaparece y los deja loguear bien en la re...

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

Ya que andamos en eso de la posteada ahora les voy a dejar un pequeño manual sobre como integrar la API de maps (google) dentro de nuestro código, hay varia documentación en la página developers de google, pero realmente lo que uno busca cuando pone en google: "integrar api de maps" es ver un ejemplo claro y directo para que se pueda entender de mejor forma. Así que pues ya comentada la información de arriba les paso a dejar un ejemplo. Lo primero que tenemos que poner en nuestro código es la llamada a la API de maps: < script type = " text/javascript " src = " http://maps.googleapis.com/maps/api/js?sensor=false&language=es " > < / script > En este caso la variable sensor está en false, esto nos indica que no hay un dispositivo gps que pueda tomar la ubicación (se pone generalmente en true cuando es para aplicación movil, llámese celular o tableta) El lenguaje declaramos español, esto es para los menús que se van a most...