曼德勃羅集c++程序實現


// C++ implementation for mandelbrot set fractals 
#include <conio.h> 
#include <graphics.h>
#include <stdio.h> 
#define MAXCOUNT 30 

// Function to draw mandelbrot set 
void fractal(float left, float top, float xside, float yside)
{
	float xscale, yscale, zx, zy, cx, tempx, cy;
	int x, y, i, j;
	int maxx, maxy, count;

	// getting maximum value of x-axis of screen 
	maxx = getmaxx();

	// getting maximum value of y-axis of screen 
	maxy = getmaxy();

	// setting up the xscale and yscale 
	xscale = xside / maxx;
	yscale = yside / maxy;

	// calling rectangle function 
	// where required image will be seen 
	rectangle(0, 0, maxx, maxy);

	// scanning every point in that rectangular area. 
	// Each point represents a Complex number (x + yi). 
	// Iterate that complex number 
	for (y = 1; y <= maxy - 1; y++) {
		for (x = 1; x <= maxx - 1; x++)
		{
			// c_real 
			cx = x * xscale + left;

			// c_imaginary 
			cy = y * yscale + top;

			// z_real 
			zx = 0;

			// z_imaginary 
			zy = 0;
			count = 0;

			// Calculate whether c(c_real + c_imaginary) belongs 
			// to the Mandelbrot set or not and draw a pixel 
			// at coordinates (x, y) accordingly 
			// If you reach the Maximum number of iterations 
			// and If the distance from the origin is 
			// greater than 2 exit the loop 
			while ((zx * zx + zy * zy < 4) && (count < MAXCOUNT))
			{
				// Calculate Mandelbrot function 
				// z = z*z + c where z is a complex number 

				// tempx = z_real*_real - z_imaginary*z_imaginary + c_real 
				tempx = zx * zx - zy * zy + cx;

				// 2*z_real*z_imaginary + c_imaginary 
				zy = 2 * zx * zy + cy;

				// Updating z_real = tempx 
				zx = tempx;

				// Increment count 
				count = count + 1;
			}

			// To display the created fractal 
			putpixel(x, y, count * 50);
		}
	}
}

// Driver code 
int main()
{
	// gm is Graphics mode which is 
	// a computer display mode that 
	// generates image using pixels. 
	// DETECT is a macro defined in 
	// "graphics.h" header file 
	int gd = DETECT, gm, errorcode;

	float left, top, xside, yside;

	// setting the left, top, xside and yside 
	// for the screen and image to be displayed 
	left = -1.75;
	top = -0.25;
	xside = 0.25;
	yside = 0.45;
	char driver[] = "";

	// initgraph initializes the 
	// graphics system by loading a 
	// graphics driver from disk 
	initgraph(&gd, &gm, driver);

	// Function calling 
	fractal(left, top, xside, yside);

	getch();

	// closegraph function closes the 
	// graphics mode and deallocates 
	// all memory allocated by 
	// graphics system 
	closegraph();

	return 0;
}

count * 50時運行結果:

count * 5000000000000時運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章