3
C 언어를 사용하여 컴퓨터 그래픽에서 자기 유사 도형에 대한 프로그래밍 코드를 도와 줄 사람이 있습니까?C 언어를 사용하여 컴퓨터 그래픽에서 자기 유사 도형 코딩하기
C 언어를 사용하여 컴퓨터 그래픽에서 자기 유사 도형에 대한 프로그래밍 코드를 도와 줄 사람이 있습니까?C 언어를 사용하여 컴퓨터 그래픽에서 자기 유사 도형 코딩하기
시작하기에 충분합니다. 이것은 아스키에 설정된 줄리아를 묘사합니다. 대신 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);
}
}
누군가는 아마 할 수 있습니다. 아마도 좀 더 구체적인 질문을 할 수 있을까요? –
stat here - http://en.wikipedia.org/wiki/Fractals :: 다음으로 돌아와 특정 쿼리를 게시하십시오. – zellio