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?

Print Friendly, PDF & Email