File:Mandelbrot Set Image 96.png

Original file (10,000 × 10,000 pixels, file size: 25.68 MB, MIME type: image/png)

Summary

Description
Русский: Фрагмент множества Мандельброта, координаты центра: -1.74907816150389628, 0.000005509887500888 ширина изображения 0.0000000000000015
English: Fragment of the Mandelbrot set, coordinates: -1.74907816150389628, 0.000005509887500888 width 0.0000000000000015
Беларуская: Фрагмент мноства Мандэльброта, каардынаты цэнтра: -1.74907816150389628, 0.000005509887500888 шырыня 0.0000000000000015
Date
Source Own work
Author Aokoroko
Other versions
Source code (C++ with OpenMP, 80-bit, SSAA 8x8)
InfoField
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
#include <cstdint>
#include <string>
#include <atomic>
#include <omp.h>
#include <cstdio>
using namespace std;
const double PI = 3.14159265358979323846;
#pragma pack(push, 1)
struct BMPHeader {
uint16_t type{0x4D42};
uint32_t size{0};
uint16_t reserved1{0};
uint16_t reserved2{0};
uint32_t offBits{54};
uint32_t structSize{40};
int32_t width{0};
int32_t height{0};
uint16_t planes{1};
uint16_t bitCount{24};
uint32_t compression{0};
uint32_t sizeImage{0};
int32_t xpelsPerMeter{2834};
int32_t ypelsPerMeter{2834};
uint32_t clrUsed{0};
uint32_t clrImportant{0}; };
#pragma pack(pop)
void save_bmp(const string& filename, const vector<uint8_t>& data, int w, int h) {
int rowSize = (w * 3 + 3) & ~3;
BMPHeader header;
header.width = w;
header.height = h;
header.sizeImage = rowSize * h;
header.size = header.sizeImage + 54;
ofstream f(filename, ios::binary);
f.write(reinterpret_cast<char*>(&header), 54);
f.write(reinterpret_cast<const char*>(data.data()), data.size());
f.close(); }
int main() {
long double absc = -1.749675773048651188L;
long double ordi = -0.000001140170813764L;
long double size_val = 0.00000000000000205L;
const int targetW = 10000;
const int targetH = 10000;
const int scale = 8;
const int rawW = targetW * scale;
const int rawH = targetH * scale;
cout << "Step 1: Calculating Raw Map (" << rawW << "x" << rawH << ")..." << endl;
vector<uint8_t> iterMap((size_t)rawW * rawH);
long double step = size_val / rawW;
long double startX = absc - (size_val / 2.0);
long double startY = ordi - (step * rawH / 2.0);
atomic<int> linesDone{0};
#pragma omp parallel for schedule(dynamic)
for (size_t b = 0; b < (size_t)rawH; ++b) {
for (size_t a = 0; a < (size_t)rawW; ++a) {
long double m = startX + a * step;
long double n = startY + b * step;
long double c = m, d = n, cc, dd;
int t = 50000;
do {
cc = c * c; dd = d * d;
d = (c + c) * d + n;
c = cc - dd + m;
t--;
} while (t > 0 && (cc + dd <= 1000000.0L));
if (t == 0) {
iterMap[b * (size_t)rawW + a] = 255;
} else {
iterMap[b * (size_t)rawW + a] = (uint8_t)(t % 255); } }
if (++linesDone % 100 == 0) cout << "Progress: " << linesDone << "/" << rawH << "\r" << flush; }
uint8_t pal[256][3];
for (int a = 0; a < 255; ++a) {
pal[a][0] = (uint8_t)round(127 + 127 * cos(2 * PI * a / 255.0));
pal[a][1] = (uint8_t)round(127 + 127 * sin(2 * PI * a / 255.0));
pal[a][2] = (uint8_t)round(127 + 127 * sin(2 * PI * a / 255.0)); }
pal[255][0] = 255; pal[255][1] = 255; pal[255][2] = 255;
cout << "\nStep 2: Rendering frames..." << endl;
int rowSize = (targetW * 3 + 3) & ~3;
for (int frame = 0; frame < 255; ++frame) {
vector<uint8_t> frameData(rowSize * targetH);
#pragma omp parallel for schedule(static)
for (int y = 0; y < targetH; ++y) {
for (int x = 0; x < targetW; ++x) {
uint32_t rSum = 0, gSum = 0, bSum = 0;
for (int j = 0; j < scale; ++j) {
for (int i = 0; i < scale; ++i) {
uint8_t t = iterMap[(size_t)(y * scale + j) * rawW + (x * scale + i)];
int colorIdx;
if (t == 255) {
colorIdx = 255;
} else {
colorIdx = (t - frame + 255) % 255; }
bSum += pal[colorIdx][0];
gSum += pal[colorIdx][1];
rSum += pal[colorIdx][2]; } }
int outIdx = y * rowSize + x * 3;
frameData[outIdx + 0] = (uint8_t)(bSum >> 6);
frameData[outIdx + 1] = (uint8_t)(gSum >> 6);
frameData[outIdx + 2] = (uint8_t)(rSum >> 6); } }
string filename = "Mandelbrot" + to_string(1000 + frame).substr(1) + ".bmp";
save_bmp(filename, frameData, targetW, targetH);
cout << "Frame " << frame << "/254 saved. \r" << flush; }
return 0; }

