⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mandelbrot.c

📁 Julia集的分形算法
💻 C
字号:
#include <gl/glut.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define REMAX  0.5
#define REMIN -2.0
#define IMMAX  1.25
#define IMMIN -1.25

#define N 64

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

double norm(complex c)
{
	return sqrt(c.real*c.real+c.imag+c.imag);
}

void display(void)
{
	int count;
	complex x,z;
	double re,im,deltaw,deltah;
	GLfloat r,g,b;
	GLint viewport[4];
	glClear(GL_COLOR_BUFFER_BIT);
	glGetIntegerv(GL_VIEWPORT,viewport);
	deltaw=(REMAX-REMIN)/viewport[2];
	deltah=(IMMAX-IMMIN)/viewport[3];
	glBegin(GL_POINTS);
	for(z.real=REMIN;z.real<=REMAX;z.real+=deltaw){
		for(z.imag=IMMIN;z.imag<=IMMAX;z.imag+=deltah){
			count=0;
			x.real=0;
			x.imag=0;
			while(norm(x)<=2.0&&count<N){
				re=x.real*x.real-x.imag*x.imag+z.real;
				im=2.0*x.real*x.imag+z.imag;
				x.real=re;
				x.imag=im;
				count++;
			}
			if(norm(x)<=2.0)
				glColor3f(0.0,0.0,0.0);
			else{
				r=(1.0+count)/(N+1);
				g=(x.real-REMIN)/(REMAX-REMIN);
				b=(x.imag-IMMIN)/(REMAX-REMIN);
				glColor3f(r,g,b);
			}
			glVertex2f(z.real,z.imag);
		}
	}
	glEnd();		
	glFlush();
}

void reshape(int w,int h)
{
	glViewport(0,0,(GLsizei)w,(GLsizei)h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(REMIN,REMAX,IMMIN,IMMAX,-1.0,1.0);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}

void init(void)
{
	glClearColor(0.0,0.0,0.0,0.0);
	glShadeModel(GL_SMOOTH);
}

int main(int argc,char** argv)
{
	glutInit(&argc,argv);
	glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
	glutInitWindowSize(250,250);
	glutInitWindowPosition(100,100);
	glutCreateWindow(argv[0]);
	init();
	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
	glutMainLoop();
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -