File:Buddhabrot-deep.jpg
Aus Wikimedia Commons, dem freien Medienarchiv
Zur Navigation springen
Zur Suche springen
Größe dieser Vorschau: 600 × 600 Pixel. Weitere Auflösungen: 240 × 240 Pixel | 480 × 480 Pixel | 768 × 768 Pixel.
Originaldatei (768 × 768 Pixel, Dateigröße: 126 KB, MIME-Typ: image/jpeg)
Dateiinformationen
Strukturierte Daten
Bildtexte
Inhaltsverzeichnis
Beschreibung
[Bearbeiten]BeschreibungBuddhabrot-deep.jpg |
English: 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 |
Datum | |
Quelle | Übertragen aus en.wikipedia nach Commons. |
Urheber | Evercat in der Wikipedia auf Englisch |
Lizenz
[Bearbeiten]Public domainPublic domainfalsefalse |
Dieses Werk wurde von seinem Urheber Evercat in der Wikipedia auf Englisch als gemeinfrei veröffentlicht. Dies gilt weltweit. In manchen Staaten könnte dies rechtlich nicht möglich sein. Sofern dies der Fall ist: Evercat gewährt jedem das bedingungslose Recht, dieses Werk für jedweden Zweck zu nutzen, es sei denn, Bedingungen sind gesetzlich erforderlich.Public domainPublic domainfalsefalse |
C src code
[Bearbeiten]// 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 redcount[WIDTH][HEIGHT];
long long greencount[WIDTH][HEIGHT];
long long bluecount[WIDTH][HEIGHT];
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 filename[200];
for (i = 0; i < WIDTH; i++)
{
for (j = 0; j < HEIGHT; j++)
{
redcount[i][j] = 0;
greencount[i][j] = 0;
bluecount[i][j] = 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)
{
redcount[xpixel][ypixel] += 1;
}
if (n >= GREEN_ITERATIONS_LOWER && n <= GREEN_ITERATIONS_UPPER)
{
greencount[xpixel][ypixel] += 1;
}
if (n >= BLUE_ITERATIONS_LOWER && n <= BLUE_ITERATIONS_UPPER)
{
bluecount[xpixel][ypixel] += 1;
}
}
}
return;
}
void drawbmp (char * filename) {
unsigned int headers[13];
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".
headers[0] = paddedsize + 54; // bfSize (whole file size)
headers[1] = 0; // bfReserved (both)
headers[2] = 54; // bfOffbits
headers[3] = 40; // biSize
headers[4] = WIDTH; // biWidth
headers[5] = 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...
headers[7] = 0; // biCompression
headers[8] = paddedsize; // biSizeImage
headers[9] = 0; // biXPelsPerMeter
headers[10] = 0; // biYPelsPerMeter
headers[11] = 0; // biClrUsed
headers[12] = 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", headers[n] & 0x000000FF);
fprintf(outfile, "%c", (headers[n] & 0x0000FF00) >> 8);
fprintf(outfile, "%c", (headers[n] & 0x00FF0000) >> 16);
fprintf(outfile, "%c", (headers[n] & (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", headers[n] & 0x000000FF);
fprintf(outfile, "%c", (headers[n] & 0x0000FF00) >> 8);
fprintf(outfile, "%c", (headers[n] & 0x00FF0000) >> 16);
fprintf(outfile, "%c", (headers[n] & (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(redcount[x][y] + COLOUR_OFFSET) * red_multiplier;
green = reduce(greencount[x][y] + COLOUR_OFFSET) * green_multiplier;
blue = reduce(bluecount[x][y] + 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;
}
Ursprüngliches Datei-Logbuch
[Bearbeiten]Die ursprüngliche Dateibeschreibungsseite war hier. Alle folgenden Benutzernamen beziehen sich auf en.wikipedia.
- 2005-02-15 21:28 Evercat 768×768× (234806 bytes) Self made
...
- (cur | prev) 00:13, 9 November 2004 Evercat (talk | contribs | block) (9 bytes) (Self made)
Ursprüngliches Datei-Logbuch
[Bearbeiten]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)
date/time | username | edit summary |
---|---|---|
24 nov 2004 15:29 | nl:Gebruiker:82.41.253.249 | (heh) |
10 nov 2004 21:42 | nl:Gebruiker:Pethan | (bron) |
10 nov 2004 21:38 | nl:Gebruiker:Pethan | (Buddha Mandelbrot) |
Dateiversionen
Klicke auf einen Zeitpunkt, um diese Version zu laden.
Version vom | Vorschaubild | Maße | Benutzer | Kommentar | |
---|---|---|---|---|---|
aktuell | 15:13, 21. Jan. 2006 | 768 × 768 (126 KB) | Maksim (Diskussion | Beiträge) | La bildo estas kopiita de wikipedia:nl. La originala priskribo estas: Buddha Mandelbrot van en:wikipedia door Evercat {{GFDL}} {| border="1" ! date/time || username || edit summary |---- | 24 nov 2004 15:29 || [[:nl:Gebruiker:82.4 |
Du kannst diese Datei nicht überschreiben.
Dateiverwendung
Keine Seiten verwenden diese Datei.
Globale Dateiverwendung
Die nachfolgenden anderen Wikis verwenden diese Datei:
- Verwendung auf ar.wikipedia.org
- Verwendung auf de.wikipedia.org
- Verwendung auf en.wikipedia.org
- Wikipedia:Featured picture candidates/Buddhabrot-deep
- Wikipedia:Picture of the day/January 2005
- Wikipedia:Featured picture candidates/January-2005
- Wikipedia:Wikipedia Signpost/2005-01-10/Features
- Wikipedia:POTD/January 16, 2005
- Wikipedia:Picture of the day/January 16, 2005
- Portal:Mathematics/Featured picture archive
- User:Grm wnr
- User:127
- User:Cyde/Featured pictures
- Wikipedia:Featured picture candidates/delist/2006
- Wikipedia:Picture of the day/April 2006
- User:Benji64
- Wikipedia:POTD row/April 3, 2006
- Wikipedia:Picture of the day/April 3, 2006
- Wikipedia:POTD/April 3, 2006
- Wikipedia:POTD column/April 3, 2006
- Wikipedia:Featured picture candidates/Mandelbrot Set
- Wikipedia:Featured picture candidates/April-2006
- Wikipedia:Featured picture candidates/November-2006
- Wikipedia:Featured picture candidates/Mandelbrot set
- Wikipedia:Featured picture candidates/delist/Buddhabrot delist
- Wikipedia:Featured picture candidates/delist/2007
- Wikipedia:Wikipedia Signpost/2005-01-10/SPV
- Portal:Mathematics/Featured picture/2005 02
- Wikipedia:Featured picture candidates/delist/buddhabrot
- Wikipedia:WikiProject Mathematics/Recognized content
- User talk:75.108.94.227/Archive 3
- Portal:Mathematics/Recognized content
- Wikipedia:Wikipedia Signpost/Single/2005-01-10
- Verwendung auf es.wikipedia.org
- Verwendung auf fr.wikipedia.org
- Verwendung auf he.wikipedia.org
- Verwendung auf hu.wikipedia.org
- Verwendung auf it.wikipedia.org
- Verwendung auf ko.wikipedia.org
- Verwendung auf nl.wikipedia.org
- Verwendung auf pl.wikipedia.org
- Verwendung auf ru.wikipedia.org
- Verwendung auf sr.wikibooks.org
- Verwendung auf uk.wikipedia.org
Metadaten
Diese Datei enthält weitere Informationen, die in der Regel von der Digitalkamera oder dem verwendeten Scanner stammen. Durch nachträgliche Bearbeitung der Originaldatei können einige Details verändert worden sein.
_error | 0 |
---|
Strukturierte Daten
In dieser Datei abgebildete Objekte
Motiv
9. November 2004
image/jpeg
440760e72cde9462c96da5d70512b8047924eb96
128.603 Byte
768 Pixel
768 Pixel
Versteckte Kategorien: