본문 바로가기
Programming/Win32

Win32 Sierpinsky Triangle 그리기

by 작은별하나 2014. 4. 29.
반응형

프랙탈을 그리는데 일반적으로 많이들 해보는 것이 코시곡선, 맨델브로트 집합 등인 듯 합니다.

여기서는 간단하게 Win32 API를 이용해서 Sierpinsky 삼각형을 그려보도록 합니다.
일단 이 프로그램을 이해하기 위해서는 Win32의 기본적인 프로그램 구조를 알아야 하겠죠.
프랙탈 자체가 자기 복제이기 때문에 이미지를 축소시켜서 복사하는 방법도 있겠지만, 여기서는 순수하게 라인만 가지고 그려봅니다.
프랙탈이 자기 복제이므로, C/C++ 프로그램에서도 자기복제가 되는 자기호출함수를 이용해서 프로그램을 짭니다.  정삼각형을 자기복제를 이용해서 그리면, 전체를 그리지 않아도 훌륭하게 완성됩니다.
여기서는 가장 중요한 키 함수만 소개하면 다음과 같습니다.

 

void DrawTriangle(HDC hdc, float x, float y, float r, int t)
{
	if( t == 1 )
	{
		MoveToEx(hdc, x, y-r, 0);
		for( int i = 1 ; i < 3 ; i++ )
		{
			LineTo(hdc, x+r*sin(2*i*M_PI/3.0)+0.5, y-r*cos(2*i*M_PI/3.0)+0.5);
		}
		LineTo(hdc, x, y-r);
		return;
	}
	for( int i = 0 ; i < 3 ; i++ )
	{
		DrawTriangle(hdc, x+r*sin(2*i*M_PI/3.0)/2.0, y-r*cos(2*i*M_PI/3.0)/2.0, r/2.0f, t-1);
	}
}

 

hdc는 WM_PAINT에서 BeginPaint로 받은 DC를 받으면 됩니다.

x, y는 삼각형의 중심값입니다.  r은 삼각형 중심에서 꼭지점에 이르는 거리입니다.  t는 반드시 1 이상이어야 하고, 얼마나 삼각형을 더 그리냐입니다.

예를 들어서 작은 삼각형을 4단계까지 그리려면

DrawTriangle(hdc, 200, 200, 200, 4);

로 WM_PAINT의 BeginPaint 호출 뒤에 불러주시면 됩니다.

 

t 가 1일 때 삼각형을 그립니다.  이 부분이 재귀함수의 탈출조건입니다.

삼각형을 그리는 방법은 극좌표계를 따랐습니다.

재귀호출 부분도 삼각형을 그리는 것과 동일한 방식을 따랐습니다.

 

윈도즈 프로그램이다보니 Visual Studio 2010 프로젝트를 첨부합니다.

결과화면은 다음과 같습니다.

 

 

 

728x90

'Programming > Win32' 카테고리의 다른 글

트레이 프로그램 작성  (0) 2011.11.28

댓글