De “carita sonriente” a “señor con bigote” con Mathematica

El otro día estaba dando una vuelta por GeoGebratube y me encontré este curioso applet en el que se puede ver que con una ecuación nada más (si, es una ecuación, aunque ahí le falta el =0) se puede dibujar una carita sonriente (algo simple, pero carita sonriente al fin y al cabo). La ecuación, al más puro estilo de la ecuación del logo de Batman que ya hemos visto por aquí parece algo compleja, ya que con ella debemos representar cuatro conjuntos, pero veremos ahora que no lo es tanto.

Lo que vamos a ver es cómo representarla con Mathematica 8.0. Veamos cuál es la ecuación de la que estamos hablando:

\begin{matrix}(x^4 + 2 x^2 y^2 - \mathbf{b} \cdot x^2 \cdot y - 40.75 x^2 + y^4 - y^3 - 40.75 y^2 + 25 y + 393.75) \cdot \\ \cdot ((x + 3)^2 + (y - 7)^2 - 1) \cdot ((x - 3)^2 + (y - 7)^2 - 1) \cdot (x^2 + (y - 2)^2 - 64)=0 \end{matrix}

Daos cuenta de que aparece un parámetro en dicha ecuación, b (en negrita). Distintos valores de este parámetro darán distintas representaciones, que para nosotros significarán distintas caras. Es decir, la carita obtenida dependerá de este b.

Como decíamos, la parte izquierda de la ecuación tiene cuatro términos multiplicados entre sí, y cada uno de ellos dibuja una parte de la carita. Veamos qué hace cada uno para, por ejemplo, b=0:

  • El último término, (x^2 + (y - 2)^2 - 64), dibuja el círculo exterior. El código de Mathematica para dibujarlo es

    a1=ContourPlot[(x^2 + (y - 2)^2 - 64) == 0, {x, -10, 10}, {y, -10, 10}]

    y queda así:

  • Los dos términos ((x + 3)^2 + (y - 7)^2 - 1) y ((x - 3)^2 + (y - 7)^2 - 1) nos dan los ojos. Podemos dibujarlos los dos juntos con este código en Mathematica

    a2=ContourPlot[((x + 3)^2 + (y - 7)^2 - 1)*((x - 3)^2 +
    + (y - 7)^2 - 1) == 0, {x, -10, 10}, {y, -10, 10}]

    y nos quedaría así:

  • Y la sonrisa y la nariz se controlan con el término (x^4 + 2 x^2 y^2 - 40.75 x^2 + y^4 - y^3 - 40.75 y^2 +      25 y + 393.75). El código a utilizar sería

    a3=ContourPlot[(x^4 + 2 x^2 y^2 - 40.75 x^2 + y^4 - y^3 - 40.75 y^2 +
    + 25 y + 393.75) == 0, {x, -10, 10}, {y, -10, 10}]

    y su representación quedaría así:

Si representamos las cuatro partes en la misma gráfica obtenemos nuestra cara. Podemos hacerlo con el comando Show:

Show[a1,a2,a3]

o también con la ecuación inicial directamente:

ContourPlot[(x^4 + 2 x^2 y^2 - 40.75 x^2 + y^4 - y^3 - 40.75 y^2 + 25 y + 393.75)*((x + 3)^2 + (y - 7)^2 - 1)*((x - 3)^2 + (y - 7)^2 - 1)*(x^2 + (y - 2)^2 - 64) == 0, {x, -10, 10}, {y, -10, 10}]

Que coloreado (con Paint) podría quedar así:

Pero, como hemos dicho antes, para cada valor de b obtenemos distintas caras. Aquí tenéis algunas para que veáis cómo va cambiando para unos cuantos valores de b entre -0.7 y 4.7. Para dibujarlas podemos hacer lo siguiente:

  • Definimos la función f(b), que será la parte izquierda de la ecuación entera, dependiente de b:

    f[b_] := (x^4 + 2 x^2 y^2 - b*x^2*y - 40.75 x^2 + y^4 - y^3 - 40.75 y^2 + 25 y + 393.75)*
    ((x + 3)^2 + (y - 7)^2 -1)*((x - 3)^2 + (y - 7)^2 - 1)*(x^2 + (y - 2)^2 - 64)
  • Ahora definimos g(t) como la representación de la ecuación f(t)=0;

    g[t_] := ContourPlot[f[t] == 0, {x, -10, 10}, {y, -10, 10}]
  • De esta manera para cada valor de t podemos dibujar una cara distinta. Podéis probar escribiendo en Mathematica g[valor_de_t], para algunos valores. Lo que he hecho yo es agrupar varios con la función GraphicsGrid. En concreto aquí tenéis 18 caritas para 18 valores distintos de t para que veáis cómo varían. El código sería el siguiente:

    GraphicsGrid[{{g[-0.7], g[-0.5], g[-0.3]}, {g[-0.1], g[0], g[0.1]}, {g[0.3], g[0.5],
    g[0.7]}, {g[2.3], g[2.6], g[2.9]}, {g[3.2], g[3.5], g[3.8]}, {g[4.1], g[4.4], g[4.7]}}]

