Chaos_game

92 days ago by Sandor_Czirbusz

KÁOSZ - JÁTÉK

Három tetszőleges pontunk van a síkon, majd véletlenül kiválasztunk egyet. Ez lesz a kezdőpont, újra választunk egyet, felvesszük a 2 pont felezőpontját. Ez a felezőpont lesz az új kezdpontunk, folytatjuk az iterálást.

 

def chaos_game(P, N): L = [[] for i in range(0,N)] roll = randint(0,2) p1 = P[roll] L[0] = (p1[0], p1[1]) for i in range(1, N): roll = randint(0,2) p2 = P[roll] L[i] = ((p1[0] + p2[0])/2, (p1[1] + p2[1])/2) p1 =L[i] return L list_plot(chaos_game([[1, 0], [10, 0], [5, 10]], 10000)) 
       
 
       
 
       
 
       

ÁLTALÁNOS KÁOSZ-JÁTÉK

Adott egy

[p_1,p_2,\ldots,p_n]

 

eloszlás és n darab függvény, melyek definíciója:

 

 

f_{i}(x,y) = \left(\dfrac{a_{i} \cdot x + b_{i} \cdot y + c_{i} } {g_{i} \cdot x + h_{i} \cdot y + j_{i}}, \dfrac{d_{i} \cdot x + e_{i} \cdot y + k_{i}}{g_{i} \cdot x + h_{i} \cdot y + j_{i}+k_{i}} \right)\,.

Az iteráció működése:

(x_{i+1},y_{i+1} )= f_p(x_i,y_i)\,,

 

 

ahol a függvény kiválasztása az eloszlás alapján történik. (Barnsley: Superfractals)

 
       
def chaos_game_gen(X0, P, A, N): # X0: a kezdőpont # P: az adott eloszlás # A: a fenti képletben az együtthatók # N: az iterációk száma # L: az iterált pontlista L = [[] for i in range(0,N)] L[0] = (X0[0], X0[1]) X1 = [0,0] n = A.nrows() for j in range(1, N): PP = GeneralDiscreteDistribution(P) i = PP.get_random_element() X1[0] = (A[i,0]*X0[0] + A[i,1]*X0[1] + A[i,2])/(A[i,6]*X0[0] + A[i,7]*X0[1] + A[i,8]) X1[1] = (A[i,3]*X0[0] + A[i,4]*X0[1] + A[i,5])/(A[i,6]*X0[0] + A[i,7]*X0[1] + A[i,8]) L[j]= (X1[0],X1[1]) X0[0] = X1[0]; X0[1] = X1[1] return L 
       
A = matrix([[19.05, 0.72, 1.86, -0.15, 16.9, -0.28, 5.63, 2.01, 20.0],[0.2, 4.4, 7.5, -0.3, -4.4, -10.4, 0.2, 8.8, 15.4],[96.5, 35.2, 5.8, -131.4, -6.5, 19.1, 134.8, 30.7, 7.5],[-32.5, 5.81, -2.9, 122.9, -0.1, -19.9, -128.1, -24.3, -5.8]]);A 
       
[  19.0500000000000  0.720000000000000   1.86000000000000
-0.150000000000000   16.9000000000000 -0.280000000000000  
5.63000000000000   2.01000000000000   20.0000000000000]
[ 0.200000000000000   4.40000000000000   7.50000000000000
-0.300000000000000  -4.40000000000000  -10.4000000000000 
0.200000000000000   8.80000000000000   15.4000000000000]
[  96.5000000000000   35.2000000000000   5.80000000000000 
-131.400000000000  -6.50000000000000   19.1000000000000  
134.800000000000   30.7000000000000   7.50000000000000]
[ -32.5000000000000   5.81000000000000  -2.90000000000000  
122.900000000000 -0.100000000000000  -19.9000000000000 
-128.100000000000  -24.3000000000000  -5.80000000000000]
[  19.0500000000000  0.720000000000000   1.86000000000000 -0.150000000000000   16.9000000000000 -0.280000000000000   5.63000000000000   2.01000000000000   20.0000000000000]
[ 0.200000000000000   4.40000000000000   7.50000000000000 -0.300000000000000  -4.40000000000000  -10.4000000000000  0.200000000000000   8.80000000000000   15.4000000000000]
[  96.5000000000000   35.2000000000000   5.80000000000000  -131.400000000000  -6.50000000000000   19.1000000000000   134.800000000000   30.7000000000000   7.50000000000000]
[ -32.5000000000000   5.81000000000000  -2.90000000000000   122.900000000000 -0.100000000000000  -19.9000000000000  -128.100000000000  -24.3000000000000  -5.80000000000000]
P = [60/100, 1/100, 20/100, 19/100] 
       
X0 = [0,0] 
       
chaos_game_gen(X0, P, A, 10) 
       
