File:6furcation.gif

From testwiki
Jump to navigation Jump to search

6furcation.gif(500 × 500 pixels, file size: 27 KB, MIME type: image/gif, looped, 25 frames, 25 s)

This file is from Wikimedia Commons and may be used by other projects. The description on its file description page there is shown below.

Summary

Description
English: changes of critical orbit of complex quadratic polynomial along Mandelbrot set main cardioid internal ray of angle 1/6
Source Own work
Author Adam majewski

Long description

This file shows 25 critical orbits[1][2] which are changing along internal ray of angle =1/6 of main cardioid. Let :

Internal angle or rotation number :

Internal radius :

Multiplier of fixed point :

Parameter of function

For this is equation for main cardioid.

When varies and is constant then goes along internal ray.

How this file was created ?

  • Create 25 ppm files for epsilon changing from -1.000 to 0.002. See source of C program below
  • Convert ppm files to jpg
  • Convert 25 jpg files to one animated gif file using Total Commander and GIFWCX 1.1 packer plugin by Sascha Hlusiak

Critical orbits looks very nice[3] and are important for analyzing dynamics. One may use great Java applet by Evgeny Demidov[4]

C source code

It is a console C program ( one file) It can be compiled under :

  • windows ( gcc thru Dev-C++ )
  • linux and mac using gcc :
gcc main.c -lm

it creates a.out file. Then run it :

./a.out

It creates ppm file in program directory. Use file viewer to see it.


/* c console program which creates ppm file */
#include <stdio.h>
#include <stdlib.h> /* for ISO C Random Number Functions */
#include <math.h>

#define PI 3.14159265


 
/*  gives sign of number */
double sign(double d)
{
       if (d<0)
       {return -1.0;}
       else {return 1.0;};
};

 



