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

📄 julia.c

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

#define REMAX  1.2
#define REMIN -1.2
#define IMMAX  1.2
#define IMMIN -1.2
#define REAL  -0.74543
#define IMAG   0.11301

#define N 128

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,y;
	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(x.real=REMIN;x.real<=REMAX;x.real+=deltaw){
		for(x.imag=IMMIN;x.imag<=IMMAX;x.imag+=deltah){
			count=0;
			z.real=REAL;
			z.imag=IMAG;
			y.real=x.real;
			y.imag=x.imag;
			while(norm(y)<=2.0&&count<N){
				re=y.real*y.real-y.imag*y.imag+z.real;
				im=2.0*y.real*y.imag+z.imag;
				y.real=re;
				y.imag=im;
				count++;
			}
			if(norm(y)<=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(x.real,x.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 + -