#include #include #include #include "complex.h" using namespace std; // Это программа создаёт анимацию (набор картинок) // которая задаётся как меняющееся во времени // комплексная функция (описана в функции func) struct Color { unsigned char r, g, b; }; Complex func(Complex z, int time) { Complex f = 100/(z - (0.02f*time))*exp(z*sin(z)); f.re = fabs(f.re); f.im = fabs(f.im); if (f.re > 255) f.re = 255; if (f.im > 255) f.im = 255; return f; } int main() { int width = 800, height = 800; float x0 = -2.0f, x1 = 2.0f; float y0 = -2.0f, y1 = 2.0f; Color* data = (Color*)malloc(sizeof(Color) * width * height); // Повторяем 200 раз int max_time_steps = 200; for (int time = 0; time < max_time_steps; time++) { // Задаём изображение в массиве data for (int j = 0; j < height; j++) { for (int i = 0; i < width; i++) { Complex z = {x0 + (x1-x0) / width * i, y0 + (y1-y0) / width * j}; Complex f = func(z, time); data[i + width * j].r = 0; data[i + width * j].g = f.re; data[i + width * j].b = f.im; } } // Создаём в строке filename имя изображения // Папка animation должна существовать! char filename[100]; sprintf(filename, "animation/complex_%03d.ppm", time); // Сохраняем изображение в картинке по имени filename FILE* file = fopen(filename, "wb"); fprintf(file, "P6\n%d %d\n255\n", width, height); fwrite(data, sizeof(Color), height * width, file); fclose(file); } free(data); }