Файл:Mandelbrot Set Image 86.png
Краткое описание
| ОписаниеMandelbrot Set Image 86.png |
Русский: Фрагмент множества Мандельброта, координаты центра: -1.94053809966024986, -0.00000120260253359 ширина изображения 0.000000000000019
English: Fragment of the Mandelbrot set, coordinates: -1.94053809966024986, -0.00000120260253359 width 0.000000000000019
Беларуская: Фрагмент мноства Мандэльброта, каардынаты цэнтра: -1.94053809966024986, -0.00000120260253359 шырыня 0.000000000000019 |
| Дата | |
| Источник | Собственная работа |
| Автор | Aokoroko |
| Другие версии |
|
| Source code (C++) InfoField |
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
#include <cstdint>
#include <string>
#include <cstdio>
#include <iomanip>
using namespace std;
const long double PI = 3.14159265358979323846264338327950288L;
#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)
int main() {
long double rx = stold("-1.94053809966024988");
long double ry = stold("-0.00000120260253345");
long double sz = stold("0.000000000000018");
const int targetW = 2160;
const int targetH = 2160;
const int scale = 8;
const int rawW = targetW * scale;
const int rawH = targetH * scale;
const int frame = 136;
const int max_iter = 50000;
long double step_d = sz / (long double)rawW;
uint8_t pal[256][3];
for (int a = 0; a < 255; ++a) {
pal[a][0] = (uint8_t)round(127.0 + 127.0 * cos(2.0 * PI * a / 255.0)); // Blue
pal[a][1] = (uint8_t)round(127.0 + 127.0 * sin(2.0 * PI * a / 255.0)); // Green
pal[a][2] = (uint8_t)round(127.0 + 127.0 * sin(2.0 * PI * a / 255.0)); // Red
}
pal[255][0] = 255; pal[255][1] = 255; pal[255][2] = 255;
cout << "Step 1: Rendering Mandelbrot using 80-bit long double (" << targetW << "x" << targetH << ")..." << endl;
int rowSize = (targetW * 3 + 3) & ~3;
BMPHeader header;
header.width = targetW;
header.height = targetH;
header.sizeImage = rowSize * targetH;
header.size = header.sizeImage + 54;
ofstream f("Mandelbrot Set Image 86.bmp", ios::binary);
f.write(reinterpret_cast<char*>(&header), 54);
#pragma omp parallel for schedule(dynamic)
for (int y = 0; y < targetH; ++y) {
vector<uint8_t> threadRowBuffer(rowSize, 0);
for (int x = 0; x < targetW; ++x) {
uint32_t rSum = 0, gSum = 0, bSum = 0;
for (int j = 0; j < scale; ++j) {
size_t b = (size_t)y * scale + j;
long double c_im = ry + (long double)((long long)b - (rawH / 2)) * step_d;
for (int i = 0; i < scale; ++i) {
size_t a = (size_t)x * scale + i;
long double c_re = rx + (long double)((long long)a - (rawW / 2)) * step_d;
long double z_re = 0.0L;
long double z_im = 0.0L;
int iter = 0;
while (iter < max_iter) {
long double z_re2 = z_re * z_re;
long double z_im2 = z_im * z_im;
if ((z_re2 + z_im2) >= 40000.0L) {
break;
}
z_im = 2.0L * z_re * z_im + c_im;
z_re = z_re2 - z_im2 + c_re;
iter++;
}
int final_t = max_iter - iter;
uint8_t t = (final_t == 0) ? 255 : (uint8_t)(final_t % 254);
int colorIdx = (t == 255) ? 255 : (t - frame + 255) % 255;
bSum += pal[colorIdx][0];
gSum += pal[colorIdx][1];
rSum += pal[colorIdx][2];
}
}
int outIdx = x * 3;
threadRowBuffer[outIdx + 0] = (uint8_t)(bSum >> 6);
threadRowBuffer[outIdx + 1] = (uint8_t)(gSum >> 6);
threadRowBuffer[outIdx + 2] = (uint8_t)(rSum >> 6);
}
#pragma omp critical
{
f.seekp(54 + (streamoff)y * rowSize);
f.write(reinterpret_cast<const char*>(threadRowBuffer.data()), rowSize);
}
if ((y + 1) % 10 == 0 || y == targetH - 1) {
#pragma omp critical
{
cout << "Progress: " << (y + 1) << "/" << targetH << "\r" << flush;
}
}
}
f.close();
cout << "\nDone! Mandelbrot Set Image 86.bmp successfully saved." << endl;
return 0;
}
|
Technical details
- Method: 80-bit long double precision.
- True 8x8 SSAA: Pristine, anti-aliased image quality with 64 independent samples per pixel.
- OpenMP Multi-threading: High-speed parallel computing to maximize CPU utilization.
- Software: C++ (compiled with g++), GNU C++ Compiler.
Related images
-
Previous step
-
Next step
Notes
- Rosetta Code: https://rosettacode.org/wiki/Mandelbrot_set#High-Fidelity_C++_Implementation_(80-bit,_64x_SSAA,_OpenMP)
- github: https://github.com/Divetoxx/Mandelbrot
Лицензирование
| Этот файл доступен на условиях Creative Commons CC0 1.0 Универсальной передачи в общественное достояние (Universal Public Domain Dedication). | |
| Лица, связанные с работой над этим произведением, решили передать данное произведение в общественное достояние, отказавшись от всех прав на произведение по всему миру в рамках закона об авторских правах (а также связанных и смежных прав), в той степени, которую допускает закон. Вы можете копировать, изменять, распространять и исполнять данное произведение в любых целях, в том числе в коммерческих, без получения на это разрешения автора.
http://creativecommons.org/publicdomain/zero/1.0/deed.enCC0Creative Commons Zero, Public Domain Dedicationfalsefalse |
Это изображение было оценено c использованием руководства по качественным изображениям и признано качественным изображением.
العربية ∙ جازايرية ∙ беларуская ∙ беларуская (тарашкевіца) ∙ български ∙ বাংলা ∙ 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 ∙ 中文 ∙ 中文(简体) ∙ 中文(繁體) ∙ +/− |
Краткие подписи
Элементы, изображённые на этом файле
изображённый объект
28 марта 2026
9 093 532 байт
3840 пиксель
3840 пиксель
image/png
76ab301e2cba26c41550617a7838c4eb3c6d4cc8
История файла
Нажмите на дату/время, чтобы увидеть версию файла от того времени.
| Дата/время | Миниатюра | Размеры | Участник | Примечание | |
|---|---|---|---|---|---|
| текущий | 18:57, 28 марта 2026 | 3840 × 3840 (8,67 МБ) | wikimediacommons>Aokoroko | Enlarged the images |
Использование файла
Следующая страница использует этот файл:
Метаданные
Файл содержит дополнительные данные, обычно добавляемые цифровыми камерами или сканерами. Если файл после создания редактировался, то некоторые параметры могут не соответствовать текущему изображению.
| Горизонтальное разрешение | 28,35 точек на сантиметр |
|---|---|
| Вертикальное разрешение | 28,35 точек на сантиметр |