본문 바로가기
programming language/MATLAB

MATLAB Batman Equation

by __observer__ 2013. 10. 20.
반응형

MATLAB 을 사용해서 또 어떤걸 해 볼까~~ 하고 찾아보던 중~ batman 함수를 그려보면 잼 있겠다는 생각이 들어서 검색을 해 봤습니다.

 

역시나 무수한 자료들이 나오더군요.

 

아래 주소의 내용에는 MATLAB 코드도 있어서 한번 그려보기로 했습니다.

 

http://gauravtiwari.org/2011/09/24/how-to-draw-the-famous-batman-equation/

 

코드는 다음과 같습니다. 아래 코드가 정상적으로 실행되기 위해서는 Symbolic Math Toolbox 가 설치되어 있어야 합니다.

 

clf; clc; clear all;

syms x y

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);

 

axes('Xlim', [-7.25 7.25], 'Ylim', [-5 5]); hold on

ezplot(eq1,[-8 8 -3*sqrt(33)/7 6-4*sqrt(33)/7]);

ezplot(eq2,[-4 4]);

ezplot(eq3,[-1 -0.75 -5 5]);

ezplot(eq3,[0.75 1 -5 5]);

ezplot(eq4,[-0.75 0.75 2.25 5]);

ezplot(eq5,[-0.5 0.5 -5 5]);

ezplot(eq6,[-3 -1 -5 5]);

ezplot(eq6,[1 3 -5 5]);

colormap([0 0 1]), title('Batman'); xlabel(''); ylabel(''); hold off

 

실행해보니 이런 결과가 나오더군요.

 

 

뭐 너무 유명한 그림이다 보니 아래 주소에서도 batman 함수를 다양한 방법으로 그려 볼 수 있는 스크립트가 있더군요.

 

http://www.mathworks.com/matlabcentral/fileexchange/33124-batman-equation-the-legend

 

위 주소에 가셔서 아래 그림과 같이 코드를 다운로드 받을 수 있습니다.

 

다운로드 받은 zip 파일을 압축해제하고~ plotbatmaneq.m 파일을 실행해 보시면 아래 그림과 같은 결과를 얻을 수 있습니다.

 

아래 그림은 octave 에서 그려본건데요~ MATLAB 에 비해 약간 시간은 걸렸고~ 아래 그림과 같은 0 나누기 에러메시지는 나왔지만~

 

결과는 정상적으로 나오더군요.

 

재미있죠~

 

그 외 참조자료

 

http://www.wolframalpha.com/input/?i=batman+function&lk=4&num=1



반응형

댓글