teste
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]:
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]:
Ultime modifiche: venerdì, 7 settembre 2012, 23:13