Перейти на страницу файла на Викискладе

Файл:Feigenbaum stretch.png

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Исходный файл(1500 × 500 пкс, размер файла: 668 КБ, MIME-тип: image/png)

Краткое описание

Описание
English: feigenbaum stretch and period doubling cascade. Part of the Mandelbrot set: 12 hyperbolic components period doubling cascade from period 2^0 = 1 to period 2^11 = 2 048. Transform is with which is the Myrberg-Feigenbaum point of family. "With an exponential mapping it is possible to show the self-similarities of these bulbs, and the densification of filaments when zoom depth increases.[1] Created with C program m-streching-feigenbaum.c from mandelbrot-graphics library by Claude Heiland-Allen. See also wikibooks
Дата
Источник Собственная работа
Автор Soul windsurfer
Другие версии

Fractalshades doc : P01-feigenbaum expmap

C source code

/*

https://fractalforums.org/fractal-image-gallery/18/feigenbaum-stretch/2112
https://fractalforums.org/programming/11/m-streching-feigenbaum-from-mandelbrot-graphics-library-by-claude/3077



m-streching-feigenbaum.c

Transform is c ←e^c+c0 
with c0=−1.401155189092051.


pari error : 

gcc m.c -lm -Wall -fopenmp -lpari $(pkg-config --cflags --libs cairo)
gcc m.c -lm -Wall -fopenmp -lpari -lmpc -lmpfr -lgmp -lm $(pkg-config --cflags --libs cairo)

eror from pari:
gcc m.c -lm -Wall -fopenmp -lpari -lmpc -lmpfr -lgmp -lm $(pkg-config --cflags --libs cairo)
In file included from mandelbrot-numerics.h:8:0,
                 from m.c:9:
/usr/include/x86_64-linux-gnu/pari/paridecl.h:1262:34: error: expected ‘)’ before ‘__extension__’
 GEN     alg_quotient(GEN al, GEN I, int maps);
                                  ^
In file included from /usr/include/x86_64-linux-gnu/pari/pari.h:45:0,
                 from m_binangle.c:3,
                 from m.c:18:
/usr/include/x86_64-linux-gnu/pari/paridecl.h:1262:37: error: expected ‘;’, ‘,’ or ‘)’ before ‘int’
 GEN     alg_quotient(GEN al, GEN I, int maps);
                                     ^~~
In file included from mandelbrot-numerics.h:8:0,







*/


#include "mandelbrot-numerics.h"
#include "mandelbrot-graphics.h"
//#include "mandelbrot-symbolics.h"
#include "m_d_transform.c"
#include "m_d_mat2.c"
#include "m_d_util.h"
#include "m_pixel.c"
#include "m_d_colour.c"
#include "m_d_render_scanline.c"
//#include "m_binangle.c"
#include "m_d_exray_in.c"
#include <stdio.h>

// #include <pari/pari.h>



