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.
¿Te ha gustado la entrada? Puedes invitarme a un café, Gauss te lo agradecerá 😉
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.
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}]
Información Bitacoras.com…
Valora en Bitacoras.com: No hay resumen disponible para esta anotación…
Manzano, lo intenté con
Animate
yManipulate
, pero no me dibujaba bien las caras mientras la animación se reproducía, pero sí cuando estaba parada. Raro…También podemos hacerlo con software libre en SAGE y generando animaciones :
http://www.sagenb.org/home/pub/4364/
[…] nos deja una entrada sobre cómo pintar caras sonrientes […]
Chulísimo Pablogc. Algún día tendré que ponerme a aprender SAGE. ¿Algún manual que nos puedas recomendar para empezar?
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
Muchas gracias Pablogc, le echaré un vistazo 🙂
[…] Gaussianos nos deja una entrada sobre cómo pintar caras sonrientes :-). […]
[…] que, por cierto, está algo mejor que las caritas que se convertían en señor con bigote que os enseñé en este post. […]