/*-----------------------------*/

 int main()
{   /* 
    epsilon:0.001;
    radius:1+epsilon;
    angle:(3-sqrt(5))/2; 
    l:radius * exp(%i*angle*2*%pi);
    c:l/2 - (l*l)/4;
    c =0.58762398718188*%i-0.39095328938716
    -------------------------
    epsilon:-0.001;
    0.58595232559771*%i-0.39012849476251
    --------------------------------
    epsilon:0.0;
    0.58678790734697*%i-0.3905408702184
    -------------------------
    trifurcation angle:1/3;
    
    
    -------------------
    epsilon:0.0;
    radius:1+epsilon;
    angle:1/4;  tetrafurcation
    -0.4<y <0.4
    --------------------
    1/5 -0.2 <Zx  <0.4;
    0.0 < ZyM< 0.8
    -----------------------
    

*/
    double angle=1.0/6.0, 
           epsilon=-0.0005,
           radius=1.0+epsilon,
           /* L=Lx+Ly*i=lambda=radius * exp(i*angle*2*PI); */
           Lx=cos(2*PI*angle)*radius, 
           Ly=sin(2*PI*angle)*radius,
           /* C= Cx+Cy*i = L/2 - L*L/4  */
           Cx=-(cos(4*PI*angle)*radius*radius)/4+(cos(2*PI*angle)*radius)/2,
           Cy=((sin(2*PI*angle)*(epsilon+1))/2-(sin(4*PI*angle)*radius*radius)/4);
           
    
    /* screen coordinate = coordinate of pixels */      
    int iX, iY, 
        iXmin=0, iXmax=500,
        iYmin=0, iYmax=500,
        iWidth=iXmax-iXmin+1,
        iHeight=iYmax-iYmin+1,
        /* 3D data : X , Y, color */
        /* number of bytes = number of pixels of image * number of bytes of color */
        iLength=iWidth*iHeight*3,/* 3 bytes of color  */
        period,
        index; /* of array */
        
   int iXinc, iYinc,iIncMax=1, /* width of big pixel;  for iXmax=2000 chose 6, for 500 choose 2 */    
       iIncMax2;
   /* world ( double) coordinate = parameter plane*/
    const double ZxMin=-0.2;
    const double ZxMax=0.6;
    const double ZyMin=0.0;
    const double ZyMax=0.8;
    /* */
    double PixelWidth=(ZxMax-ZxMin)/iWidth;
    double PixelHeight=(ZyMax-ZyMin)/iHeight;
    double Zx, Zy,    /* Z=Zx+Zy*i   */
           Z0x, Z0y,  /* Z0 = Z0x + Z0y*i */
           Zx2, Zy2, /* Zx2=Zx*Zx;  Zy2=Zy*Zy  */
           NewZx, NewZy,
           DeltaX, DeltaY,
           SqrtDeltaX, SqrtDeltaY,
           AlphaX, AlphaY,
           BetaX,BetaY, /* repelling fixed point Beta */
           AbsLambdaA,AbsLambdaB,
           Z_cr_x=0.0, Z_cr_y=0.0; /* critical point */
     
        
        /*  */
        int Iteration,
            IterationMax=100000,
            iTemp;
     /* bail-out value , radius of circle ;  */
    const int EscapeRadius=40;
    int ER2=EscapeRadius*EscapeRadius;
    double  /*  AR= minimal distance from attractor = Attractor Radius */
           AR2=1.0e-6, /* AR2=AR*AR */
           d,dX,dY; /*  distance from attractor : d=sqrt(dx*dx+dy*dy) */

    
    /* PPM file */
    FILE * fp;
    char *filename="co_a_1_6_m00005_5.ppm";
    char *comment="# this is julia set for c= ";/* comment should start with # */
    const int MaxColorComponentValue=255;/* color component ( R or G or B) is coded from 0 to 255 */
    
    
    
    /* dynamic 1D array for 24-bit color values */    
    unsigned char *array;
    
    
    
    
    

   printf(" angle= %f\n",angle);
   printf(" epsilon= %f\n",epsilon);   
   printf(" radius= %f\n",radius);
     
   printf(" Lx= %f\n",Lx);
   printf(" Ly= %f\n",Ly);
   printf(" Cx= %f\n",Cx);  
   printf(" Cy= %f\n",Cy);  
   printf(" ZxMax-ZxMin= %f\n",ZxMax-ZxMin);
   printf(" ZyMax-ZyMin= %f\n",ZyMax-ZyMin);

   /*-----------------*/
    
    array = malloc( iLength * sizeof(unsigned char) );
    if (array == NULL)
    {
      fprintf(stderr,"Could not allocate memory");
      getchar();
      return 1;
    }
    else 
    {         
      printf(" I'm working. Wait \n");
      /* fill the data array with black points */       
      for(index=0;index<iLength-1;++index) array[index]=0;
      /* ---------------------------------------------------------------*/
      
  /*------ draw orbit of critical point  ---------------------------*/
  /* Z0 = Z_critical */
   Zx=Z_cr_x;
   Zy=Z_cr_y;
  
   Zx2=Zx*Zx;
   Zy2=Zy*Zy;
  
   //dX=Zx-AlphaX;
//    dY=Zy-AlphaY;
    d=Zx2+Zy2;
  //iIncMax2=0;
   for (Iteration=0;Iteration<IterationMax ;Iteration++) /* && (d>AR2) */
   {
    Zy=2*Zx*Zy + Cy;
    Zx=Zx2-Zy2 +Cx;
    
    /* translate from world to screen coordinate */
    iX=(Zx-ZxMin)/PixelWidth;
    iY=(Zy-ZyMin)/PixelHeight; /*  */
    //for(iYinc=-iIncMax;iYinc<iIncMax2;++iYinc)
//     for(iXinc=-iIncMax;iXinc<iIncMax2;++iXinc)
     { 
      iTemp=((iYmax-iY-1)*iXmax+iX)*3; //((iYmax-iY-1+iYinc)*iXmax+iX+iXinc)*3;
      if(iTemp<=iLength && iTemp>-1) // safety                                         
      {array[iTemp]=255; /* white point */
      array[iTemp+1]=255;
      array[iTemp+2]=255; 
      } 
      else    printf(" out\n");
     }
    /* ---------*/
    Zx2=Zx*Zx;
    Zy2=Zy*Zy;
    //dX=Zx-AlphaX;
//    dY=Zy-AlphaY;
//    d=dX*dX+dY*dY;
      d=Zx2+Zy2;
   };  
    
    
   
 
    
    

       
/* write the whole data array to ppm file in one step ----------------------- */      
      /*create new file,give it a name and open it in binary mode  */
      fp= fopen(filename,"wb"); /* b -  binary mode */
      if (fp == NULL){ fprintf(stderr,"file error"); }
            else
            {
            /*write ASCII header to the file*/
            fprintf(fp,"P6\n %s\n %d\n %d\n %d\n",comment,iXmax,iYmax,MaxColorComponentValue);
            /*write image data bytes to the file*/
            fwrite(array,iLength ,1,fp);
            fclose(fp);
            fprintf(stderr,"file saved");
            getchar();
            }

      
           
      
      free(array);
      
      return 0;
    } /* if (array ..  else ... */
  
}

Maxima source code

This is program in Maxima which does the same as above C program.


