Αρχείο:6furcation.gif

Τα περιεχόμενα της σελίδας δεν υποστηρίζονται σε άλλες γλώσσες.
Αυτό το αρχείο προέρχεται από το Wikimedia Commons
Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια

6furcation.gif(500 × 500 εικονοστοιχεία, μέγεθος αρχείου: 27 KB, τύπος MIME: image/gif, κυκλικά επαναλαμβανόμενο, 25 καρέ, 25 s)

Σύνοψη

Περιγραφή
English: changes of critical orbit of complex quadratic polynomial along Mandelbrot set main cardioid internal ray of angle 1/6
Πηγή Έργο αυτού που το ανεβάζει
Δημιουργός 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)
);

External links

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


Αδειοδότηση

Εγώ, ο κάτοχος των πνευματικών δικαιωμάτων αυτού του έργου, το δημοσιεύω δια του παρόντος υπό τις εξής άδειες χρήσης:
w:el:Creative Commons
αναφορά προέλευσης παρόμοια διανομή
Είστε ελεύθερος:
  • να μοιραστείτε – να αντιγράψετε, διανέμετε και να μεταδώσετε το έργο
  • να διασκευάσετε – να τροποποιήσετε το έργο
Υπό τις ακόλουθες προϋποθέσεις:
  • αναφορά προέλευσης – Θα πρέπει να κάνετε κατάλληλη αναφορά, να παρέχετε σύνδεσμο για την άδεια και να επισημάνετε εάν έγιναν αλλαγές. Μπορείτε να το κάνετε με οποιοδήποτε αιτιολογήσιμο λόγο, χωρίς όμως να εννοείται με οποιονδήποτε τρόπο ότι εγκρίνουν εσάς ή τη χρήση του έργου από εσάς.
  • παρόμοια διανομή – Εάν αλλάξετε, τροποποιήσετε ή δημιουργήσετε πάνω στο έργο αυτό, μπορείτε να διανείμετε αυτό που θα προκύψει μόνο υπό τους όρους της ίδιας ή συμβατής άδειας με το πρωτότυπο.
GNU head Παραχωρείται η άδεια προς αντιγραφή, διανομή και/ή τροποποίηση αυτού του εγγράφου υπό τους όρους της Άδειας Ελεύθερης Τεκμηρίωσης GNU, Έκδοση 1.2 ή οποιασδήποτε νεότερης έκδοσης δημοσιευμένης από το Ίδρυμα Ελεύθερου Λογισμικού· χωρίς Απαράλαχτους Τομείς, χωρίς Κείμενα Εξωφύλλου, και χωρίς Κείμενα Οπισθοφύλλου. Αντίγραφο της άδειας περιλαμβάνεται στην σελίδα με τίτλο GNU Free Documentation License.
Μπορείτε να επιλέξετε την άδεια της προτίμησής σας.

Λεζάντες

Δεν ορίστηκε λεζάντα

Items portrayed in this file

απεικονίζει

checksum Αγγλικά

4d0544bcfaae279f836d5dc7ed76c58a3f62376e

data size Αγγλικά

27.942 Byte

25 δευτερόλεπτο

500 εικονοστοιχείο

500 εικονοστοιχείο

Ιστορικό αρχείου

Κλικάρετε σε μια ημερομηνία/ώρα για να δείτε το αρχείο όπως εμφανιζόταν εκείνη τη στιγμή.

Ώρα/Ημερομ.ΜικρογραφίαΔιαστάσειςΧρήστηςΣχόλια
τελευταία16:51, 6 Ιουλίου 2008Μικρογραφία για την έκδοση της 16:51, 6 Ιουλίου 2008500 × 500 (27 KB)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}}

Τα παρακάτω λήμματα συνδέουν σε αυτό το αρχείο:

Καθολική χρήση αρχείου

Τα ακόλουθα άλλα wiki χρησιμοποιούν αυτό το αρχείο: