miércoles, 4 de abril de 2012

Naturaleza matemática



He tenido que pasar por el aro soportar a mi jefe, que ganó su puesto en una tómbola (no quedaban perritos piloto). He tenido que aguantar compañeros obcecados en pensar que mientras más bajo cae el de la mesa de al lado, más altos están ellos (esto es una jungla chicos -suele decir Gaznápiro). He sufrido en silencio las... bueno, ya sabes... aunque sea metafóricamente en este caso. Y uno, que tiene la mala costumbre de comer a diario, no puede hacer más que soportar el sacrificio a cambio de algo de sustento. Pero hay cosas y cosas... Aquél Sábado, algún gerifante tuvo la fantástica idea de que debíamos renunciar a nuestro día de descanso para pasar un día de campo reunidos con -en palabras suyas- nuestra segunda familia. Para reforzar lazos, mejorar el trabajo en equipo y, bueno, todo eso que a los iluminados de RRHH les gusta decir (eso sí, que no se te ocurra ponerte malo y no justificarlo, que se te cae el pelo por mucha segunda familia que sean).
En fin, que allí estaba yo, tratando de evitar todos esos jueguecitos motivacionales, ocultándome tras una arboleda con la esperanza de que nadie me echara en falta... Pero claro, se ve que no era el único que trataba de zafarse, porque allí estaba Sofía, sentada contra un árbol mirando al cielo como esperando a que bajara un platillo volante a abducirla. En voz baja, en parte para que no nos escucharan, y en parte para no sobresaltarla al sacarla del trance, pregunté:
- ¿Va a llover? -dijé tratando de ser gracioso.
- ¿No es fantástico? Fíjate en como se distribuyen las ramificaciones de esos árboles ¿No te recuerda a una construcción fractal?
En ese momento casi me entraron ganas de volver con el grupo y ponerme a hacer carreras de sacos o lo que fuera que estaban haciendo, aunque lo pensé mejor y decidí sentarme en el árbol de al lado con la esperanza de que Sofía volviera a caer en el trance hipnótico del que la había sacado.
Pareciera que finalmente hubiera entrado en estado meditativo, sin embargo, se puso trascendente y continuó hablando.

- ¿Te has fijado que casi todo en la naturaleza sigue un patrón o unas proporciones matemáticas?
- Bueno, supongo que lo dices por eso de las órbitas planetarias, Kepler y todas esas cosas ¿no?
Sofía me miró de nuevo con cierto aire de resignación antes de preguntar ¿Te gustan la flores?
- No mucho, son un poco insípidas -traté de nuevo de hacer un chiste ingenioso, sin éxito, claro.
- Algunas flores, como los lirios o el iris tienen 3 pétalos, las rosas suelen tener 5, las Espuela de Caballero tienen 8, la caléndula del maíz o algunas margaritas tienen 13, 21 pétalos tiene la achicoria, 34 la flor del plátano y la familia de las Asteraceae puede tener 55 y 89. ¿Qué te parece?
Me quedé un poco descolocado, porque no sabía exactamente qué me estaba preguntando.
- Fíjate Alberto: 3, 5, 8, 13, 21, 34, 55, 89 ¿no te dice nada?
- Pues no -tuve que reconocer.
- Se trata de la sucesión de Fibonnaci.
- ¡Ah si! Ahora caigo. Es la sucesión en la que cada número es la suma de los dos anteriores: 1, 1, 2, 3, 5, 8, 13, 21, 34, etc.
- ¿Y no te parece demasiada casualidad?
- Bueno, curioso sí que es -contesté pensativo.
- ¿Y no te parece curioso también que la relación entre la longitud real de muchos ríos y su distancia en línea recta desde el nacimiento hasta la desembocadura sea un valor algo mayor que tres?
De nuevo me quedé tratando de averiguar a donde quería llegar.
- Te lo diré de otra forma -continúo Sofía- El promedio está alrededor del número 3.14 ¿Te suena?
- ¡Claro! Es el número Pi. ¡Es la misma proporción que existe entre la circunferencia de un círculo y su diámetro!
- Estos árboles que nos rodean también parecen seguir un patrón matemático. Si te fijas, una ramita es como una versión en pequeño de la rama sobre la que ha crecido, y a su vez, esta rama es como una versión más pequeña del árbol completo.
- Es como si fueran árboles recursivos -dije tratando de parecer que seguía su argumentación.
- Sí, efectivamente...
No tuvo tiempo de terminar la frase cuando escuchamos la inconfundible voz nasal y chillona de Gaznápiro detrás nuestra: ¿Qué tortolitos? ¿no os integráis en el equipo?
La idea de que Sofía pudiera tener pensamiento alguno que incluyera el concepto de relación con el sexo opuesto me causó hasta gracia, así que la mire esperando encontrar en su cara una expresión de rechazo a las palabras de Gaznápiro. Sin embargo me encontré con una sonrisa poco habitual... Lo que me dejo totalmente desconcertado.
El resto del día lo pasé tratando de no desentonar demasiado entre toda aquella jauría de "animales sociales" -que es lo que decía el jefe de RRHH que eramos, el muy… animal social.
Ya de tarde, en casa, no dejaba de pensar en lo que me había estado contando Sofía sobre los árboles, así que me senté a teclear un programa en Java tratando de emular a la naturaleza. Quizás con la idea secreta de cultivar mi propio bosque digital de bonsáis de diseño.
La idea era hacer que a partir de una rama inicial se crearan otras dos subramas, y de cada una de ellas, otras dos, es decir, crear las ramas de forma recursiva tal y como se observa en la siguiente figura.