Y ahora las imágenes. Apreciad el paso de carita sonriente a señor con bigote:

Como habréis apreciado, entre las nueve primeras y las nueve últimas hay una especie de salto. Las imágenes que aparecen ahí son las que formarían el paso de sonrisa a bigote. Podéis ver vosotros mismos qué tipo de figuras van quedando utilizando valores entre 1 y 2.

Pero podríamos haber probado con valores más pequeños o más grandes que los que aparecen aquí. ¿Qué ocurriría? Pues para valores más pequeños que -1, en este caso -3, -10 y -20, la cosa saldría así:

De una sonrisa a una pajarita.

Y para valores más grandes que 5, por ejemplo para 10, 20 y 30, saldrían así:

De un bigote a unas gafas.

Realmente interesante el juego que da esta ecuación, ¿verdad? Os dejo a vosotros la posibilidad de comentar qué aplicaciones podría tener todo esto, pero a bote pronto se me ocurren cosas relacionadas con juegos para niños. ¿Qué pensáis?


Y para terminar una petición y una pregunta:

  • Petición: si sabéis de más ecuaciones de este tipo que generen figuras curiosas utilizad los comentarios para contárnoslo.
  • Pregunta: ¿alguien sabe cómo colorear partes de estas gráficas directamente con Mathematica? Si es así os agradecería que dijerais algo en un comentario.

Esta es mi tercera contribución para la Edición 3.1 del Carnaval de Matemáticas, que en esta ocasión tiene como anfitrión a Scientia potentia est.

Autor: ^DiAmOnD^

Miguel Ángel Morales Medina. Licenciado en Matemáticas y autor de Gaussianos y de El Aleph. Puedes seguirme en Twitter o indicar que te gusta mi página de Facebook.

7 Comentarios

  1. Si usas una versión reciente de Mathematica (a partir de la 6.0, creo) puedes usar la orden Manipulate, que esencialmente te permite mover en tiempo real todos los parámetros. Uno de los grandes logros de los de Wolfram que hacen mejor la vida de los que trabajamos con este programa.

    Publica una respuesta
  2. Para quien no tenga mathematica a mano, se puede poner la instrucción ContourPlot completa en Wolfram alpha, y te lo pintará todo en el mismo navegador:

    http://www.wolframalpha.com/input/?i=ContourPlot%5B%28x^4+%2B+2+x^2+y^2+-+40.75+x^2+%2B+y^4+-+y^3+-+40.75+y^2+%2B+25+y+%2B+393.75%29*%28%28x+%2B+3%29^2+%2B+%28y+-+7%29^2+-+1%29*%28%28x+-+3%29^2+%2B+%28y+-+7%29^2+-+1%29*%28x^2+%2B+%28y+-+2%29^2+-+64%29+%3D%3D+0%2C+{x%2C+-10%2C+10}%2C+{y%2C+-10%2C+10}]

    Publica una respuesta
  3. Manzano, lo intenté con Animate y Manipulate, pero no me dibujaba bien las caras mientras la animación se reproducía, pero sí cuando estaba parada. Raro…

    Publica una respuesta
  4. Chulísimo Pablogc. Algún día tendré que ponerme a aprender SAGE. ¿Algún manual que nos puedas recomendar para empezar?

    Publica una respuesta

Trackbacks/Pingbacks

  1. Bitacoras.com - Información Bitacoras.com... Valora en Bitacoras.com: No hay resumen disponible para esta anotación...
  2. Resumen del Carnaval de Matemáticas Edición 3.1 (actualizándose) | Scientia potentia est - [...] nos deja una entrada sobre cómo pintar caras sonrientes [...]
  3. ¡A votar! (Carnaval de Matemáticas 3.1) | Scientia potentia est - [...] Gaussianos nos deja una entrada sobre cómo pintar caras sonrientes :-). [...]
  4. WolframAlpha y algunas curvas muy "especiales" - Gaussianos | Gaussianos - [...] que, por cierto, está algo mejor que las caritas que se convertían en señor con bigote que os enseñé…

Puedes utilizar código LaTeX para insertar fórmulas en los comentarios. Sólo tienes que escribir
[latex]código-latex-que-quieras-insertar[/latex]
o
$latex código-latex-que-quieras-insertar$.

Si tienes alguna duda sobre cómo escribir algún símbolo puede ayudarte la Wikipedia.

Y si los símbolos < y > te dan problemas al escribir en LaTeX te recomiendo que uses los códigos html & lt; y & gt; (sin los espacios) respectivamente.

Envía un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *