#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int main() {
const int WIDTH = 800;
const int HEIGHT = 600;
const int MAX_ITER = 1000;
double xmin = -2.0, xmax = 1.5;
double ymin = -2.0, ymax = 1.5;
ofstream img("burning_ship.ppm");
img << "P3\n" << WIDTH << " " << HEIGHT << "\n255\n";
for (int y = 0; y < HEIGHT; y++) {
for (int x = 0; x < WIDTH; x++) {
// mapare pixel -> plan complex
double a = xmin + x * (xmax - xmin) / WIDTH;
double b = ymin + y * (ymax - ymin) / HEIGHT;
double zx = 0, zy = 0;
int iter = 0;
while (zx*zx + zy*zy <= 4 && iter < MAX_ITER) {
double xtemp = zx*zx - zy*zy + a;
zy = 2 * abs(zx) * abs(zy) + b;
zx = xtemp;
iter++;
}
// colorare
int color = (int)(255.0 * iter / MAX_ITER);
img << color << " " << 0 << " " << (255 - color) << " ";
}
img << "\n";
}
img.close();
cout << "Imaginea a fost generata: burning_ship.ppm\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPGNtYXRoPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkgewogICAgY29uc3QgaW50IFdJRFRIID0gODAwOwogICAgY29uc3QgaW50IEhFSUdIVCA9IDYwMDsKICAgIGNvbnN0IGludCBNQVhfSVRFUiA9IDEwMDA7CgogICAgZG91YmxlIHhtaW4gPSAtMi4wLCB4bWF4ID0gMS41OwogICAgZG91YmxlIHltaW4gPSAtMi4wLCB5bWF4ID0gMS41OwoKICAgIG9mc3RyZWFtIGltZygiYnVybmluZ19zaGlwLnBwbSIpOwogICAgaW1nIDw8ICJQM1xuIiA8PCBXSURUSCA8PCAiICIgPDwgSEVJR0hUIDw8ICJcbjI1NVxuIjsKCiAgICBmb3IgKGludCB5ID0gMDsgeSA8IEhFSUdIVDsgeSsrKSB7CiAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBXSURUSDsgeCsrKSB7CgogICAgICAgICAgICAvLyBtYXBhcmUgcGl4ZWwgLT4gcGxhbiBjb21wbGV4CiAgICAgICAgICAgIGRvdWJsZSBhID0geG1pbiArIHggKiAoeG1heCAtIHhtaW4pIC8gV0lEVEg7CiAgICAgICAgICAgIGRvdWJsZSBiID0geW1pbiArIHkgKiAoeW1heCAtIHltaW4pIC8gSEVJR0hUOwoKICAgICAgICAgICAgZG91YmxlIHp4ID0gMCwgenkgPSAwOwogICAgICAgICAgICBpbnQgaXRlciA9IDA7CgogICAgICAgICAgICB3aGlsZSAoengqenggKyB6eSp6eSA8PSA0ICYmIGl0ZXIgPCBNQVhfSVRFUikgewogICAgICAgICAgICAgICAgZG91YmxlIHh0ZW1wID0gengqenggLSB6eSp6eSArIGE7CiAgICAgICAgICAgICAgICB6eSA9IDIgKiBhYnMoengpICogYWJzKHp5KSArIGI7CiAgICAgICAgICAgICAgICB6eCA9IHh0ZW1wOwogICAgICAgICAgICAgICAgaXRlcisrOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBjb2xvcmFyZQogICAgICAgICAgICBpbnQgY29sb3IgPSAoaW50KSgyNTUuMCAqIGl0ZXIgLyBNQVhfSVRFUik7CiAgICAgICAgICAgIGltZyA8PCBjb2xvciA8PCAiICIgPDwgMCA8PCAiICIgPDwgKDI1NSAtIGNvbG9yKSA8PCAiICI7CiAgICAgICAgfQogICAgICAgIGltZyA8PCAiXG4iOwogICAgfQoKICAgIGltZy5jbG9zZSgpOwogICAgY291dCA8PCAiSW1hZ2luZWEgYSBmb3N0IGdlbmVyYXRhOiBidXJuaW5nX3NoaXAucHBtXG4iOwogICAgcmV0dXJuIDA7Cn0K