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?

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.

37 Comentarios

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

    Publica una respuesta
  2. Quería decir matlab… alguien puede traducir el codigo a matlab?

    Publica una respuesta
  3. 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

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

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

    Publica una respuesta
  5. 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.

    Publica una respuesta
  6. 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.

    Publica una respuesta
  7. 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.

    Publica una respuesta
  8. 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.

    Publica una respuesta
  9. 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¡

    Publica una respuesta
  10. 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]

    Publica una respuesta
  11. 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…

    Publica una respuesta
  12. 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… 😛

    Publica una respuesta
  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.

    Publica una respuesta
  14. Ñ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.

    Publica una respuesta
  15. 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’)

    Publica una respuesta
  16. 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 😛

    Publica una respuesta
  17. 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 :).

    Publica una respuesta
  18. 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?

    Publica una respuesta
  19. 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?

    Publica una respuesta
  20. 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!!!!

    Publica una respuesta
  21. 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

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

    Publica una respuesta
  23. muchas gracias samy…me sivio al 100% en maple 12 y se ve muy bonito 😀

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

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

    Publica una respuesta
  26. 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 );

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

    Publica una respuesta
  28. %set up mesh
    n=100;
    x=linspace(-2,2,n);
    y=linspace(-2,2,n);
    z=linspace(-2,2,n);
    [X,Y,Z]=ndgrid(x,y,z);
    %Compute function at every point in mesh
    F = ( X.^2+10/4.*Y.^2+Z.^2-1).^3-X.^2.*(3/2).*Z.^3-10/(80).*Y.^2.*Z.^3;
    %generate plot
    f1 = figure;
    isosurface(F,0)
    view([-67.5 2]);
    %diviertanse con los colores si lo quieren rojo solo cambien la palabra hsv que esta abajo por flag
    colormap hsv %copper, cool, hot, pink, flag, bone, hsv
    %set(findobj(‘Type’,’patch’),’FaceColor’,[.31 .4 .58])
    light(‘Parent’,gca,…
    ‘Position’,[16.3 -103.1 -384.12]);

    Publica una respuesta

Trackbacks/Pingbacks

  1. Bitacoras.com - Información Bitacoras.com... Si lo deseas, puedes hacer click para valorar este post en Bitacoras.com. Gracias....
  2. Las matemáticas románticas - [...] Las matemáticas románticasgaussianos.com/las-matematicas-romanticas-ii/ por Wolvington hace pocos segundos [...]
  3. Simple, pero… | Gaussianos - [...] 1 en Las matemáticas románticas (II) [...]
  4. El Blog de NoSoloMates - [...] tipo se reproduce como las setas. Algunos, como Gaussianos, se han adelantado y ya lo publicaron hace algunos días,…
  5. “Matemáticas Románticas” con MATLAB « Fralbe’s Blog - [...] Francisco Sandoval in General. trackback Aprovechando que justo en este día rebice el post sobre matemáticas románticas,…
  6. (Lo que yo considero) Lo mejor de 2009 en Gaussianos | Gaussianos - [...] superficies en tres dimensiones Imprime los artículos de Gaussianos Las matemáticas románticas (II) Cuidado con algunos [...]
  7. Matemáticas románticas « errantes en gris - [...] Vía| gaussianos [...]
  8. Gaussianos cumple 3 años de vida | Gaussianos - [...] Las matemáticas románticas (II) [...]
  9. Las matemáticas | ¡Qué siento! - [...] POr si alguien quiere, puede consultar la lectura del artículo “las matemáticas románticas“ Esta entrada fue publicada…
  10. Las matemáticas románticas (IV) - Gaussianos | Gaussianos - [...] cómo no, algunas de las que podemos admirar en Las matemáticas románticas (II), donde vimos hasta corazones en [...]
  11. Mathics, una alternativa libre a Mathematica y Matlab muy interesante...y en tu propio navegador - Gaussianos - [...] Con ello podemos dibujar una ciloide, como en la imagen anterior, o, por qué no, un corazón (como uno…
  12. Matemáticas y San Valentín | MÁS MATES .net - […] Y si quieres lucirte y darle diferentes tipos de funciones de corazones, pues puedes investigar más y diseñar hasta…

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 *