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?
¿Te ha gustado la entrada? Puedes invitarme a un café, Gauss te lo agradecerá 😉
Información Bitacoras.com…
Valora en Bitacoras.com: No hay resumen disponible para esta anotación…
¿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!
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.
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 :(.
@gaussianos… pues en Granada lleva usándose el 3 desde hace ya unos mil años… Como te lo cuento.
La 3…madre mía. En mis tiempos, hace 10 años más o menos, si usaba la 2.2…
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).
Se te olvidó el enlace ~_^
… en Mathematica que aparece en ese post, junt …
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.
Happy Halloween!!!
1010011010