Technical details

  • Method: High-Fidelity C++ Implementation (80-bit long double precision).
  • Anti-aliasing: 64x SSAA (8x8 supersampling).
  • Iterations: 50,000 max.
  • Software: C++ (compiled with g++), GNU C++ Compiler.

Notes

Featured picture

Wikimedia Commons

This is a featured picture on Wikimedia Commons (Featured pictures) and is considered one of the finest images. See its nomination here.

If you have an image of similar quality that can be published under a suitable copyright license, be sure to upload it, tag it, and nominate it.

Licensing

I, the copyright holder of this work, hereby publish it under the following license:
Creative Commons CC-Zero This file is made available under the Creative Commons CC0 1.0 Universal Public Domain Dedication.
The person who associated a work with this deed has dedicated the work to the public domain by waiving all of their rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.

This image has been assessed using the Quality image guidelines and is considered a Quality image.

العربية  جازايرية  беларуская  беларуская (тарашкевіца)  български  বাংলা  català  čeština  Cymraeg  Deutsch  Schweizer Hochdeutsch  Zazaki  Ελληνικά  English  Esperanto  español  eesti  euskara  فارسی  suomi  français  galego  עברית  हिन्दी  hrvatski  magyar  հայերեն  Bahasa Indonesia  italiano  日本語  Jawa  ქართული  Qaraqalpaqsha  한국어  kurdî  кыргызча  Latina  Lëtzebuergesch  lietuvių  македонски  മലയാളം  मराठी  Bahasa Melayu  Nederlands  ਪੰਜਾਬੀ  Norfuk / Pitkern  polski  português  português do Brasil  rumantsch  română  русский  sicilianu  slovenčina  slovenščina  shqip  српски / srpski  svenska  தமிழ்  తెలుగు  ไทย  Tagalog  toki pona  Türkçe  українська  oʻzbekcha / ўзбекча  vèneto  Tiếng Việt  中文  中文(简体)  中文(繁體)  +/−

Captions

Fragment of the Mandelbrot set, coordinates: -1.74907816150389628, 0.000005509887500888 width 0.0000000000000015

Items portrayed in this file

depicts

6 April 2026

6,164,783 byte

3,840 pixel

3,840 pixel

image/png

38c0645c7f5f6373b261ddd9db838465e598c411

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current10:33, 19 May 2026Thumbnail for version as of 10:33, 19 May 202610,000 × 10,000 (25.68 MB)Aokoroko-Description "Mandelbrot Set Image 96.png" - exiftool
10:05, 19 May 2026Thumbnail for version as of 10:05, 19 May 202610,000 × 10,000 (25.68 MB)Aokoroko-Comment, -Description - exiftool
18:44, 18 May 2026Thumbnail for version as of 18:44, 18 May 202610,000 × 10,000 (25.68 MB)AokorokoArtist Aokoroko, Copyright CC0 1.0 Universal, Software g++, Title -1.74907816150389628 0.000005509887500888 i @ 0.0000000000000015
20:14, 13 May 2026Thumbnail for version as of 20:14, 13 May 202610,000 × 10,000 (25.48 MB)AokorokoFragment of the Mandelbrot set. 100 Megapixels (10,000 x 10,000 px) with 8x SSAA. The source code included.
16:05, 8 April 2026Thumbnail for version as of 16:05, 8 April 20263,840 × 3,840 (5.88 MB)AokorokoReduced it a little bit
18:21, 6 April 2026Thumbnail for version as of 18:21, 6 April 20263,840 × 3,840 (5.96 MB)AokorokoUploaded own work with UploadWizard

The following page uses this file:

Global file usage

The following other wikis use this file:

Metadata