Calabaza para Halloween con Mathematica

Como todos sabéis mañana es 1 de noviembre, por lo que esta noche es la temida noche de Halloween, fiesta eminentemente norteamericana (Estados Unidos, Canadá y norte de México) que desde hace un tiempo también se celebra en otros países, como España, aunque no con el mismo significado exactamente. Bueno, no me extiendo más, en la entrada de Halloween de la Wikipedia (en español) podéis encontrar más información sobre esta celebración.

Lo que es indudable es que la calabaza es el objeto decorativo más típico y más común de Halloween. Todos hemos visto calabazas de Halloween, en las que se tallan caras siniestras. Y la verdad es que algunas de ellas son muy elaboradas y representan trabajos muy buenos.

¿Y si no somos buenos en esto de tallar calabazas? ¿No tenemos derecho a nuestra calabaza de Halloween en ese caso? Pues sí, aunque sea de manera virtual vamos a ver en este post una manera de crear una calabaza de Halloween sin necesidad de ser un crack del tallado de este tipo de planta. De hecho ni siquiera vamos a necesitar una calabaza, lo vamos a hacer con Mathematica. Vi cómo hacerlo en este post del blog de Wolfram Research hace unos días y no me he podido resistir a rehacerlo yo y a enseñarlo aquí.

Lo que voy a hacer en este post es dejaros el programa en Mathematica que aparece en esa entrada, junto con alguna imagen y explicación, necesario para dibujar una calabaza. La segunda parte, la de ponerle “cara” a dicha calabaza, os la dejo a quienes tengáis Mathematica 8.0.

Comenzamos creando la sección horizontal de la calabaza con este código:

pts = With[{n = 25, d = 0.12},
N[Join @@
Table[{{Cos[2 k Pi/n],
Sin[2 k Pi/n]}, (1 + d) {Cos[2 (k + 1/4) Pi/n],
Sin[2 (k + 1/4) Pi/n]}, (1 + d) {Cos[2 (k + 3/4) Pi/n],
Sin[2 (k + 3/4) Pi/n]}, {Cos[2 (k + 1) Pi/n],
Sin[2 (k + 1) Pi/n]}}, {k, 0, n - 1}]]];

Podemos ver cómo queda con

Graphics[BSplineCurve[pts], ImageSize -> Small]

En el caso anterior nos queda lo siguiente:

Cambiando los valores de n y d variamos esta sección horizontal.

Creamos ahora el perfil vertical de la calabaza. Comenzamos con este código:

Manipulate[
Graphics[{BSplineCurve[profile], Blue, Dashed, Line[profile]},
PlotRange -> {{0, 2}, {-1.25, 1.25}}, Frame -> True,
ImageSize ->
Small], {{profile, {{0, -0.8}, {1.2, -1.2}, {1.5, -0.5}, {1.2,
1.2}, {0, 0.8}}}, Locator}]

que nos dará esta forma:

Las coordenadas de esos cinco puntos pueden cambiarse, dado lugar a otras formas.

Vamos ya a crear nuestra calabaza. Primero ejecutamos este código:

pts3d = With[{profile = {{0, -0.8}, {1.2, -3.2}, {1.5, -0.5}, {1.2,
1.2}, {0, 0.8}}},
N[Table[Table[
Append[Sqrt[Abs[pf[[1]]^2]] pts[[i]], pf[[2]]], {i,
Length[pts]}], {pf, profile}]]];

y después el código que nos dará nuestra superficie:

pumpkin[p3d_] :=
Graphics3D[{EdgeForm[], Orange, Specularity[White, 20],
BSplineSurface[p3d], Green,
With[{pt = {0, 0, p3d[[-1, -1, 3]]}},
Tube[BSplineCurve[{pt, pt + {0, 0, 0.3}, pt + {0.2, 0.2, 0.4}}],
0.05]]}, ImageSize -> Medium,Boxed->False];

Veremos nuestra calabaza ejecutando

pumpkin[pts3d]

Aquí está la que queda con todo este código:

Ha quedado bien, ¿verdad?

Bien, como he comentado antes, variando algunos de los valores podemos conseguir que nuestra calabaza tome otras formas. Aquí os dejo algunos ejemplos:

La segunda parte del post que enlazaba antes explica cómo ponerle cara a nuestra calabaza. Algo así:

Por desgracia no tengo Mathematica 8.0 para probarla, pero en esa página tenéis el código para intentarlo vosotros. Algunos de los trabajos que han hecho en este sentido podéis verlos en esta imagen:

La capacidad de Mathematica nunca dejará de sorprenderme.


¿Alguna otra idea interesante para modificar esta construcción de una calabaza?

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.

9 Comentarios

  1. ¿Ya va por el 8.0? Yo había visto y usado el 6 y el 7… pero sigo con el 5.

    Por cierto, hay una errata justo encima del primer código de Mathematica: “creado” -> “creando”.

    ¡Saludos!

    Publica una respuesta
  2. Funcionar, funciona, que lo acabo de probar. Pero no necesitas Mathematica, te basta con descargar gratuitamente el CDF player del enlace que figura en el artículo original en inglés.

    Publica una respuesta
  3. 161803398874, pues sí, ya va por el 8.0 :). ¿Cuál se usa por Granada ahora?

    AlfonsoFR, sí, cierto, pero lo que yo quería era rehacerlo entero en Mathematica, y no he podido :(.

    Publica una respuesta
  4. Es el lastre que tiene tener que pagar licencias, que las actualizaciones llegan con mucho retraso, ya que hay que recomprar las licencias para la nueva versión. Lo mejor es tirar de software libre, en este caso, el equivalente es maxima (http://es.wikipedia.org/wiki/Maxima).

    Publica una respuesta
  5. Se te olvidó el enlace ~_^

    … en Mathematica que aparece en ese post, junt …

    Publica una respuesta
  6. Gaussito, cierto, pero ya que trabajas con Mathematica hazlo con una versión relativamente actual. Repito: en 10 años el programa ha pasado de la 4.0 a la 8.0, y donde yo estudié han pasado de la 2.2 a la 3.0.

    hleq, me refería al post de Wolfram Research que enlacé antes.

    Publica una respuesta

Trackbacks/Pingbacks

  1. Bitacoras.com - Información Bitacoras.com... Valora en Bitacoras.com: No hay resumen disponible para esta anotación...

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 *