Keywords: Buddhabrot-deep.jpg Self made deeply iterated Buddhabrot A version without lossy compression is available at Buddhabrot-deep png 500 K Some relevant code at User Evercat/Buddhabrot c en wikipedia 2004-11-09 Evercat wikipedia en Evercat C src code <source lang C > // Nebulabrot / Buddhabrot generator // Brought to you by Wikipedia // Written by User Evercat // // Released under the GNU Free Documentation License // or the GNU Public License whichever you prefer // November 23 2004 // // This code is lame and confusing I apologise // As I like to point out my C is self-taught // // Note some folk mention possible improvements on the talk page // http //en wikipedia org/wiki/User_talk Evercat/Buddhabrot c include <stdio h> include <stdlib h> include <math h> define OUTFILE buddhabrot //////////////////////////////////////////////////////////////////////////////////// define WIDTH 1024 define HEIGHT 768 define CENTRE_X -0 451 // For full set try -0 451 by 0 define CENTRE_Y 0 define ZOOM 310 // Try 310 define SOURCE_COLUMNS WIDTH 10 // These lines control the number of source values iterated define SOURCE_ROWS HEIGHT 10 // Try WIDTH and HEIGHT 10 define UPDATETICK 100 // Report status every nth column reached define RED_MULTIPLIER 0 09 // Multiply the number of hits in a pixel by these values define GREEN_MULTIPLIER 0 11 // needs to be lower the greater the number of source define BLUE_MULTIPLIER 0 18 // values and iterations else image will be too bright define COLOUR_OFFSET -230 // This value is added to the number of hits before a pixel is drawn // It needs to be lower the more source columns/rows there are define RED_ITERATIONS_LOWER 0 define RED_ITERATIONS_UPPER 1000 define GREEN_ITERATIONS_LOWER 0 define GREEN_ITERATIONS_UPPER 1000 define BLUE_ITERATIONS_LOWER 0 define BLUE_ITERATIONS_UPPER 1000 define SOURCE_LEFT_X -2 102613 define SOURCE_RIGHT_X 1 200613 define SOURCE_TOP_Y -1 237710 define SOURCE_BOTTOM_Y 1 239710 undef RANDOM_SOURCE define OPTIMISE // Don't bother iterating some values obviously in the set define reduce foo foo // Macro to reduce colours can use sqrt n log n etc or just n //////////////////////////////////////////////////////////////////////////////////// void drawpath double x double y double target_startx double target_starty double pixel_width ; double rnd void ; void drawbmp char filename ; //////////////////////////////////////////////////////////////////////////////////// long long redcountWIDTHHEIGHT; long long greencountWIDTHHEIGHT; long long bluecountWIDTHHEIGHT; int iterations; double red_multiplier RED_MULTIPLIER; double green_multiplier GREEN_MULTIPLIER; double blue_multiplier BLUE_MULTIPLIER; //////////////////////////////////////////////////////////////////////////////////// int main int argc char argv int i j n; // General purpose counters double x y; // Source coordinates of particle being tracked int source_column source_row; // Source grid location double r s nextr nexts; // Values as particle is iterated through the Mandelbrot function double x_jump y_jump; // Distances between particles in the source grid double target_startx target_starty; // Top-left coordinates of drawn area double target_endx target_endy; // Bottom-right coordinates of drawn area double pixel_width; // Actual distance represented by a pixel in the drawn area char filename200; for i 0; i < WIDTH; i++ for j 0; j < HEIGHT; j++ redcountij 0; greencountij 0; bluecountij 0; target_startx CENTRE_X - double WIDTH / ZOOM 2 ; target_endx CENTRE_X + double WIDTH / ZOOM 2 ; target_starty CENTRE_Y - double HEIGHT / ZOOM 2 ; target_endy CENTRE_Y + double HEIGHT / ZOOM 2 ; pixel_width target_endx - target_startx / WIDTH; x_jump double SOURCE_RIGHT_X - SOURCE_LEFT_X / SOURCE_COLUMNS; y_jump double SOURCE_BOTTOM_Y - SOURCE_TOP_Y / SOURCE_ROWS; iterations RED_ITERATIONS_UPPER; if GREEN_ITERATIONS_UPPER > iterations iterations GREEN_ITERATIONS_UPPER; if BLUE_ITERATIONS_UPPER > iterations iterations BLUE_ITERATIONS_UPPER; // Main bit x SOURCE_LEFT_X; for source_column 0; source_column < SOURCE_COLUMNS; source_column++ x + x_jump y SOURCE_TOP_Y; for source_row 0; source_row < SOURCE_ROWS; source_row++ y + y_jump ifdef OPTIMISE if x > -1 2 x < -1 1 y > -0 1 y < 0 1 x > -1 1 x < -0 9 y > -0 2 y < 0 2 x > -0 9 x < -0 8 y > -0 1 y < 0 1 x > -0 69 x < -0 61 y > -0 2 y < 0 2 x > -0 61 x < -0 5 y > -0 37 y < 0 37 x > -0 5 x < -0 39 y > -0 48 y < 0 48 x > -0 39 x < 0 14 y > -0 55 y < 0 55 x > 0 14 x < 0 29 y > -0 42 y < -0 07 x > 0 14 x < 0 29 y > 0 07 y < 0 42 continue; endif r 0; s 0; for n 0; n < iterations; n++ nextr r r - s s + x; nexts 2 r s + y; r nextr; s nexts; if n iterations // drawpath x y target_startx target_starty pixel_width ; break; else if r r + s s > 4 drawpath x y target_startx target_starty pixel_width ; break; if source_column UPDATETICK 0 printf Reached source column d of d\n source_column SOURCE_COLUMNS ; sprintf filename s r d g d b d spp d bmp OUTFILE RED_ITERATIONS_UPPER GREEN_ITERATIONS_UPPER BLUE_ITERATIONS_UPPER SOURCE_COLUMNS / WIDTH SOURCE_ROWS / HEIGHT ; drawbmp filename ; printf Done \n ; return 0; void drawpath double x double y double target_startx double target_starty double pixel_width double r s nextr nexts; int n; int xpixel ypixel; r 0; s 0; for n 0; n < iterations; n++ nextr r r - s s + x; nexts 2 r s + y; r nextr; s nexts; if r r + s s > 4 return; xpixel r - target_startx / pixel_width; ypixel s - target_starty / pixel_width; if xpixel > 0 xpixel < WIDTH ypixel > 0 ypixel < HEIGHT if n > RED_ITERATIONS_LOWER n < RED_ITERATIONS_UPPER redcountxpixelypixel + 1; if n > GREEN_ITERATIONS_LOWER n < GREEN_ITERATIONS_UPPER greencountxpixelypixel + 1; if n > BLUE_ITERATIONS_LOWER n < BLUE_ITERATIONS_UPPER bluecountxpixelypixel + 1; return; void drawbmp char filename unsigned int headers13; FILE outfile; int extrabytes; int paddedsize; int x; int y; int n; int red green blue; extrabytes 4 - WIDTH 3 4 ; // How many bytes of padding to add to each // horizontal line - the size of which must // be a multiple of 4 bytes if extrabytes 4 extrabytes 0; paddedsize WIDTH 3 + extrabytes HEIGHT; // Headers // Note that the BM identifier in bytes 0 and 1 is NOT included in these headers headers0 paddedsize + 54; // bfSize whole file size headers1 0; // bfReserved both headers2 54; // bfOffbits headers3 40; // biSize headers4 WIDTH; // biWidth headers5 HEIGHT; // biHeight // Would have biPlanes and biBitCount in position 6 but they're shorts // It's easier to write them out separately see below than pretend // they're a single int especially with endian issues headers7 0; // biCompression headers8 paddedsize; // biSizeImage headers9 0; // biXPelsPerMeter headers10 0; // biYPelsPerMeter headers11 0; // biClrUsed headers12 0; // biClrImportant outfile fopen filename wb ; // // Headers begin // When printing ints and shorts we write out 1 character at a time to avoid endian issues // fprintf outfile BM ; for n 0; n < 5; n++ fprintf outfile c headersn 0x000000FF ; fprintf outfile c headersn 0x0000FF00 >> 8 ; fprintf outfile c headersn 0x00FF0000 >> 16 ; fprintf outfile c headersn unsigned int 0xFF000000 >> 24 ; // These next 4 characters are for the biPlanes and biBitCount fields fprintf outfile c 1 ; fprintf outfile c 0 ; fprintf outfile c 24 ; fprintf outfile c 0 ; for n 7; n < 12; n++ fprintf outfile c headersn 0x000000FF ; fprintf outfile c headersn 0x0000FF00 >> 8 ; fprintf outfile c headersn 0x00FF0000 >> 16 ; fprintf outfile c headersn unsigned int 0xFF000000 >> 24 ; // // Headers done now write the data // for y HEIGHT - 1; y > 0; y-- // BMP image format is written from bottom to top for x 0; x < WIDTH - 1; x++ red reduce redcountxy + COLOUR_OFFSET red_multiplier; green reduce greencountxy + COLOUR_OFFSET green_multiplier; blue reduce bluecountxy + COLOUR_OFFSET blue_multiplier; if red > 255 red 255; if red < 0 red 0; if green > 255 green 255; if green < 0 green 0; if blue > 255 blue 255; if blue < 0 blue 0; // Also it's written in b g r format fprintf outfile c blue ; fprintf outfile c green ; fprintf outfile c red ; if extrabytes // See above - BMP lines must be of lengths divisible by 4 for n 1; n < extrabytes; n++ fprintf outfile c 0 ; fclose outfile ; return; </source> Original upload log page en wikipedia Buddhabrot-deep jpg 2005-02-15 21 28 Evercat 768×768× 234806 bytes <nowiki>Self made</nowiki> cur prev 00 13 9 November 2004 Evercat talk contribs block 9 bytes Self made Original upload log Verklaring huidig huidige afbeelding verw verwijder de oude versie herstel breng oude versie terug Klik op de datum om de afbeeldingen die geüpload zijn op die datum te zien verw huidig 10 nov 2004 21 38 nl Gebruiker Pethan Pethan nl Overleg_gebruiker Pethan Overleg 768x768 128603 bytes Buddha Mandelbrot 1 date/time username edit summary ---- 24 nov 2004 15 29 nl Gebruiker 82 41 253 249 <nowiki> heh </nowiki> ---- 10 nov 2004 21 42 nl Gebruiker Pethan <nowiki> bron </nowiki> ---- 10 nov 2004 21 38 nl Gebruiker Pethan <nowiki> Buddha Mandelbrot </nowiki> nl Afbeelding Buddhabrot-deep jpg Buddhabrots Images with C source code |