【计算机图形学】六、Mandelbrot集

来源:互联网 发布:网页信息抓取软件 编辑:程序博客网 时间:2024/05/22 02:23

1. 算法



2. 源代码

#include "stdafx.h"#include "GL/glut.h"#include "stdlib.h"#include "math.h"float xmin=-2.00,xmax=0.50;float ymin=-1.25,ymax=1.25;void init(){glClearColor(1.0,1.0,1.0,0.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(xmin,xmax,ymin,ymax);}typedef struct {float x,y;}complexNumber;typedef struct  {float r,g,b;}color;void setPixel(complexNumber z){glBegin(GL_POINTS);glVertex2f(z.x,z.y);glEnd();}int iterationCount(complexNumber z0,int maxItera){complexNumber z=z0;int count=0;while((z.x*z.x+z.y*z.y<4.0)&&count<=maxItera){z.x=z.x*z.x-z.y*z.y+z0.x;z.y=2.0*z.x*z.y+z0.y;count++;}return count;}void mandelbrot(int maxItera){complexNumber z;float xIncrement,yIncrement;int IteraCount;color ptColor;xIncrement=(xmax-xmin)/maxItera;yIncrement=(ymax-ymin)/maxItera;for(z.x=xmin;z.x<=xmax;z.x+=xIncrement)for(z.y=ymin;z.y<=ymax;z.y+=yIncrement){IteraCount=iterationCount(z,maxItera);if(IteraCount>maxItera){ptColor.r=ptColor.g=ptColor.b=0.0;}else if(IteraCount>maxItera/80){ptColor.r=0.5;ptColor.g=0.4;ptColor.b=0.0;}else if(IteraCount>maxItera/100){ptColor.r=1.0;ptColor.g=0.0;ptColor.b=0.0;}else if(IteraCount>maxItera/125){ptColor.r=0.5;ptColor.g=0.0;ptColor.b=0.0;}else if(IteraCount>maxItera/200){ptColor.r=0.8;ptColor.g=1.0;ptColor.b=0.0;}else if(IteraCount>maxItera/250){ptColor.r=0.0;ptColor.g=0.1;ptColor.b=0.3;}else if(IteraCount>maxItera/500){ptColor.r=0.8;ptColor.g=0.5;ptColor.b=0.0;}else{ptColor.r=0.0;ptColor.g=ptColor.b=1.0;}glColor3f(ptColor.r,ptColor.g,ptColor.b);setPixel(z);}}void render(){glClear(GL_COLOR_BUFFER_BIT);int maxIetra=1000;    mandelbrot(maxIetra);glFlush();}int main(int argc, char* argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(50,100);glutInitWindowSize(600,400);glutCreateWindow("Mandelbrot");init();glutDisplayFunc(render);glutMainLoop();return 0;}

3. 结果


原创粉丝点击