Fractal de Barnsley

É o conjunto produzido por um sistema de funções interativos IFS. Neste caso o sistema tem quatro funções afins, que são contrações. O algoritmo para o esboço da figura é o Jogo Aleatório

In [1]:
from pylab import random_integers
from matplotlib import *

def IFS(n,x):
    ''' Define o sistema de quatro tranformacoes de R2, n um inteiro entre 1 e 4
 e x um vetor de R2 '''
    if (n==1):
        return [0.85*x[0] +0.04*x[1] , -0.04*x[0] + 0.85*x[1] +1.6]
    elif (n==2):
        return [-0.15*x[0]+0.28*x[1], 0.26*x[0] + 0.24*x[1] + 0.44]
    elif (n==3):
        return [0.20*x[0] -0.26*x[1], 0.23*x[0]+0.22*x[1] + 1.6]
    else:
        return [0,0.16*x[1]]
        
x0=[0,0]

a=[]
b=[]       
for j in range(200000) :
    x0=IFS(random_integers(1,4), x0)
    a.append(x0[0])
    b.append(x0[1])
  
plot(a,b,'.')
Out [1]:
[<matplotlib.lines.Line2D at 0x9a2142c>]

Jogo do triângulo

Neste segundo exemplo escolhemos três pontos A, B e C, formando um triângulo. Iniciamos com um ponto qualquer P, sorteamos um dos três pontos e marcamos o ponto no meio do segmento entre P e o ponto sorteado. Este será o novo P, e repetimos o experimento.

In [2]:
from pylab import random_integers
from matplotlib import *
#Escolhemos (ou fixamos) tres pontos
A=[-1,-1.]
B=[0,2] 
C=[2,0]

def Jogo(n,x):
    ''' Escolhe um ponto e anda ate a metade do caminho deste ponto'''
    if (n==1):
        return [0.5*x[0]+0.5*A[0], 0.5*x[1]+0.5*A[1]]
    elif (n==2):
        return [0.5*x[0] +0.5*B[0], 0.5*x[1] +0.5*B[1]]
    else:
        return [0.5*x[0] + 0.5*C[0], 0.5*x[1] + 0.5*C[1]]
P=[0,0]      
a=[0]
b=[0]
for j in range(20000):
    P = Jogo(random_integers(1,3),P)
    a.append(P[0])
    b.append(P[1])
plot(a,b,'.')
Out [2]:
[<matplotlib.lines.Line2D at 0xa34548c>]
Última atualização: sexta-feira, 7 set. 2012, 23:13