/*  
this is batch file for Maxima  5.13.0
http://maxima.sourceforge.net/
tested in wxMaxima 0.7.1
using draw package ( interface to gnuplot ) to draw on the screen
draws  critical orbit = orbit of critical point
and finds period 
Adam Majewski fraktal.republika.pl
with help of 
Mario Rodriguez Riotorto http://www.telefonica.net/web2/biomates archive copy at the Wayback Machine
*/
/* compute c for given radius, angle and l ( lambda=multiplier of fixed point) */
epsilon:0.001;
radius:1+epsilon;
angle:(3-sqrt(5))/2; /* in radians */
l:radius * exp(%i*angle*2*%pi);
c:l/2 - (l*l)/4;
trigsimp(%);
rectform(%);
c:float(%), numer;
/* define function ( map) for dynamical system z(n+1)=f(zn,c)  */
f(z,c):=z*z+c;
/* maximal number of iterations */
iMax:200; /* to big couses bind stack overflow */
EscapeRadius:10;
/* define z-plane ( dynamical ) */
zxMin:-0.8;
zxMax:0.2;
zyMin:-0.2;
zyMax:0.8;
/* resolution is proportional to number of details and time of drawing */
iXmax:1000;
iYmax:1000;
/* compute critical point */
zcr:rhs(solve(diff(f(z,c),z,1)));
/* save critical point to 2 lists */
xcr:makelist (realpart(zcr), i, 1, 1); /* list of re(z) */
ycr:makelist (imagpart(zcr), i, 1, 1); /* list of im(z) */	
/* ------------------- compute forward orbit of critical point ----------*/
z:zcr; /* first point  */
orbit:[z];
for i:1 thru iMax step 1 do
block
(
 z:f(z,c),
 if abs(z)>EscapeRadius then return(i) else orbit:endcons(z,orbit)
 );
/*-------------- save orbit to draw it later on the screen ----------------------------- */
/* save the z values to 2 lists */
xx:makelist (realpart(zcr), i, 1, 1); /* list of re(z) */
yy:makelist (imagpart(zcr), i, 1, 1); /* list of im(z) */
for i:2 thru length(orbit) step 1 do
block
(
 xx:cons(realpart(orbit[i]),xx), 
 yy:cons(imagpart(orbit[i]),yy)
);		
/* draw reversed orbit of beta  using draw package */
load(draw);
draw2d(
 terminal  = 'screen,
 pic_width  = iXmax,
   pic_height = iYmax,
yrange = [zyMin,zyMax],
  xrange = [zxMin,zyMax],
title= concat(" dynamical plane for f(z,c):=z*z+",string(c)),
xlabel     = "Z.re ",
   ylabel     = "Z.im",
   point_type    = filled_circle,
   points_joined = false,
color		  =red,
point_size    = 0.5,
key = "critical orbit",
points(xx,yy),
key = "critical point",
color		  =blue,
points_joined = false,
points(xcr,ycr)
);

Avi version of this file

References

  1. M. Romera, G. Pastor, and F. Montoya : Multifurcations in nonhyperbolic fixed points of the Mandelbrot map. Fractalia archive copy at the Wayback Machine 6, No. 21, 10-12 (1997)
  2. Burns A M archive copy at the Wayback Machine : Plotting the Escape: An Animation of Parabolic Bifurcations in the Mandelbrot Set. Mathematics Magazine, Vol. 75, No. 2 (Apr., 2002), pp. 104-116
  3. Image by conanite
  4. The Julia sets trip with orbit - Java applet by Evgeny Demidov


Licensing

I, the copyright holder of this work, hereby publish it under the following licenses:
w:en:Creative Commons
attribution share alike
This file is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported license.
You are free:
  • to share – to copy, distribute and transmit the work
  • to remix – to adapt the work
Under the following conditions:
  • attribution – You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
  • share alike – If you remix, transform, or build upon the material, you must distribute your contributions under the same or compatible license as the original.
GNU head Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled GNU Free Documentation License.
You may select the license of your choice.

Captions

Add a one-line explanation of what this file represents

Items portrayed in this file

depicts

image/gif

4d0544bcfaae279f836d5dc7ed76c58a3f62376e

27,942 byte

25 second

500 pixel

500 pixel

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current17:51, 6 July 2008Thumbnail for version as of 17:51, 6 July 2008500 × 500 (27 KB)wikimediacommons>Soul windsurfer{{Information |Description={{en|1=changes of critical orbit along main cardioid internal ray of angle 1/6}} |Source=Own work by uploader |Author=Adam majewski |Date= |Permission= |other_versions= }} {{ImageUpload|full}}

The following page uses this file: