%matplotlib inline
from pylab import random_integers
from matplotlib.pyplot import plot
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,'.')
[<matplotlib.lines.Line2D at 0xb05c27ec>]
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.
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,'.')
[<matplotlib.lines.Line2D at 0xb0be926c>]