📄 mandelbrot.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 + -