Las matemáticas románticas (II)
Introducción
Hace ya bastante tiempo os hablaba de Romantic Mathematics en la entrada titulada Las matemáticas romanticas. En este sitio nos comentan que los sentimientos, y concretamente el amor, son de las pocas cosas de nuestra vida en las que la influencia de las matemáticas no es muy grande. No se puede explicar matemáticamente el amor, pero sí podemos demostrarlo utilizando las matemáticas. Según el autor de la página, demostrar el amor mediante, por ejemplo, un poema, está ya muy visto y generalmente no impresiona demasiado. Por eso sugiere hacerlo con matemáticas.
¿Qué mejor forma de demostrar nuestro amor entregando nuestro corazón? ¿Entregamos entonces un dibujo para ello? Demasiado imperfecto. Mejor que un programa de ordenador lo haga por nosotros, ya que así evitamos los errores (sabemos que no siempre es así, pero para el caso que nos ocupa nos sirve). Vamos a ver cómo el programa Mathematica nos puede ayudar a ello.
¡Demostremos nuestro amor!
Amor en 2-D
En el artículo de Gaussianos que enlazo en la introducción os enseñé a dibujar un corazón en dos dimensiones solapando dos curvas. Vamos a recordarlo y a ampliarlo un poquito.
Vamos a dibujar un corazón solapando las siguientes curvas, que son las que vamos a utilizar en todo este apartado:
Para representarlas en Mathematica introducimos el siguiente código:
f[x_]:=Sqrt[1-(Abs[x]-1)^2];
g[x_]:=ArcCos[1-Abs[x]]-Pi;
Plot[{f[x],g[x]},{x,-2,2},AspectRatio->Automatic]
El resultado es el siguiente:

Queda bonito…pero se puede mejorar. ¿Qué mejor que un corazón rojo? Y mejor con un trazo más ancho…y si se pudieran quitar los ejes sería perfecto. Ahí va:
Plot[{f[x],g[x]},{x,-2,2},AspectRatio->Automatic,PlotStyle-> {{RGBColor[1,0,0],Thickness[0.05]},{RGBColor[1,0,0],Thickness[0.05]}},Axes->False]
Cuyo resultado es el siguiente:

Cambiando los valores de la opción Thickness podemos variar la anchura del trazo.
Pero podríamos pedir más cosas. Cualquiera puede dibujar un corazón más o menos bien hecho y colorearlo entero de rojo (o de cualquier otro color). ¿Podemos nosotros? Pues claro que sí:
< < Graphics`FilledPlot` (para introducirlo en Mathematica quitad los espacios)
FilledPlot[{f[x],g[x]},{x,-2,2},Fills->{{{1, 2},RGBColor[1,0,0]}},Curves->None,AspectRatio->Automatic,Axes->False]
El resultado gráfico es el siguiente:

¿A que es bonito? Pues aún hay más.
Amor en 3-D
Hemos dicho que todo el mundo puede dibujar un corazón en dos dimensiones más o menos decente y colorearlo de rojo, aunque hemos visto que con Mathematica el dibujo puede quedarnos mucho mejor. ¿Y si queremos dibujarlo en tres dimensiones? Parece más complicado. De hecho posiblemente a mucha gente le costaría mucho que su dibujo quedara mínimamente decente. Con Mathematica también podemos demostrar nuestro amor en 3-D. Además os voy a dar dos formas:
- Vamos a representar la superficie cuya ecuación implícita es:
Cargamos el paquete ContourPlot3D:
< < Graphics`ContourPlot3D` (quitadle los espacios)
Y dibujamos el corazón:
ContourPlot3D[(x^2+9/4 y^2+z^2-1)^3-x^2 z^3-9/80 y^2 z^3,{x,-3,3},{y,-3,3}, {z,-3,3},MaxRecursion->3,ViewPoint->{2.032,2.290,1.294},Axes->True,AxesLabel->{"Eje X", "Eje Y","Eje Z"}]
Obtenemos lo siguiente:

