예제 #1
0
void draw_fractal(int num) {
    switch (num) {
        case 0:
            glRectf(-1, -1, -0.6, 1);
            glRectf(-1, -1, 1, -0.6);
        break;
        case 10:
            current = 0;
            glutPostRedisplay();
        break;
        default:
            glPushMatrix();
            if (num == current)
                    glColor3f(1.0, 0.0, 0.0);

            glTranslatef(-0.5, 0.5, 0);
            glScalef(-0.5, 0.5, 1);
            draw_fractal(num - 1);
            glPopMatrix();

            glPushMatrix();
            if (num == current)
                    glColor3f(0.0, 1.0, 0.0);

            glTranslatef(0.75, 0.75, 0);
            glRotatef(180, 0, 0, 1);
            glScalef(0.25, 0.25, 1);
            draw_fractal(num - 1);
            glPopMatrix();

            glPushMatrix();
            if (num == current)
                    glColor3f(0.0, 0.0, 1.0);

            glTranslatef(0.5, -0.5, 0);
            glRotatef(90, 0, 0, -1);
            glScalef(-0.5, 0.5, 0);
            draw_fractal(num - 1);
            glPopMatrix();

            glPushMatrix();
            if (num == current)
                    glColor3f(1.0, 1.0, 1.0);

            glTranslatef(-0.5, -0.5, 0);
            glScalef(0.5, 0.5, 1);
            draw_fractal(num - 1);
            glPopMatrix();
            break;
    }
}
void draw_fractal(int n, int x, int y) {
    int pos = pow(3,n-2), i;

    if ( n==1 ) {
        fractal[x][y] = 'X';
        return;
    }

    draw_fractal(n-1, x, y);
    draw_fractal(n-1, x-pos, y-pos);
    draw_fractal(n-1, x-pos, y+pos);
    draw_fractal(n-1, x+pos, y-pos);
    draw_fractal(n-1, x+pos, y+pos);
}
예제 #3
0
void draw() {
        glClear(GL_COLOR_BUFFER_BIT);

        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();

        draw_fractal(current);

        glutSwapBuffers();
}
예제 #4
0
파일: mandel.c 프로젝트: JackDrogon/Study
main(int  argc, char **argv) {
        
        draw_fractal ("fractal.gif",       /* Good values     */
                                  atoi(argv[1]),           /* Width          = 300  */          
                                  atoi(argv[2]),           /* Height         = 300  */
                                  atof(argv[3]),           /* Origin.r       = -1.4 */
                                  atof(argv[4]),           /* Origin.i       = 1.0  */
                                  atof(argv[5]),           /* Range          = 2.0  */
                                  atof(argv[6]));           /* Max Iterations = 1.0  */
 
}
예제 #5
0
int	motion_hook(int x, int y, t_env *env)
{
	if (x >= 0 && x <= WIDTH && y >= 0 && y <= HEIGHT)
	{
		if ((env->fractal == JULIA && env->julia_static == 0) ||
				(env->fractal == JULIA_BURNING && env->julia_static == 0) ||
				(env->fractal == BIOMORPH && env->julia_static == 0) ||
				(env->fractal == JULIA_BIRD && env->julia_static == 0))
		{
			env->c_julia.reel = (x + env->offset_x) /
				(double)env->zoom + env->x1;
			env->c_julia.img = (y + env->offset_y) /
				(double)env->zoom + env->y1;
			draw_fractal(env);
		}
		env->c_point.reel = x;
		env->c_point.img = y;
	}
	return (1);
}
int main()
{
    int size, i, j, pos;
    while ( scanf("%d",&size), size != -1 )
    {
        for ( i=0 ; i<pow(3,size-1) ; i++ )
            for ( j=0 ; j<pow(3,size-1) ; j++ )
                fractal[i][j] = ' ';

        pos = pow(3,size-1);
        draw_fractal(size, pos/2, pos/2);

        for ( i=0 ; i<pos ; i++ ) {
            for ( j=0 ; j<pos ; j++ )
                printf("%c",fractal[i][j]);
            printf("\n");
        }
        printf("-\n");
    }
}
예제 #7
0
파일: init_env.c 프로젝트: madeka/fractol
void	init_env(t_env *env)
{
	env->mlx = mlx_init();
	if (env->mlx == NULL)
	{
		ft_putendl_fd("Fatal error : mlx cannot initialize", 2);
		exit(-1);
	}
	env->zoom = ZOOM;
	env->win = mlx_new_window(env->mlx, WIDTH, HEIGHT, "Fract'ol");
	if (env->win == NULL)
	{
		ft_putendl_fd("Fatal error : mlx cannot create window", 2);
		exit(-1);
	}
	init_img(env);
	env->color = 0;
	env->menu = 0;
	draw_fractal(env);
}
예제 #8
0
파일: key_hook.c 프로젝트: madeka/fractol
int			key_hook(int keycode, t_env *env)
{
    if (keycode == KEYCODE_ESC)
    {
        mlx_destroy_image(env->mlx, env->img);
        exit(0);
    }
    if (keycode == KEYCODE_H)
        env->menu = (env->menu + 1) % 2;
    else
    {
        move(keycode, env);
        zoom(keycode, env);
        change_fractal(keycode, env);
        change_color(keycode, env);
    }
    mlx_destroy_image(env->mlx, env->img);
    init_img(env);
    draw_fractal(env);
    return (keycode);
}