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:
Daos cuenta de que aparece un parámetro en dicha ecuación, (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
.
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, :
- El último término,
, 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
y
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
. 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 obtenemos distintas caras. Aquí tenéis algunas para que veáis cómo va cambiando para unos cuantos valores de
entre
y
. Para dibujarlas podemos hacer lo siguiente:
- Definimos la función
, que será la parte izquierda de la ecuación entera, dependiente de
:
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
como la representación de la ecuación
;
g[t_] := ContourPlot[f[t] == 0, {x, -10, 10}, {y, -10, 10}] - De esta manera para cada valor de
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ónGraphicsGrid. En concreto aquí tenéis 18 caritas para 18 valores distintos depara 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.













Manzano | 22 de February de 2012 | 12:14
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.
ko | 22 de February de 2012 | 12:17
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%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}]
Trackback | 22 Feb, 2012
Bitacoras.com
gaussianos | 22 de February de 2012 | 14:34
Manzano, lo intenté con
AnimateyManipulate, pero no me dibujaba bien las caras mientras la animación se reproducía, pero sí cuando estaba parada. Raro…Pablogc | 22 de February de 2012 | 18:05
También podemos hacerlo con software libre en SAGE y generando animaciones :
http://www.sagenb.org/home/pub/4364/
Trackback | 23 Feb, 2012
Resumen del Carnaval de Matemáticas Edición 3.1 (actualizándose) | Scientia potentia est
gaussianos | 23 de February de 2012 | 03:46
Chulísimo Pablogc. Algún día tendré que ponerme a aprender SAGE. ¿Algún manual que nos puedas recomendar para empezar?
Pablogc | 23 de February de 2012 | 12:54
Personalmente, lo he aprendido todo tirando de la documentación online y del wiki. Como ya tenía una base de python me resultó muy sencillo.
Para empezar más de cero. Pablo Angulo, un amiguete de la UAM, da un laboratorio de matemáticas con SAGE y tiene bastante documentación muy currada:
http://www.uam.es/personal_pdi/ciencias/pangulo/doc/laboratorio/index.html
gaussianos | 23 de February de 2012 | 23:14
Muchas gracias Pablogc, le echaré un vistazo
Trackback | 28 Feb, 2012
¡A votar! (Carnaval de Matemáticas 3.1) | Scientia potentia est