Sí, ya lo sé, en rojo queda mucho mejor. Y sin ejes. Y si la caja. Vamos a ello:
ContourPlot3D[(x^2+9/4 y^2+z^2-1)^3-x^2 z^3-9/80 y^2 z^3,{x,-3,3},{y,-3,3},{z,-3,3},MaxRecursion->3,ViewPoint->{1,2.5,1}, Axes->False,LightSources->{{{0,0,1},RGBColor[1,0,0]}},Boxed->False]
Aquí lo tenemos:
- La segunda opción es representar la superficie cuya ecuación implícita es:
En este caso vamos a darlo directamente en rojo, sin ejes y sin caja. Para ello debemos tener ya cargado el paquete ContourPlot3D y ejecutar la siguiente orden en Mathematica:
ContourPlot3D[(2 x^2+y^2+z^2-1)^3-1/10 x^2 z^3-y^2 z^3,{x,-3,3},{y,-3,3},{z,-3,3},MaxRecursion->3,ViewPoint->{2.5,1,1}, Axes->False,LightSources->{{{0,0,1},RGBColor[1,0,0]}},Boxed->False]
Obteniendo así el corazón buscado:
Conclusión
Como podéis ver hemos conseguido nuestro objetivo: hemos conseguido que las matemáticas nos ayuden a demostrar nuestro amor a alguien. Por tanto podemos decir que hay funciones y ecuaciones que representar el amor, que lo llevan dentro, y que nos sirven para que mostremos el nuestro por alguien. No soy el único que lo piensa. En esta sección de Romantic Mathematics podéis ver las representaciones que aparecen en esta entrada y alguna más. Alvy, de Microsiervos, también piensa como yo. La gente de Neatorama tuvo mucho que ver en ello al hacer camisetas en las que el motivo principal es:

Ellos aman las matemáticas. Yo también, y además las utilizo para demostrar mi amor de una manera original, ¿verdad?






