blog en 5 minutos

Demo blog

Batman, ecuaciones y python

Ecuación Batman

Batman siempre fue mi superhéroe favorito porque es uno de los pocos héroes que no posee ningún superpoder, sino que debe recurrir a su intelecto y a la ciencia para construir las bati-herramientas que utiliza para combatir al crimen. Además posee ese toque de oscuridad producto de la dualidad entre realizar el bien, protegiendo a la gente de ciudad gótica, y su sed de venganza contra el crimen y la corrupción que acabó con la vida de su familia.

Es un personaje con muchos recursos, en cada nueva aparación podemos verlo utilizar nuevas y muy modernas bati-herramientas; su intelecto es tan agudo que incluso escondió una ecuación matemática en su bati-señal!!

La ecuación de batman fue creada por el profesor de matemáticas Matthew Register y se pupolarizó a través de un post de uno de sus alumnos en la red social reddit; su expesión matemática es la siguiente:

$$ ((\frac{x}{7})^2 \cdot \sqrt{\frac{||x|-3|}{(|x|-3)}}+ (\frac{y}{3})^2 \cdot \sqrt{\frac{|y+3 \cdot \frac{\sqrt{33}}{7}|}{y+3 \cdot \frac{\sqrt{33}}{7}}}-1) \cdot (|\frac{x}{2}|-((3 \cdot \frac{\sqrt{33}-7)}{112}) \cdot x^2-3+\sqrt{1-(||x|-2|-1)^2}-y) \cdot (9 \cdot \sqrt{\frac{|(|x|-1) \cdot (|x|-0.75)|}{((1-|x|)*(|x|-0.75))}}-8 \cdot |x|-y) \cdot (3 \cdot |x|+0.75 \cdot \sqrt{\frac{|(|x|-0.75) \cdot (|x|-0.5)|}{((0.75-|x|) \cdot (|x|-0.5))}}-y) \cdot (2.25 \cdot \sqrt{\frac{|(x-0.5) \cdot (x+0.5)|}{((0.5-x) \cdot (0.5+x))}}-y) \cdot (\frac{6 \cdot \sqrt{10}}{7}+(1.5-0.5 \cdot |x|) \cdot \sqrt{\frac{||x|-1|}{|x|-1}}-(\frac{6 \cdot \sqrt{10}}{14}) \cdot \sqrt{4-(|x|-1)^2}-y) =0 $$

Si bien a simple vista la ecuación parace sumamente compleja e imposible de graficar, la misma se puede descomponer en seis curvas distintas, mucho más simples.

La primera de estas curvas, es la función del elipse $(\frac{x}{7})^2 + (\frac{y}{3})^2 = 1$, restringida a la región $\sqrt{\frac{||x|-3|}{(|x|-3)}}$ y $\sqrt{\frac{|y+3 \cdot \frac{\sqrt{33}}{7}|}{y+3 \cdot \frac{\sqrt{33}}{7}}}$ para cortar la parte central.

Los cinco términos siguientes pueden ser entendidos como simples funciones de x, tres de los cuales son lineales. Por ejemplo, la siguente función es la que grafica las curvas de la parte inferior de la bati-señal.

$y = |\frac{x}{2}|-(\frac{3 \cdot \sqrt{33} -7}{112})\cdot x^2 - 3 + \sqrt{1-(||x|-2| -1)^2}$

Las restantes ecuaciones de las curvas que completan el gráfico, son las siguientes:

$y = \frac{6\cdot\sqrt{10}}{7} + (-0.5|x| + 1.5) - \frac{3\cdot\sqrt{10}}{7}\cdot\sqrt{4 - (|x|-1)^2}, |x| > 1$

$y = 9 -8|x|, 0.75 < |x| < 1$

$y = 3|x| + 0.75, 0.5 < |x| < 0.75$

$y = 2.25, |x| < 0.5$

La ecuación de batman puede ser facilmente graficada utilizando Matplotlib del siguiente modo:

In [1]:
# graficos embebidos
%matplotlib inline  
In [2]:
# Importando lo necesario para los cálculos
import matplotlib.pyplot as plt
from numpy import sqrt 
from numpy import meshgrid
from numpy import arange
In [3]:
# Graficando la ecuación de Batman.
xs = arange(-7.25, 7.25, 0.01)
ys = arange(-5, 5, 0.01)
x, y = meshgrid(xs, ys)

eq1 = ((x/7)**2*sqrt(abs(abs(x)-3)/(abs(x)-3))+(y/3)**2*sqrt(abs(y+3/7*sqrt(33))/(y+3/7*sqrt(33)))-1)
eq2 = (abs(x/2)-((3*sqrt(33)-7)/112)*x**2-3+sqrt(1-(abs(abs(x)-2)-1)**2)-y)
eq3 = (9*sqrt(abs((abs(x)-1)*(abs(x)-.75))/((1-abs(x))*(abs(x)-.75)))-8*abs(x)-y)
eq4 = (3*abs(x)+.75*sqrt(abs((abs(x)-.75)*(abs(x)-.5))/((.75-abs(x))*(abs(x)-.5)))-y)
eq5 = (2.25*sqrt(abs((x-.5)*(x+.5))/((.5-x)*(.5+x)))-y)
eq6 = (6*sqrt(10)/7+(1.5-.5*abs(x))*sqrt(abs(abs(x)-1)/(abs(x)-1))-(6*sqrt(10)/14)*sqrt(4-(abs(x)-1)**2)-y)

for f, c in [(eq1, "red"), (eq2, "purple"), (eq3, "green"),
             (eq4, "blue"), (eq5, "orange"), (eq6, "black")]:
    plt.contour(x, y, f, [0], colors=c)

plt.show()

Ahora ya saben...si están en algún apuro y necesitan la ayuda del bati-héroe, solo necesitan graficar una ecuación para llamarlo con la bati-señal!

Saludos!

Este post fue escrito utilizando IPython notebook. Pueden descargar este notebook o ver su version estática en nbviewer.