Cada rama tendría que tener menos longitud que su rama padre (entre 5 y 10 píxeles más pequeña) y menor grosor (un píxel menos que su rama padre).
Para que pareciera un árbol de verdad introduje algo de caos en el asunto. Añadí un factor aleatorio al ángulo de crecimiento de cada rama y también a la longitud de cada rama hija.
La recursividad la limité a una profundidad de 12, y a cada recursión le asigné un color cada vez más claro para conseguir algo más de realismo.
El resultado fue el siguiente código.

  1. import java.awt.Color;
  2. import java.awt.Graphics;
  3. import java.util.Random;
  4. import javax.swing.JFrame;
  5.  
  6. public class FractalTree extends JFrame {
  7.  
  8.     public FractalTree() {
  9.         super("Naturaleza fractal");
  10.         setSize(800, 800);
  11.         setDefaultCloseOperation(EXIT_ON_CLOSE);
  12.     }
  13.  
  14.     private void drawTree(Graphics g, int x1, int y1, double angle, int depth) {
  15.       if (depth > 0) {
  16.         Random rand = new Random();
  17.         int branch_step=5+rand.nextInt(5);
  18.         int x2=x1+(int)(Math.cos(Math.toRadians(angle))*(depth*branch_step));
  19.         int y2=y1+(int)(Math.sin(Math.toRadians(angle))*(depth*branch_step));
  20.         g.setColor(new Color(100-(depth*5),250-(depth*10),10));
  21.         int[] xpoints=new int[4];
  22.         int[] ypoints=new int[4];
  23.         xpoints[0]=x1;
  24.         ypoints[0]=y1;
  25.         xpoints[1]=x1+depth;
  26.         ypoints[1]=y1;
  27.         xpoints[2]=x2+depth;
  28.         ypoints[2]=y2;
  29.         xpoints[3]=x2;
  30.         ypoints[3]=y2;
  31.         g.fillPolygon(xpoints, ypoints, 4);
  32.         int rangle=rand.nextInt(30);
  33.         int langle=rand.nextInt(30);
  34.         drawTree(g, x2, y2, angle-langle, depth-1);
  35.         drawTree(g, x2, y2, angle+rangle, depth-1);
  36.       }
  37.     }
  38.  
  39.     @Override
  40.     public void paint(Graphics g) {
  41.         drawTree(g, 400, 600, -90, 12);
  42.     }
  43.  
  44.     public static void main(String[] args) {
  45.         new FractalTree().setVisible(true);
  46.     }
  47. }


Aquí se pueden ver dos arbolitos creados con este programa, que por supuesto envíe a Sofía por email con la esperanza de que se sintiera, de alguna forma, halagada.



6 comentarios:

  1. Como matemático e informático, te recomiendo que no solo mires los modelos fractales de los arbolitos, sino que le heches un vistazo a toda la teoría detrás de la phyllotaxis (http://goldenratiomyth.weebly.com/phyllotaxis-the-fibonacci-sequence-in-nature.html). A un servidor le tocó hacer un extensivo estudio sobre la distribución y peso de las hojas de los árboles, y te puedo asegurar que, aunque el modelo fractal es muy "bonico", incluyendo la idea de la phyllotaxis se acerca mucho mas a la realidad, aunque no tuve tiempo de crear modelos artísticos que representaran la teoría sobre la que trabajaba... te deseo más suerte que la que yo tuve si te decides a intentar algo así

    ResponderEliminar
    Respuestas
    1. Gracias por el enlace. Me dio por escribir este post después de leer sobre phyllotaxis en un par de webs. La verdad es que me dejó bastante intrigado. De todas formas, no creo que vaya más allá de este artículo, sobre todo porque no me atrevería a profundizar en toda la teoría que hay detrás armado sólo con mis matemáticas :-)
      En cualquier caso, tengo intención de seguir leyendo sobre el tema, aunque sea superficialmente.

      Saludos!

      Eliminar
  2. ¿Con qué fórmula sacas más de 24 horas al día, Alberto?. Cada 'post' te superas.

    ResponderEliminar
    Respuestas
    1. Gracias! La verdad es que desde que me compré mi máquina del tiempo la cosa es más fácil ;-)

      Eliminar
  3. Vídeo relacionado de Cristóbal Vila:
    http://www.youtube.com/watch?v=kkGeOWYOFoA

    ResponderEliminar