Պատկեր:Mandelbrot Set Color Cycling Animation 400px.gif

testwiki-ից
Jump to navigation Jump to search
Mandelbrot_Set_Color_Cycling_Animation_400px.gif (400 × 400 փիքսել, նիշքի չափը՝ 14,25 ՄԲ, MIME-տեսակը՝ image/gif, looped, 255 frames, 10 վ)
Note: Due to technical limitations, thumbnails of high resolution GIF images such as this one will not be animated.

Այս նիշքը տեղադրված է Վիքիպահեստում է և այն կարող է օգտագործվել այլ նախագծերի կողմից։ Վիքիպահեստում նիշքի մասին տեղեկությունների հիմնական մասը ներկայացված է ստորև։

Ամփոփում

Նկարագրում
English: The piece of Mandelbrot Set:

Coordinates: -1.96680095, 0.00000478;

Width: 0.00000014.
Русский: Участок множества Мандельброта:

Координаты: -1.96680095, 0.00000478;

Ширина изображения: 0.00000014.
Українська: Фрагмент множини Мандельброта:

Координати: -1.96680095, 0.00000478;

Ширина зображення: 0.00000014.
Թվական
Աղբյուր Բեռնողի սեփական աշխատանք
Հեղինակ Aokoroko
Այլ մեկնակերպներ
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.749675773048651182L;
long double ordi = -0.000001140170813768L;
long double size_val = 0.0000000000000021L;
const int targetW = 3840;
const int targetH = 3840;
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(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 (int b = 0; b < rawH; ++b) {
for (int a = 0; a < 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 <= 50000.0));
if (t == 0) {
iterMap[b * rawW + a] = 255;} else {
iterMap[b * 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[(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

Assessment

Media of the day This file was selected as the media of the day for 08 February 2025. It was captioned as follows:
English: The piece of Mandelbrot Set:
Coordinates: -1.96680095, 0.00000478; Width: 0.00000014
Other languages
English: The piece of Mandelbrot Set:
Coordinates: -1.96680095, 0.00000478; Width: 0.00000014
Français : Représentation d'un fragment de l'ensemble de Mandelbrot.
Українська: Фрагмент множини Мандельброта:
Координати: -1.96680095, 0.00000478; Ширина: 0.00000014

Արտոնագրում

Ես, սույն աշխատանքի հեղինակային իրավունքների տերը, այսուհետ այն հրատարակում եմ հետևյալ արտոնագրի ներքո։
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.

Captions

Add a one-line explanation of what this file represents
Участок множества Мандельброта: Координаты: -1.96680095, 0.00000478; Ширина изображения: 0.00000014

Items portrayed in this file

պատկերված

1 մարտի 2017

Նիշքի պատմություն

Մատնահարեք օրվան/ժամին՝ նիշքի այդ պահին տեսքը դիտելու համար։

Օր/ԺամՄանրապատկերՕբյեկտի չափըՄասնակիցՄեկնաբանություն
ընթացիկ18:57, 16 մարտի 202618:57, 16 մարտի 2026 տարբերակի մանրապատկերը400 × 400 (14,25 ՄԲ)wikimediacommons>AokorokoRed channel - sin 2π

Հետևյալ էջը հղվում է այս նիշքին՝