File:Mandelbrot Islands of Consciousness.png
From Wikimedia Commons, the free media repository
Jump to navigation
Jump to search
Size of this preview: 600 × 600 pixels. Other resolutions: 240 × 240 pixels | 480 × 480 pixels | 768 × 768 pixels | 1,024 × 1,024 pixels | 2,000 × 2,000 pixels.
Original file (2,000 × 2,000 pixels, file size: 5.99 MB, MIME type: image/png)
File information
Structured data
Captions
Summary
[edit]DescriptionMandelbrot Islands of Consciousness.png |
English: Mandelbrot Islands of Consciousness - only DEM/M version of Mandelbrot Islands of Consciousness.jpg image. It is an example of dense set ( density = = 0.418923 = (BoundaryPixels + InteriorPixels)/AllPixels |
Date | |
Source | Own work |
Author | Adam majewski |
Other versions |
|
Licensing
[edit]I, the copyright holder of this work, hereby publish it under the following license:
This file is licensed under the Creative Commons Attribution-Share Alike 4.0 International 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.
C source code
[edit]/*
c program: console, 1-file
samm.c
algorithms:
- escape time
- DEM/M = distance estimation, Milnor version
"we have an estimate dn for the distance from z0 to M,
where n is the first index for which |zn|>ER.
...
we compared this estimate to a fixed size s and set the pixel
* if dn<s set gray = dn/s
* white otherwise" A Cheritat
--------------------------------
1. draws Mandelbrot set for complex quadratic polynomial
Fc(z)=z*z +c
using samm = Stripe Average Method/Coloring
-------------------------------
2. technique of creating ppm file is based on the code of Claudio Rocchini
http://en.wikipedia.org/wiki/Image:Color_complex_plot.jpg
create 24 bit color graphic file , portable pixmap file = PPM
see http://en.wikipedia.org/wiki/Portable_pixmap
to see the file use external application ( graphic viewer)
-----
it is example for :
https://www.math.univ-toulouse.fr/~cheritat/wiki-draw/index.php/Mandelbrot_set
-------------
http://www.fractalforums.com/programming/dense-image/
https://mathoverflow.net/questions/187842/is-there-an-almost-dense-set-of-quadratic-polynomials-which-is-not-in-the-inte
-------------
compile :
gcc d.c -lm -Wall
./a.out
convert samm.ppm -resize 800x800 samm.png
-------- git --------
cd existing_folder
git init
git remote add origin git@gitlab.com:adammajewski/mandelbrot_wiki_ACh.git
git add samm.c
git commit -m "samm + linear interpolation "
git push -u origin master
https://www.mathplanet.com/education/geometry/points,-lines,-planes-and-angles/finding-distances-and-midpoints
middle point between 2 points: = (z1 + z2) / 2
distance between 2 points = |z2-z1| = abs(z2-z1)
*/
#include <stdio.h>
#include <math.h>
#include <complex.h> // https://stackoverflow.com/questions/6418807/how-to-work-with-complex-numbers-in-c
#define LENGTH 5
int example = 1;
// A viewport is a polygon viewing region in computer graphics
/* screen ( integer) coordinate , remember about aspect ratio !!!*/
int iX,iY;
const int iXmax = 8000;
const int iYmax = 8000;
double width2; // = iWidth/2.0
double height2; // = iHeight/2.0
/* world ( double) coordinate = parameter plane, remember about aspect ratio !!! */
double Cx,Cy;
// c = -0.355298979690605 +1.178016112830515 i period = 0
// c = 0.213487557597331 +0.604701020309395 i period = 0
double CxMin;
double CxMax;
double CyMin;
double CyMax;
//
complex double Center;
double Magnification;
double Radius;
/* */
double PixelWidth; //=(CxMax-CxMin)/iXmax;
double PixelHeight; // =(CyMax-CyMin)/iYmax;
/* color component ( R or G or B) is coded from 0 to 255 */
/* it is 24 bit color RGB file */
const int MaxColorComponentValue=255;
FILE * fp;
char *filename="g8000_01.ppm"; //
char *comment="# ";/* comment should start with # */
static unsigned char color[3]; // 24-bit rgb color
const int IterationMax=320000; // N in wiki
/* bail-out value for the bailout test for exaping points
radius of circle centered ad the origin, exterior of such circle is a target set */
const double EscapeRadius=2000; // = ER big !!!!
const double eps=0.01;
// DEM parameters
double thickness = 0.1;// multiplier
double MinBoundaryWidth; //
// number of pixels
int iBoundaryPixels=0;
int iInteriorPixels=0;
int iExteriorPixels=0;
int iUnknownPixels=0;
int iAllPixels=0;
double density=0.0; // = iBoundary/all
// ------------------- examples -------------------
// all tables shoud have the same examples
/*
{xmin,xmax, ymin,ymax}
e[0 ] = center (-1.747370489, 0.004733564), magnification 4.42685e+06,
https://commons.wikimedia.org/wiki/File:Mandelbrot_Islands_of_Consciousness.jpg
CxMin = -1.747370789;
CxMax = -1.747370189 ;
CyMin = 0.004733264;
CyMax = 0.004733864;
it depends of image size in pixels
usually 640/480 = 4/3 =1,3333333 =
the aspect ratio, or more precisely the Display Aspect Ratio (DAR) – the aspect ratio of the image as displayed; for TV,
DAR was traditionally 4:3 (a.k.a. Fullscreen),
with 16:9 (a.k.a. Widescreen) now the standard for HDTV
*/
double corners[LENGTH][4]={
{-2.5,1.5,-1.5,1.5}, // standard viewport
{-1.7473706, -1.7473700, 0.0047332, 0.0047338}, //
{-0.118608341441624798,
-0.118608339455450601,
-0.649678595428078265,
-0.649678593938447624} //https://commons.wikimedia.org/wiki/File:Fractal_08.jpg
};
/* -1.747370489, 0.004733564), magnification 4.42685e+06
https://dinkydauset.deviantart.com/art/Density-near-the-cardoid-662181713
*/
double CenterMag[LENGTH][3]={
{-0.5, 0.0, 0.666666667},
{-1.747370489, 0.004733564,4.42685e+06}
};
/* -1.747370489, 0.004733564), radsius 4.42685e+06 */
double CenterRadius[LENGTH][3]={
{-0.5,0.0, 1.5},
{-1.747370489, 0.004733564,0.0000002259}
};
double complex C_fromCorners(int iX, int iY){
double Cx,Cy;
Cy=CyMax - iY*PixelHeight; // reverse Y axis
//if (fabs(Cy)<PixelHeight) Cy = 0.0;
Cx=CxMin + iX*PixelWidth;
return Cx+Cy*I;
}
double complex C_fromCenterMag(int iX, int iY){
double x,y;
y = (iY - height2) / height2;// reverse Y axis
//if (fabs(Cy)<PixelHeight) Cy = 0.0;
x= (iX - width2) / height2; ;
return Center + (x - I * y)/Magnification;
}
int SetPlaneFromCorners(int i){
if ((i >= LENGTH) || (i<0)) return 1; // error : bad input
//
CxMin = corners[i][0];
CxMax = corners[i][1];
CyMin = corners[i][2];
CyMax = corners[i][3];
//
Radius = fabs(CyMax-CyMin)/2.0;
Magnification = 1.0/Radius;
// http://www.purplemath.com/modules/midpoint.htm
Center = (CxMax+CxMin)/2.0 + I*(CyMax+CyMin)/2.0;
//
return 0;
}
int SetPlaneFromCenterMag(int i){
if ((i >= LENGTH) || (i<0)) return 1; // error : bad input
Center = CenterMag[i][0] + CenterMag[i][1]*I;
Magnification = CenterMag[i][2];
//
Radius = 1.0/Magnification;
//
width2 = iXmax/2.0;
height2 = iYmax/2.0;
complex double C1 = C_fromCenterMag(0,0);
complex double C2 = C_fromCenterMag(iXmax,iYmax);
CxMin = creal(C1);
CxMax = creal(C2);
CyMin = cimag(C2); // !!!!
CyMax = cimag(C1);
return 0;
}
int SetPlaneFromCenterRadius(int i){
if ((i >= LENGTH) || (i<0)) return 1; // error : bad input
Center = CenterRadius[i][0] + CenterRadius[i][1]*I;
Radius = CenterRadius[i][2];
//
Magnification = 1.0/Radius;
//
width2 = iXmax/2.0;
height2 = iYmax/2.0;
complex double C1 = C_fromCenterMag(0,0);
complex double C2 = C_fromCenterMag(iXmax,iYmax);
CxMin = creal(C1);
CxMax = creal(C2);
CyMin = cimag(C2); // !!!!
CyMax = cimag(C1);
return 0;
}
// -------------------- end examples ------------------------
/*
input :
- complex number
- intege
output = estimator dn
*/
double Give_D(double complex C , int iMax)
{
int i=0; // iteration
double complex Z= C; // initial value for iteration Z0 is not 0 because of dZ
double R; // =radius = cabs(Z)
complex double dZ = 1.0; // derivative with respect to z
double complex dC = 0; // derivative with respect to c
// dn in A Cheritat notation
double de; // = 2 * z * log(cabs(z)) / dc = estimated distance to the Mandelbrot set
// iteration = computing the orbit
for(i=0;i<iMax;i++)
{
dZ = 2.0*dZ*Z;
dC = 2.0*dC*Z + 1.0;
Z=Z*Z+C; // https://en.wikibooks.org/wiki/Fractals/Iterations_in_the_complex_plane/qpolynomials
//
R = cabs(Z);
if(R > EscapeRadius) //
{ de = 2.0 * R * log(R) / cabs(dC) ; //
if (de < MinBoundaryWidth) { iBoundaryPixels +=1; return de/MinBoundaryWidth; }// boundary = exterior near boundary
else { iExteriorPixels +=1; return FP_ZERO;} // exterior far from boundary
} //
//
if(cabs(dZ) < eps) {iInteriorPixels +=1; return -1.0; }
} // for(i=0
// if (i == iMax)
iUnknownPixels +=1;
return FP_INFINITE;
}
int SetColor(unsigned char color[3], unsigned char r, unsigned char g, unsigned char b) {
// gradient
color[0]= r; /* Red*/
color[1]= g; /* Green */
color[2]= b; /* Blue */
return 0;
}
/*
input = complex number
output
- color array as Formal parameters
- int = return code
*/
int compute_color(complex double c, unsigned char color[3]){
double d ;
unsigned char b;
// compute
d = Give_D( c, IterationMax);
if (d >0) { b = (unsigned char )(255.0*d) % 255; SetColor(color, b, b, b); return 0;} // boundary = gray gadient
if (d == FP_ZERO) {SetColor(color, 255, 255, 255); return 0;} // exterior = white
if (d < 0.0) {SetColor(color, 255, 178, 0); return 0;} // interior = yelllow
if (d == FP_INFINITE) {SetColor(color, 255, 0, 0); return 0;} // unknown = red
return 0;
}
void setup(int example ){
printf(" render = compute and write image data bytes to the file \n");
printf("example %d \n", example);
SetPlaneFromCorners(example);
//SetPlaneFromCenterMag(example);
//
PixelWidth=(CxMax-CxMin)/iXmax;
PixelHeight=(CyMax-CyMin)/iYmax;
// DEM
MinBoundaryWidth = thickness*PixelWidth;
/*create new file,give it a name and open it in binary mode */
fp= fopen(filename,"wb"); /* b - binary mode */
/*write ASCII header to the file*/
fprintf(fp,"P6\n %s\n %d\n %d\n %d\n",comment,iXmax,iYmax,MaxColorComponentValue);
}
void info(){
double distortion;
// widt/height
double PixelsAspectRatio = (double)iXmax/iYmax; // https://en.wikipedia.org/wiki/Aspect_ratio_(image)
printf(" CxMin = %.16f Re(Center) = %.16f CxMax = %.16f \n", CxMin, creal(Center), CxMax);
printf(" CyMin = %.16f Im(Center) = %.16f CyMax = %.16f \n", CyMin, cimag(Center), CyMax);
printf("Magnification = %.16f = %e \n", Magnification, Magnification);
printf("Radius = %.16f = %e \n", Radius, Radius );
double WorldAspectRatio = (CxMax-CxMin)/(CyMax-CyMin);
printf("PixelsAspectRatio = %.16f \n", PixelsAspectRatio );
printf("WorldAspectRatio = %.16f \n", WorldAspectRatio );
distortion = PixelsAspectRatio - WorldAspectRatio;
printf("distortion = %.16f ( it should be zero !)\n", distortion );
printf("\n");
printf("bailut value = Escape Radius = %.0f \n", EscapeRadius);
printf("IterationMax = %d \n", IterationMax);
iAllPixels = iXmax*iYmax;
if (iAllPixels -(iExteriorPixels+iBoundaryPixels+iInteriorPixels+iUnknownPixels)==0) {
printf("iAllPixels = %d \n", iAllPixels);
printf("iBoundaryPixels = %d pixels = %f fraction of all pixels \n", iBoundaryPixels, (double)iBoundaryPixels/iAllPixels);
printf("iInteriorPixels = %d pixels = %f fraction of all pixels \n", iInteriorPixels, (double)iInteriorPixels/iAllPixels);
printf("iExteriorPixels = %d pixels = %f fraction of all pixels \n", iExteriorPixels, (double)iExteriorPixels/iAllPixels);
printf("iUnknownPixels = %d pixels = %f fraction of all pixels \n", iUnknownPixels, (double)iUnknownPixels/iAllPixels);
printf("density = %f = (iBoundaryPixels + iInteriorPixels)/iAllPixels \n", (double)(iBoundaryPixels+iInteriorPixels)/iAllPixels);
}
else printf("error in counting pixels");
// file
printf("file %s saved. \n", filename);
}
void close(){
fclose(fp);
info();
}
// ************************************* main *************************
int main()
{
complex double c;
setup(example);
for(iY=0;iY<iYmax;iY++)
for(iX=0;iX<iXmax;iX++)
{ // compute pixel coordinate
//c = C_fromCenterMag(iX, iY);
c = C_fromCorners(iX,iY);
/* compute pixel color (24 bit = 3 bytes) */
compute_color(c,color);
/*write color to the file*/
fwrite(color,1,3,fp);
}
close();
return 0;
}
text output
[edit]render = compute and write image data bytes to the file example 1 CxMin = -1.7473706000000000 Re(Center) = -1.7473703000000000 CxMax = -1.7473700000000001 CyMin = 0.0047332000000000 Im(Center) = 0.0047335000000000 CyMax = 0.0047338000000000 Magnification = 3333333.3333338545635343 = 3.333333e+06 Radius = 0.0000003000000000 = 3.000000e-07 PixelsAspectRatio = 1.0000000000000000 WorldAspectRatio = 0.9999999998438749 distortion = 0.0000000001561251 ( it should be zero !) bailut value = Escape Radius = 2000 IterationMax = 320000 iAllPixels = 64000000 iBoundaryPixels = 26800971 pixels = 0.418765 fraction of all pixels iInteriorPixels = 10130 pixels = 0.000158 fraction of all pixels iExteriorPixels = 37188395 pixels = 0.581069 fraction of all pixels iUnknownPixels = 504 pixels = 0.000008 fraction of all pixels density = 0.418923 = (iBoundaryPixels + iInteriorPixels)/iAllPixels file g8000_01.ppm saved. real 93m1.120s user 92m59.612s sys 0m0.440s
postprocessing
[edit]Convert, resizing ( downscalling) and gamma correction with Image Magic:
convert g8000_01.ppm -resize 2000x2000 -gamma 2.0 2020.png
File history
Click on a date/time to view the file as it appeared at that time.
Date/Time | Thumbnail | Dimensions | User | Comment | |
---|---|---|---|---|---|
current | 17:48, 2 October 2017 | 2,000 × 2,000 (5.99 MB) | Soul windsurfer (talk | contribs) | User created page with UploadWizard |
You cannot overwrite this file.
File usage on Commons
The following page uses this file:
Metadata
This file contains additional information such as Exif metadata which may have been added by the digital camera, scanner, or software program used to create or digitize it. If the file has been modified from its original state, some details such as the timestamp may not fully reflect those of the original file. The timestamp is only as accurate as the clock in the camera, and it may be completely wrong.
PNG file comment | |
---|---|
File change date and time | 17:36, 2 October 2017 |