2010-04-08 1 views
3

C 언어를 사용하여 컴퓨터 그래픽에서 자기 유사 도형에 대한 프로그래밍 코드를 도와 줄 사람이 있습니까?C 언어를 사용하여 컴퓨터 그래픽에서 자기 유사 도형 코딩하기

+0

누군가는 아마 할 수 있습니다. 아마도 좀 더 구체적인 질문을 할 수 있을까요? –

+0

stat here - http://en.wikipedia.org/wiki/Fractals :: 다음으로 돌아와 특정 쿼리를 게시하십시오. – zellio

답변

3

시작하기에 충분합니다. 이것은 아스키에 설정된 줄리아를 묘사합니다. 대신 mandelbrot 세트를 플롯하려면 z 대신 c를 반복합니다.

#include <stdio.h> 

typedef struct tag_complex 
{ 
    double real, imag; 
} complex; 

static complex complex_mul(
const complex* a, 
const complex* b) 
{ 
    /* a * b = (a_real + i*a_imag)(b_real + i*b_imag) */ 
    /* i*i = -1, hence imag*imag becomes -(imag*imag) */  
    complex ret; 

    ret.real = a->real*b->real - a->imag*b->imag; 
    ret.imag = a->real*b->imag + a->imag*b->real; 
    return ret; 
} 

static complex complex_add(
const complex* a, 
const complex* b) 
{ 
    complex ret; 

    ret.real = a->real + b->real; 
    ret.imag = a->imag + b->imag; 
    return ret; 
} 

static int julia(
complex* z, 
const complex* c, 
int maxIter) 
{ 
    double lengthSquared; 
    int iter = 0; 

    while(iter < maxIter){ 
    ++iter; 
    *z = complex_mul(z, z); 
    *z = complex_add(z, c); 
    lengthSquared = z->real*z->real + z->imag*z->imag; 
    /* If the point escapes the radius 2 
     in the complex plane, it's in the set */ 
    if(lengthSquared > 4.0) 
     return iter; 
    } 
    /* Point didn't escape. Either it's not in the set, 
    or we need more iterations.*/ 
    return 0; 
} 

int main(int argc, char* argv[]) 
{ 
    const int width = 80; 
    const int height = 40; 
    const int maxIter = 512; 

    /* step in the range [0, 4] since the set 
    lives within [-2, 2] in the complex space */ 
    const double step_height = 4.0/(double)height; 
    const double step_width = 4.0/(double)width; 

    /*c is constant for julia sets. z is iterated over */ 
    const complex c = {0.285, 0.0}; 

    complex z; 
    int index; 
    char ch; 
    for(int j=0; j<height; ++j){ 
    for(int i=0; i<width; ++i){ 
     /* Get interpolants within [-2, 2] range */ 
     z.imag = ((double)j * step_height) - 2.0; 
     z.real = ((double)i * step_width) - 2.0; 
     index = julia(&z, &c, maxIter); 
     ch = (index % ('Z' - ' ')) + ' '; 
     printf("%c", ch); 
    } 
    printf("\n"); 
    fflush(stdout); 
    } 
} 
관련 문제