#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# V1_Mdlbrt.py
#
# Copyright 2017 renaud <renaud@renaud-VirtualBox>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
#
import Image
import math
def colormap(n):
#Frequence d'ocilation des couleur
frequency1=0.3
frequency2=0.3
frequency3=0.3
#dephage des couleur
phase1=0.0
phase2=2.0
phase3=4.0
#Centre de l'ocilation de la couleur
center=128.0
#Amplitude de l'ocilation
Width=127.0
R=int(math.sin(frequency1*n+phase1)*Width+center)
G=int(math.sin(frequency2*n+phase2)*Width+center)
B=int(math.sin(frequency3*n+phase3)*Width+center)
return (R,G,B)
def Mandelbrot(x,y,max_iter):
z_x=x
z_y=y
for nb_iter in range(max_iter+1):
z_tx=z_x
z_x=(z_x*z_x)-(z_y*z_y)+x
z_y=2*z_tx*z_y+y
if (z_x*z_x+z_y*z_y)>4:
break
return nb_iter
# Definition de la taille de l'image
# Je multiplit par 4 la taille pour eviter l'effet de pixelisation
size_Image_X=192*4
size_Image_y=108*4
# Definition de Xmax et Xmin
Xmin=-2.05
Xmax=0.5
# Definition de pasX, la distance entre deux pixel
pasX=(Xmax-Xmin)/size_Image_X
# Definition de Ymin
Ymin=-1.3
Ymax=Ymin+(pasX*size_Image_y)
# Definition de pasY, la distance entre deux pixel
pasY=(Ymax-Ymin)/size_Image_y
# Creation de l'image
img = Image.new( 'RGB', (size_Image_X,size_Image_y), "black") # create a new black image
pixels = img.load() # create the pixel map
for i in range(img.size[0]): # for every pixel:
for j in range(img.size[1]):
x=Xmin+i*pasX
y=Ymax-(j*pasY)
max_iter=500
nb_iter=Mandelbrot(x,y,max_iter)
if nb_iter>=max_iter:
pixels[i,j] = (0,0,0)
else:
pixels[i,j] = colormap(nb_iter) # set the colour accordingly
img.show()
img.save("toto.bmp")
img.save("toto.png")