Исходный файл (2000 × 2000 пикселей, размер файла: 784 КБ, тип MIME: image/png )
ОписаниеФейгенбаум Джулия set.png | Русский: Множество Фейгенбаума-Жюлиа.Параметр c является приближением точки Майрберга-Фейгенбаума = точки Фейгенбаума, которая является пределом каскада бифуркаций удвоения периода и точкой приземления лучей параметра с иррациональными углами. |
Дата | |
Источник | Собственная работа |
Автор | Душа виндсерфера |
#include <complex.h> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <omp.h> //OpenM /* ответвление mandelbrot-book как написать книгу о множестве Мандельброта Клода Хейланда-Алле https://code.mathr.co.uk/mandelbrot-book/blob/HEAD:/book/https://stackoverflow.com/questions/77135883/why-do-my-functions-not-work-in-parallelgcc cc -lm -Wall -fopenmp./a.out >ed.ppm // P6 = двоичный Portable PixMap, см. https://en.wikipedia.org/wiki/Netpbm#File_formatsконвертировать ed.ppm -изменить размер 25% ed.png */const double pi = 3.141592653589793 ; int q = 2 ; // степень многозначного множества комплексное двойное f ( комплексное двойное z , комплексное двойное c ) { return z * z + c ;} // мультиброт z^q + c комплексное двойное d ( комплексное двойное z ) { return 2 * z ; } // производная q*z^{q-1} double cnorm ( double _Complex z ) // https://stackoverflow.com/questions/6363247/что-такое-сложный-тип-данных-и-мнимый-тип-данных-в-c { return creal ( z ) * creal ( z ) + cimag ( z ) * cimag ( z ); } void hsv2rgb ( double h , double s , double v , int * red , int * grn , int * blu ) { double i , f , p , q , t , r , g , b ; int ii ; if ( s == 0.0 ) { r = g = b = v ; } else { h = 6 * ( h - floor ( h )); ii = i = floor ( h ); f = h - i ; p = v * ( 1 - s ); q = v * ( 1 - ( s * f )); t = v * ( 1 - ( s * ( 1 - f ))); switch ( ii ) { case 0 : r = v ; g = t ; b = p ; break ; case 1 : r = q ; g = v ; b = p ; break ; случай 2 : r = p ; g = v ; b = t ; перерыв ; случай 3 : r = p ; g = q ; b = v ; перерыв ; случай 4 : r = t ; g = p ; b = v ; перерыв ; по умолчанию : r = v ; g = p ; b = q ; перерыв ; } } * красный = fmin ( fmax ( 255 * r + 0,5 , 0 ), 255 ); * зеленый = fmin ( fmax ( 255 * g + 0,5 , 0 ), 255 ); * синий = fmin ( fmax ( 255 * b + 0,5 , 0 ), 255 ); } int main () { // целочисленный размер изображения const int w = 8000 ; const int h = 8000 ; const int n = 1024 ; const double r = 2.0 ; // радиус плоскости const double px = r / ( h / 2 ); const double r2 = 25 * 25 ; // радиус выхода (ER) = r so r2 = ER*ER unsigned char * img = malloc ( 3 * w * h ); double _Complex c = -1.4011551890 ; #pragma omp parallel for schedule(dynamic) for ( int j = 0 ; j < h ; ++ j ) { double y = ( h / 2 - ( j + 0.5 )) / ( h / 2 ) * r ; for ( int i = 0 ; i < w ; ++ i ) { double x = ( i + 0.5 - w / 2 ) / ( h / 2 ) * r ; // для q=2 добавляем -0.5 double _Complex z = x + I * y ; double _Complex dz = 1.0 ; // первая производная zn по z int k ; for ( k = 0 ; k < n ; ++ k ) { // dz = d ( z ) * dz ; z = f ( z , c ); if ( cnorm ( z ) > r2 ) break ; } // цвет double hue = 0 , sat = 0 , val = 1 ; // внутренний цвет = белый if ( k < n ) { // внешний и граничный цвет double _Complex de = 2 * z * log ( cabs ( z )) / dz ; hue = fmod ( 1 + carg ( de ) / ( 2 * pi ), 1 ); // ? наклон de sat = 0.25 ; val = tanh ( cabs ( de ) / px ); } // преобразование hsv в rgb int red , grn , blu ; hsv2rgb ( hue , sat , val , & red , & grn , & blu ); // сохранение цвета rgb в массив img [ 3 * ( j * w + i ) + 0 ] = red ; img [ 3 * ( j * w + i ) + 1 ] = grn ; img [ 3 * ( j * w + i ) + 2 ] = blu ; } } // printf ( "P6 \n %d %d \n 255 \n " , w , h ); fwrite ( img , 3 * w * h , 1 , stdout ); free ( img ); вернуть 0 ; }
gcc c.c -lm -Wall -fopenmp./a.out >ed.ppm преобразовать ed.ppm -изменить размер 25 % ed.png rm ред.ppm
все : chmod +x c.sh ./c.sh
Ту запустить программу просто
делать
Нажмите на дату/время, чтобы просмотреть файл в том виде, в котором он был в тот момент.
Дата/Время | Миниатюра | Размеры | Пользователь | Комментарий | |
---|---|---|---|---|---|
текущий | 18:25, 19 октября 2023 г. | 2000 × 2000 (784 КБ) | Душа виндсерфера | Загрузил собственную работу с помощью UploadWizard |
Следующие 2 страницы используют этот файл:
Этот файл используют и другие вики:
Этот файл содержит дополнительную информацию, вероятно, добавленную с цифровой камеры или сканера, использовавшихся для его создания или оцифровки.
Если файл был изменен по сравнению с его исходным состоянием, некоторые данные могут не полностью отражать измененный файл.
Дата и время изменения файла | 18:15, 19 октября 2023 г. |
---|