Trackback | 9 Feb, 2009
Bitacoras.com
carlos | 9 de February de 2009 | 12:13
Mi novia utiliza matematica, pero yo no se manejarlo, ¿alguien puede traducirlo para que se lo pase? Gracias
carlos | 9 de February de 2009 | 12:13
Quería decir matlab… alguien puede traducir el codigo a matlab?
Zeros | 9 de February de 2009 | 16:03
Buena entrada. Siempre me pareció muy curiosa la curva cardioide. Ya sé qué darle a mi profesor de matemáticas por su santo ^^.
Por otra parte, ¿puedo pediros que me echéis una mano? Tengo el Mathematica 6.0.3 y la representación 3D me da problemas (salen tres figuras concéntricas, que se acaban cortando con los límites de la representación).
¿qué versión usáis vosotros?
¿sabéis qué podría hacer para solucionar el problema? (lo he usado poco, así que no sé mucho acerca de él)
Un saludo
victor | 9 de February de 2009 | 19:40
“Yo también, y además las utilizo para “demostrar” mi amor de una manera original, ¿verdad?”
jejejeje, Muy Buena “demostracion”!!! (en ambos sentidos)
Roberto | 9 de February de 2009 | 20:12
Hola, quiero plotear el corazón tridimensional con winplot (no tengo mathematica) alguién me podría ayudar. No tengo ni idea del programa, pero en el enlace a Romantic Mathematics dicen que lo plotearon ahí. Gracias.
Samy | 10 de February de 2009 | 00:46
Muy bonito! Esto me recuerda lo del Ying Yang matemático.
Por cierto, Zeros si te fijas, esta no es una cardioide (la cual es bastante fácil de definir de manera polar), sino que es una curva que se forma uniendo dos funciones cartesianas.
Es más, la cardioide se parece mucho menos a un “corazón” que esta curva. Ah! y es bien divertido ver cómo se construye
No sé mucho de Mathematica, pero quizás después intente hacerlo en Maple y les muestre mis resultados.
Saludos.
^DiAmOnD^ | 10 de February de 2009 | 02:57
De Matlab no tengo mucha idea. Puede que mi amigo Juanjo, si lee esto, os pueda echar una mano.
Sobre Winplot tampoco sé nada. A ver si alguien nos puede iluminar.
Samy | 10 de February de 2009 | 07:42
Bueno, lo prometido es deuda, y aunque la verdad no prometí nada, aquí les pongo algunas capturas de lo que hice en maple basándome en lo de este artículo:
Corazón 2D
Corazón 3D 1
Corazón 3D 2
Corazón 3D 3
Las últimas 3 son el mismo ploteo sólo que le hice ajustes manualmente con las opciones de maple. Por ese motivo, aunque se ven bastante distintos, el comando es el mismo y con los mismos parámetros.
Al parecer Maple no es tan bueno como Mathematica con los ploteos de superfices. Como ven, yo tengo que indicarle cuántos puntos tendrá el poliedro que se asemeja superfice. (con “numpoints”) Si alguien sabe plotearlo de una mejor manera, estaría agradecido de que me diga, porque la verdad como que no se ve muy bien.
Saludos.
Trackback | 10 Feb, 2009
Las matemáticas románticas
Rous | 10 de February de 2009 | 08:50
Aqui os dejo como hacerlo con Maple (yo lo he probado con Maple 11)
with(plots):
implicitplot3d(funcion, x=-1.5..1.5, y=-1.5..1.5, z=-1.5..1.5,numpoints=50000,color=red);
Muy chulo¡
Rous | 10 de February de 2009 | 09:11
Ah, en Mathematica, al menos en la version 6 para plotear necesitas poner la ecuación en implicitas, poniendo en el primer argumento un ==0. Además el Light Sources no tira. Asi:
ContourPlot3D[(x^2+9/4 y^2+z^2-1)^3-x^2 z^3-9/80 y^2 z^3==0,{x,-3,3},{y,-3,3},{z,-3,3},MaxRecursion->10,ViewPoint->{1,2.5,1}, Color->RGBColor[1,0,0],Axes->False,Boxed->False]
NaaN | 10 de February de 2009 | 12:30
Qué bonito… la lástima es que si se lo enseño al afortunado que vive conmigo, no lo va a entender porque él no es matemático…
Zeros | 10 de February de 2009 | 13:44
Muchas gracias, Rous, ahora ya lo representa bien.
Samy, en cuanto a lo de cardioide, creí que era esta curva la que se llamaba cardioide (por parecerse a un corazón). Cosas de haber dejado el dibujo técnico…
Rous | 11 de February de 2009 | 09:11
Ey, yo también quiero el código en Matlab, nadie me puede ayudar?
Trackback | 11 Feb, 2009
Simple, pero… | Gaussianos
Samy | 11 de February de 2009 | 23:13
@ Rous: Lo que señalas es bastante parecido a lo que mostré yo en mi comentario anterior, no obstante, te sugiero que veas cómo queda con la opción scaling=constrained, pues así como lo dices se ve algo desproporcionado (se ve gordito, para ser preciso). Para los que no sepan, esta opción hace que la proporción entre las unidades de los ejes X,Y e Z sea 1:1:1.
@ NaaN: Estoy seguro de que no hay que ser matemático para entenderlo. Yo mismo no lo soy (de hecho estudio algo totalmente distinto) y como me gusta, averiguo más o menos de qué se trata. Te aseguro que si a tu compañero le es atractivo esto, no te será muy difícil explicarle en qué consiste.
Como anécdota te cuento que un amigo mío aprendió a usar Matlab con la ayuda de un amigo de él (conocido mío) que es estudiante de Derecho y que le encantan las matemáticas.
@ Zeros: en todo caso, no estás muy lejos de la verdad porque hasta donde sé, la cardioide sí recibe su nombre por la semejanza a un corazón.
Trackback | 14 Feb, 2009
El Blog de NoSoloMates
Trackback | 14 Feb, 2009
“Matemáticas Románticas” con MATLAB « Fralbe’s Blog
Francisco | 14 de February de 2009 | 23:54
Hola, el post es muy interesante. Como aporte, les dejo el código para graficar en matlab, por ahora solo hice la parte en 2D, espero luego poder agregar la parte 3D y de fractales del post en ingles. El link es:
http://fralbe.wordpress.com/2009/02/14/matematicas-romanticas-con-matlab/
Saludos cordiales!!!
KiomaR | 17 de February de 2009 | 03:01
Ñero estan cheveres todos los codigos voy a copiar y hacerlos correr, d seguro enamora a mi compañera de clase atractiva y bien pilas de mi clase.
Arnaldo | 5 de March de 2009 | 02:07
Aquí les dejo el código en Matlab:
x=[-2:0.01:2];
f=sqrt(1-(abs(x)-1).^2);
g=acos(1-abs(x))-pi;
plot(x,f,’r',x,g,’r')
Citlalli | 24 de April de 2009 | 23:45
HOLA HOLA, NO SE Q VERSION DE MATHEMATICA MANEJES, PERO LA QUE YO MANEJO NO ACEPTA EL CODIGO QUE TU PROPONES, UTILIZO LA 6.0 Y AQUÍ RE UTILIZA REGIONPLOT3D, Y LIGHTSOURCES SE UTILIZA COMO LIGHTING, Y EL CODIGO MARCA OTRO ERROR Q NO RECUERDO, PERO INSISTO CREO Q ES POR LA VERSION QUE MANEJAMOS
RegionPlot3D[(2 x^2 + y^2 + z^2 - 1)^3 - 1/10 x^2 z^3 -
y^2 z^3, {x, -2, 2}, {y, -2, 2}, {z, -2, 2}, MaxRecursion -> 3,
ViewPoint -> {1, 2.5, 1}, Axes -> True, Lighting -> Automatic,
Mesh -> None, AxesLabel -> {x, y, z},
PlotStyle -> FaceForm[{Black, Specularity[Red, 8]}]]
A ESTE CODIGO LO GRAFICA CON UN COLOR NEGRO CON BRILLO ROJO
^DiAmOnD^ | 25 de April de 2009 | 05:56
Citlalli, utilizo la versión 5 de Mathematica. Posiblemente en la 6 haya habido alguna que otra modificación, pero te aseguro que en la 5 funcionan los códigos que hay en el post
.
Citlalli | 29 de April de 2009 | 03:49
oie y no te ha surgido la curiosidad de calcular su volumen???
digo es q necesito sacarlo y no puedo :S con integrales multiples, sabes hacerlo?
Trackback | 31 Dec, 2009
(Lo que yo considero) Lo mejor de 2009 en Gaussianos | Gaussianos
Trackback | 14 Feb, 2010
Matemáticas románticas « errantes en gris
carmona | 28 de March de 2010 | 23:27
Buenas gente.
oigan como ven la ecuación del corazon en tres dimenciones es de forma implicita, pero noy hay alguna forma de ponela todo en fuencion de Z
pues esta graficadora no acepta ecuaciones de forma implicita
http://www.fooplot.com/index3d.php?
juancho | 15 de June de 2010 | 06:45
yo lo hice en matlab, es sumamente sencillo (2-D) se usa la funcion ezplot(fun,[xmin xmax]), ya que es en 2-D la fun solo se introduce en fun de x y no se debe iguar a nada es, despues de introduce hold on y se reutiliza el comando ezplot de nuevo para graficar la otra parte del corazon. Si se desea hacer con movimiento se usa un ciclo infinito while 1, no se si me entiendan pero si estan relacionados con matlab les servira. suerte!!!!
juancho | 15 de June de 2010 | 06:47
clc
clear all
close all
x=-2;
while 1
y=(1-(abs(x)-1)^2)^(1/2);
t=acos(1-abs(x))-pi;
figure(1)
plot(x,y,’r< ')
hold on
figure(1)
plot(x,t,'r<')
hold on
x=x+0.05;
axis([-3 3 -4 2])
if x>2.1
break
end
end
Trackback | 26 Jul, 2010
Gaussianos cumple 3 años de vida | Gaussianos