/*

input
* s_b_angle = binary angle as a string ( for cairo_text_path)
* s_q_angle = the same angle as a decimal rational number ( for m_d_exray_in_new)
*/
void draw_external_ray(m_image *image, m_d_transform *transform, const char *s_b_angle, const char *s_q_angle, m_pixel_t colour, double dx, double dy, int iMax) {
  //int maxiters = 5024;
  double r = sqrt(2);

  // rational angle 
  mpq_t q_angle;
  mpq_init(q_angle);
  mpq_set_str(q_angle, s_q_angle, 10);
  m_d_exray_in *ray = m_d_exray_in_new(q_angle, 8);
  mpq_clear(q_angle);

  cairo_surface_t *surface = m_image_surface(image);
  cairo_t *cr = cairo_create(surface);
  cairo_set_source_rgba(cr, m_pixel_red(colour), m_pixel_green(colour), m_pixel_blue(colour), m_pixel_alpha(colour));
  bool first = true;
  
  
  for (int i = 0; i < iMax; ++i) {
    if (m_failed == m_d_exray_in_step(ray, 64)) {
      break;
    }
    double _Complex c = m_d_exray_in_get(ray);
    
    if (cabs(c + 0.75) > r) {
      continue;
    }
  
  
    //double t = carg(c +3.14 ); // +0.75
    double t = cimag(c) > 0 ? twopi / 4 : -twopi / 4;
 
    double _Complex dc = 1;
    m_d_transform_reverse(transform, &c, &dc);
    if (first) {
      cairo_save(cr);
      cairo_translate(cr, creal(c) + dx, cimag(c) + dy);
      cairo_rotate(cr, -t);
      cairo_select_font_face(cr, "LMMono10", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
      cairo_set_font_size(cr, 15);
      //cairo_text_path(cr, s_b_angle); 
      cairo_fill(cr);
      cairo_restore(cr);
      cairo_move_to(cr, creal(c) + dx, cimag(c) + dy);
      first = false;
    } else {
      cairo_line_to(cr, creal(c), cimag(c));
    }
  }
  cairo_stroke(cr);
  cairo_destroy(cr);
}







extern int main(int argc, char **argv) {
  (void) argc; // https://stackoverflow.com/questions/21045615/what-does-voidvar-actually-do
  (void) argv;
  int w = 1500;
  int h = 500;
  double r = 3.0;
  m_pixel_t black = m_pixel_rgba(0, 0, 0, 1);
  m_pixel_t white = m_pixel_rgba(1, 1, 1, 1);
  double er = 100;
  int maxiters = 100100;
  const char *filename = "3_1500____.png";
  m_pixel_t red   = m_pixel_rgba(1, 0, 0, 1);
 
  
  
  // m_d_transform.c
  m_d_transform *rect = m_d_transform_rectangular(w, h, -2.5 * r, r);
  m_d_transform *exponential = m_d_transform_exponential(-1.401155189093314712);
  m_d_transform *transform = m_d_transform_compose(rect, exponential);
  m_d_colour_t *colour = m_d_colour_minimal(white, black, white);
  m_image *image = m_image_new(w, h);
    

  m_d_render_scanline(image, transform, er, maxiters, colour);
  
  
  // period 1
  draw_external_ray(image, transform, ".(0)","0/1", red, 0, 0, 1000);
  draw_external_ray(image, transform, ".(1)","1/1", red, 0, 0, 1000);
    // period 2
  draw_external_ray(image, transform, ".(01)","1/3", red, 0, 0, 1000);
  draw_external_ray(image, transform, ".(10)","2/3", red, 0, 0, 1000);
  // period 4
  draw_external_ray(image, transform, ".(0110)","2/5", red, 0, 0, 1000);
  draw_external_ray(image, transform, ".(1001)","3/5", red, 0, 0, 1000);
  // period 8 : The angle  105/255  or  p01101001  The conjugate angle is  150/255  or  p10010110 .
  // The kneading sequence is  ABAAABA*  and the internal address is  1-2-4-8 . The corresponding parameter rays are landing at the root of a satellite component of period 8. It is bifurcating from period 4. 
  draw_external_ray(image, transform, ".(01101001)","105/255", red, 0, 0, 2000);
  draw_external_ray(image, transform, ".(10010110)","150/255", red, 0, 0, 2000);
  /*16 
  
  The angle  27030/65535  or  p0110100110010110 period = 16.
The conjugate angle is  38505/65535  or  p1001011001101001 .
The kneading sequence is  ABAAABABABAAABA*  and the internal address is  1-2-4-8-16 . The corresponding parameter rays are landing at the root of a satellite component of period 16. It is bifurcating from period 8.
  */
  draw_external_ray(image, transform, ".(0110100110010110)","27030/65535", red, 0, 0, 3000);
  draw_external_ray(image, transform, ".(1001011001101001)","38505/65535 ", red, 0, 0, 3000);
  /* 32 
  The angle  1771476585/4294967295  or  p01101001100101101001011001101001 has  preperiod = 0  and  period = 32.
     The conjugate angle is  2523490710/4294967295  or  p10010110011010010110100110010110 .
The kneading sequence is  ABAAABABABAAABAAABAAABABABAAABA*  and the internal address is  1-2-4-8-16-32 . The corresponding parameter rays are landing at the root of a satellite component of period 32. It is bifurcating from period 16. 
*/
   draw_external_ray(image, transform, ".(01101001100101101001011001101001)","1771476585/4294967295", red, 0, 0, 5000);
  draw_external_ray(image, transform, ".(10010110011010010110100110010110)","2523490710/4294967295 ", red, 0, 0, 5000);
  /* 64
  The angle  7608434000728254870/18446744073709551615  or  p0110100110010110100101100110100110010110011010010110100110010110 has  preperiod = 0  and  period = 64.
   The conjugate angle is  10838310072981296745/18446744073709551615  or  p1001011001101001011010011001011001101001100101101001011001101001 .
    The kneading sequence is  ABAAABABABAAABAAABAAABABABAAABABABAAABABABAAABAAABAAABABABAAABA*  and the internal address is  1-2-4-8-16-32-64 . The corresponding parameter rays are landing at the root of a satellite component of period 64. It is bifurcating from period 32.
  */
  
   draw_external_ray(image, transform, ".(0110100110010110100101100110100110010110011010010110100110010110)","7608434000728254870/18446744073709551615", red, 0, 0, 7000);
  draw_external_ray(image, transform, ".(1001011001101001011010011001011001101001100101101001011001101001)","10838310072981296745/18446744073709551615", red, 0, 0, 7000);
  
  /* 128   */	
	
  draw_external_ray(image, transform, ""," 7608434000728254871/18446744073709551617", red, 0, 0, 20000);
  draw_external_ray(image, transform, "","10838310072981296746/18446744073709551617", red, 0, 0, 20000);
  
 /* 256   */	
	
  draw_external_ray(image, transform, "","140350834813144189858090274002849666666/340282366920938463463374607431768211457", red, 0, 0, 25000);
  draw_external_ray(image, transform, "","199931532107794273605284333428918544791/340282366920938463463374607431768211457", red, 0, 0, 50000);
  
   /* 512   */	
	
  draw_external_ray(image, transform, "","47758914269546354982683078068829456704164423862093743397580034411621752859031/115792089237316195423570985008687907853269984665640564039457584007913129639937", red, 0, 0, 25000);
  draw_external_ray(image, transform, "","68033174967769840440887906939858451149105560803546820641877549596291376780906/115792089237316195423570985008687907853269984665640564039457584007913129639937", red, 0, 0, 50000);

   /* 1024   */	
	
  draw_external_ray(image, transform, "","5530104462976645357789668135246717684213577438570812788713795609160074859779972275850010568946600338938152850280993543564372004400437191884797533843002986/13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084097", red, 0, 0, 100000);
  draw_external_ray(image, transform, "","7877703466965951741784356862959128443265788382021580589009765834561689170293574700951863729220303088751879007905492507289381878411509378061636115163081111/13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084097", red, 0, 0, 100000);

  
   /* 2018   */	
	
  draw_external_ray(image, transform, "","74146578472109212997136511361482254487891641386702620145716156204378150869765806841403385319857558565549512234915555076261584853249966913297281241601813858394614116897041089993247811088911534355298428851353473257124296480147861272197456166579083811387730393363010282273585299534106637649680409542459252107671/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137217", red, 0, 0, 100000);
  draw_external_ray(image, transform, "","105622735014122377775794007717420218873906056507528037127713924953354524935735156291305092002549977455570601644955838281397204915564449709195566189037660265983153776527824395283054408512334559764154654100731532511713854202194601609276456943961743425775620117321576015966361946404373078655154946787164972029546/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137217", red, 0, 0, 100000);

  
  
  m_image_save_png(image, filename);
  //
  return 0;
}

Лицензирование

Я, владелец авторских прав на это произведение, добровольно публикую его на условиях следующей лицензии:
w:ru:Creative Commons
атрибуция распространение на тех же условиях
Этот файл доступен по лицензии Creative Commons Attribution-Share Alike 4.0 International
Вы можете свободно:
  • делиться произведением – копировать, распространять и передавать данное произведение
  • создавать производные – переделывать данное произведение
При соблюдении следующих условий:
  • атрибуция – Вы должны указать авторство, предоставить ссылку на лицензию и указать, внёс ли автор какие-либо изменения. Это можно сделать любым разумным способом, но не создавая впечатление, что лицензиат поддерживает вас или использование вами данного произведения.
  • распространение на тех же условиях – Если вы изменяете, преобразуете или создаёте иное произведение на основе данного, то обязаны использовать лицензию исходного произведения или лицензию, совместимую с исходной.
  1. Fractalshades doc : P01-feigenbaum expmap

Краткие подписи

Добавьте однострочное описание того, что собой представляет этот файл
feigenbaum stretch and period doubling cascade

Элементы, изображённые на этом файле

изображённый объект

image/png

История файла

Нажмите на дату/время, чтобы посмотреть файл, который был загружен в тот момент.

Дата/времяМиниатюраРазмерыУчастникПримечание
текущий05:19, 15 сентября 2019Миниатюра для версии от 05:19, 15 сентября 20191500 × 500 (668 КБ)Soul windsurferUser created page with UploadWizard

Нет страниц, использующих этот файл.

Глобальное использование файла

Данный файл используется в следующих вики: