noticias y última hora

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:

f(x)= \sqrt{1-(|x|-1)^2} (parte del dibujo contenida en el semiplano superior)
g(x)=arccos(1-|x|)-  \pi (parte del dibujo contenida en el semiplano inferior)

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:

Corazón en 2D

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:

Corazón rojo en 2D

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:

Corazón rojo relleno en 2D

¿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: \left ( x^2+\cfrac{9}{4}y^2+z^2-1 \right )^3-x^2 \;z^3-\cfrac{9}{80}y^2 \; z^3=0

    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:

    Corazón en 3D

    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:

    Corazón rojo en 3D-1

  • La segunda opción es representar la superficie cuya ecuación implícita es: \left ( 2 \; x^2+y^2+z^2-1 \right)^3-\cfrac{1}{10}x^2 \; z^3-y^2 \; z^3=0

    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:

    Corazón rojo en 3D-2

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:

I Love Math

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

Share

44 comentarios

  1. Trackback | 9 feb, 2009

    Bitacoras.com

  2. carlos | 9 de febrero de 2009 | 12:13

    Vótalo Thumb up 0

    Mi novia utiliza matematica, pero yo no se manejarlo, ¿alguien puede traducirlo para que se lo pase? Gracias

  3. carlos | 9 de febrero de 2009 | 12:13

    Vótalo Thumb up 0

    Quería decir matlab… alguien puede traducir el codigo a matlab?

  4. Zeros | 9 de febrero de 2009 | 16:03

    Vótalo Thumb up 0

    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

  5. victor | 9 de febrero de 2009 | 19:40

    Vótalo Thumb up 0

    “Yo también, y además las utilizo para “demostrar” mi amor de una manera original, ¿verdad?”

    jejejeje, Muy Buena “demostracion”!!! (en ambos sentidos)

  6. Roberto | 9 de febrero de 2009 | 20:12

    Vótalo Thumb up 0

    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.

  7. Samy | 10 de febrero de 2009 | 00:46

    Vótalo Thumb up 0

    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.

  8. ^DiAmOnD^ | 10 de febrero de 2009 | 02:57

    Vótalo Thumb up 0

    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.

  9. Samy | 10 de febrero de 2009 | 07:42

    Vótalo Thumb up 0

    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.

  10. Trackback | 10 feb, 2009

    Las matemáticas románticas

  11. Rous | 10 de febrero de 2009 | 08:50

    Vótalo Thumb up 0

    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¡

  12. Rous | 10 de febrero de 2009 | 09:11

    Vótalo Thumb up 0

    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]

  13. NaaN | 10 de febrero de 2009 | 12:30

    Vótalo Thumb up 0

    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…

  14. Zeros | 10 de febrero de 2009 | 13:44

    Vótalo Thumb up 0

    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… :P

  15. Rous | 11 de febrero de 2009 | 09:11

    Vótalo Thumb up 0

    Ey, yo también quiero el código en Matlab, nadie me puede ayudar?

  16. Trackback | 11 feb, 2009

    Simple, pero… | Gaussianos

  17. Samy | 11 de febrero de 2009 | 23:13

    Vótalo Thumb up 0

    @ 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.

  18. Trackback | 14 feb, 2009

    El Blog de NoSoloMates

  19. Trackback | 14 feb, 2009

    “Matemáticas Románticas” con MATLAB « Fralbe’s Blog

  20. Francisco | 14 de febrero de 2009 | 23:54

    Vótalo Thumb up 0

    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!!!

  21. KiomaR | 17 de febrero de 2009 | 03:01

    Vótalo Thumb up 0

    Ñ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.

  22. Arnaldo | 5 de marzo de 2009 | 02:07

    Vótalo Thumb up 0

    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')

  23. Citlalli | 24 de abril de 2009 | 23:45

    Vótalo Thumb up 0

    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 :P

  24. ^DiAmOnD^ | 25 de abril de 2009 | 05:56

    Vótalo Thumb up 0

    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 :) .

  25. Citlalli | 29 de abril de 2009 | 03:49

    Vótalo Thumb up 1

    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?

  26. Trackback | 31 dic, 2009

    (Lo que yo considero) Lo mejor de 2009 en Gaussianos | Gaussianos

  27. Trackback | 14 feb, 2010

    Matemáticas románticas « errantes en gris

  28. carmona | 28 de marzo de 2010 | 23:27

    Vótalo Thumb up 0

    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?

  29. juancho | 15 de junio de 2010 | 06:45

    Vótalo Thumb up 0

    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!!!!

  30. juancho | 15 de junio de 2010 | 06:47

    Vótalo Thumb up 0

    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

  31. Trackback | 26 jul, 2010

    Gaussianos cumple 3 años de vida | Gaussianos

  32. Trackback | 6 nov, 2010

    Las matemáticas | ¡Qué siento!

  33. will | 14 de febrero de 2011 | 11:25

    Vótalo Thumb up 0

    hola, este … como encontraron esa funcion? D:

  34. gaussianos | 14 de febrero de 2011 | 15:37

    Vótalo Thumb up 0

    Pues si te digo la verdad no sé cómo la encontraron. Yo la tomé de una página donde aparecía :)

  35. yulian | 14 de febrero de 2011 | 23:05

    Vótalo Thumb up 0

    muchas gracias samy…me sivio al 100% en maple 12 y se ve muy bonito :D

  36. Alexander | 3 de noviembre de 2011 | 02:10

    Vótalo Thumb up 0

    Intento hacerlo como una animación, donde se achique y se agrande, pero todo lo que se me ha ocurrido ha fallado, alguna idea?

  37. gaussianos | 3 de noviembre de 2011 | 02:24

    Vótalo Thumb up 0

    Ahora mismo ni idea Alexander, pero es interesante lo que intentas hacer. Estaría bien que si consigues hacerlo nos lo dijeras :) .

  38. Alexander | 3 de noviembre de 2011 | 02:45

    Vótalo Thumb up 0

    si lo logro, avisaré :D

  39. Alexander | 4 de noviembre de 2011 | 01:09

    Vótalo Thumb up 0

    Bueno, logré hacer que aparezca y desaparezca pero me sale de muy mala calidad. Lo que hice fue lo siguiente, tomando la ecuación:
    ((x^2+9/4*y^2+z^2-1)^3-x^2*z^3-9/80*y^2*z^3)=0 , y cambie ese “1″ por un abs(sin(w)), de modo que varíe entre 0 y 1, y w una cuarta variable que es la que hace la animación, por lo que queda así:
    (x^2+9/4*y^2+z^2-abs(sin(w)))^3-x^2*z^3+9/80*y^2*z^3 = 0 , de esta forma cuando w = 0 + k*pi el corazón no está y en (2*k-1)*pi/2 está el corazón completo.
    No tengo mathematica asique lo hice en maple, mi comando quedo así:

    plots[:-animate]( ‘plots[:-implicitplot3d]‘, [(x^2+9/4*y^2+z^2-abs(sin(w)))^3-x^2*z^3+9/80*y^2*z^3 = 0, x = -1.15 .. 1.15, y = -1.2 .. 1.2, z = -1.25 .. 1.25, style = PATCHNOGRID, color = "Red", labels = [x, y, z]], w = 0 .. Pi, frames=70, scaling=constrained, numpoints=100000,lightmodel=light1 );

  40. gaussianos | 4 de noviembre de 2011 | 04:19

    Vótalo Thumb up 0

    Acabo de descubrir el comando Animate de Mathematica, que funciona de forma parecida a lo que comentas, Alexander.

  41. Trackback | 14 feb, 2012

    Las matemáticas románticas (IV) - Gaussianos | Gaussianos

  42. darcy | 5 de mayo de 2012 | 22:30

    Vótalo Thumb up 0

    bueno que lindo corazon

  43. richel | 19 de septiembre de 2012 | 01:41

    Vótalo Thumb up 0

    OOOOOOOOOOO como se hace ese corazòn de bonito

  44. Trackback | 20 sep, 2012

    Mathics, una alternativa libre a Mathematica y Matlab muy interesante...y en tu propio navegador - Gaussianos

Escribe un comentario

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. Utiliza la Vista Previa antes de publicar tu comentario para asegurarte de que las fórmulas están correctamente escritas.