[(0.675236931740635, -0.701109882609865), (0.634969643209519,
-0.546170494998638), (0.361589374715681, -0.787792380150233),
(0.400007474783523, -0.667305843824525), (0.484435609272442,
-0.718367264160459), (0.537193275756186, -0.785950507982827),
(0.537553851032242, -0.636202990094788), (0.535337347449563,
-0.510972836745078), (0.531692930280069, -0.409141081893444),
(0.527452002596786, -0.328096130878184)]
[(0.675236931740635, -0.701109882609865), (0.634969643209519, -0.546170494998638), (0.361589374715681, -0.787792380150233), (0.400007474783523, -0.667305843824525), (0.484435609272442, -0.718367264160459), (0.537193275756186, -0.785950507982827), (0.537553851032242, -0.636202990094788), (0.535337347449563, -0.510972836745078), (0.531692930280069, -0.409141081893444), (0.527452002596786, -0.328096130878184)]
list_plot(chaos_game_gen(X0, P, A, 10000),size=2,alpha='1') 
       
X0[0] = X1[0]; X0[1] = X1[1]; X0 
       
[0.500000000000000, 3.43103448275862]
[0.500000000000000, 3.43103448275862]
 
       
 
       
def n5(x): return x.n(digits=5) def nt((x,y)): return (n5(x),n5(y)) def CGR(DNA, N): a = (-1/2,-1/2); c = (-1/2,1/2); g = (1/2,1/2); t = (1/2,-1/2); origo = (0,0) L = [] for i in xrange(0, N): for x in DNA: if x == 'a': T = ((origo[0] + a[0])/2, (origo[1]+a[1])/2) L.append((T[0], T[1])) origo = (T[0],T[1]) elif x == 'c': T = ((origo[0] + c[0])/2, (origo[1]+c[1])/2) L.append((T[0], T[1])) origo = (T[0],T[1]) elif x == 'g': T = ((origo[0] + g[0])/2, (origo[1]+g[1])/2) L.append((T[0], T[1])) origo = (T[0],T[1]) else: T = ((origo[0] + t[0])/2, (origo[1]+t[1])/2) L.append((T[0], T[1])) origo = (T[0],T[1]) return map(nt,L) 
       
L = CGR(['g','a','a','t','t','c'],3); L 
       
[(0.25000, 0.25000), (-0.12500, -0.12500), (-0.31250, -0.31250),
(0.093750, -0.40625), (0.29688, -0.45312), (-0.10156, 0.023438),
(0.19922, 0.26172), (-0.15039, -0.11914), (-0.32520, -0.30957),
(0.087402, -0.40479), (0.29370, -0.45239), (-0.10315, 0.023804),
(0.19843, 0.26190), (-0.15079, -0.11905), (-0.32539, -0.30952),
(0.087303, -0.40476), (0.29365, -0.45238), (-0.10317, 0.023809)]
[(0.25000, 0.25000), (-0.12500, -0.12500), (-0.31250, -0.31250), (0.093750, -0.40625), (0.29688, -0.45312), (-0.10156, 0.023438), (0.19922, 0.26172), (-0.15039, -0.11914), (-0.32520, -0.30957), (0.087402, -0.40479), (0.29370, -0.45239), (-0.10315, 0.023804), (0.19843, 0.26190), (-0.15079, -0.11905), (-0.32539, -0.30952), (0.087303, -0.40476), (0.29365, -0.45238), (-0.10317, 0.023809)]
map(nt,L) 
       
[(0.25000, 0.25000), (-0.12500, -0.12500), (-0.31250, -0.31250),
(0.093750, -0.40625), (0.29688, -0.45312), (-0.10156, 0.023438),
(0.19922, 0.26172), (-0.15039, -0.11914), (-0.32520, -0.30957),
(0.087402, -0.40479), (0.29370, -0.45239), (-0.10315, 0.023804),
(0.19843, 0.26190), (-0.15079, -0.11905), (-0.32539, -0.30952),
(0.087303, -0.40476), (0.29365, -0.45238), (-0.10317, 0.023809)]
[(0.25000, 0.25000), (-0.12500, -0.12500), (-0.31250, -0.31250), (0.093750, -0.40625), (0.29688, -0.45312), (-0.10156, 0.023438), (0.19922, 0.26172), (-0.15039, -0.11914), (-0.32520, -0.30957), (0.087402, -0.40479), (0.29370, -0.45239), (-0.10315, 0.023804), (0.19843, 0.26190), (-0.15079, -0.11905), (-0.32539, -0.30952), (0.087303, -0.40476), (0.29365, -0.45238), (-0.10317, 0.023809)]
list_plot(CGR(['g','a','a','t','t','c'],2),size=2) 
       
list_plot(CGR(['g','a','a','t','t','c'],3)) 
       
list_plot(CGR(['g','a','a','a','c','t'],100),size=2) 
       

EGY MÁSIK KÁOSZ-JÁTÉK

A kiindulás az eredeti Káosz-játék,  kibővítve még két szabállyal:

ha A, B, C az eredeti három pont, akkor még a távolság felezése mellett lehet az aktuális pontot:

- eltolni 2*(B -C) -- vel

- elforgatni 180°-al a

\dfrac{A+5B-4C}{2}

pont körül