Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Fraktálok és csempézések
Szécsi László
2
Fraktálok Hausdorff dimenzió D= (logN) / (log 1/r) N= 1/rD
3
Koch görbe D= (log4) / (log 3) = 1.26 N = 4, r = 1/3
4
Nem önhasonló objektumok dimenziója
Vonalzó ( l ) db l 1 r =1/3 N = 4 r2 N2 rm Nm Hossz( l ) = l db = l Nm = l (1/r D) m = = l (1/r m) D = 1/ l D -1 D = - log Hossz( l ) / log l + 1
5
Dimenziómérés = hosszmérés
log Hossz( l ) D-1 log l
6
Fraktálok előállítása
Matematikai gépek: Brown mozgás Kaotikus dinamikus rendszerek
7
Brown mozgás - Wiener féle sztochasztikus folyamat
Sztochasztikus folyamat (véletlen függvény) Trajektóriák folytonosak Független növekményű folyamat Növekmények 0 várható értékű normális eloszlás: a független növekményűségből, a szórás az intervallum hosszával arányos
8
Brown mozgás alkalmazása
9
Terep generálás 1.5D + random() + H random() + H2 random()
H ≠ ½ → más fraktális dimenziójú görbe
10
Terep generálás 2.5D középpont elmozdítás ötlete marad
diamond-square módszer átlók metszépontjában csúcsok átlaga + random ugyanez tovább H × random-mal rombusz közepére csúcsok átlaga + random
11
Terep generálás iterációk
12
Terep generálás a GPUn véletlenszámok zajtextúrában
magasságmező-textúra a render target for(int i=0; i<n; i++) full screen quad rajzolás pixel shaderben freki skálázás: tex *= 2i zaj textúra olvasása: height = tex2d(noise, tex) amplitúdó skálázás: height *= Hi
13
Kaotikus dinamikus rendszer: nyulak kis C értékre
S n+1= C Sn (1-Sn)
14
Kaotikus dinamikus rendszer: nyulak közepes C értékre
15
Kaotikus dinamikus rendszer: nyulak nagy C értékre
16
Kaotikus rendszerek a síkon
F z = x + jy
17
z z2 z = r e i r r 2 2 divergens konvergens 1
Attraktor: H = F(H)
18
Attraktor előállítása
Attraktor a labilis és a stabilis tartomány határa: kitöltött attraktor = amely nem divergens z n+1 = z n2 : ha z < akkor fekete Attraktorhoz konvergálunk, ha az stabil z n+1 = z n2 attraktora labilis
19
Inverz iterációs módszer
H = F(H) H = F-1 (H) z n+1 = z n2 z n+1 = z n r n+1 = r n n+1 = n/2 + {0,1}· r n 1 n {0,1}.{0,1}{0,1}... · 1 n n n-2 Nem lehet csak egy értékkel dolgozni ???
20
Julia halmaz: z z2 + c
21
Kitöltött Julia halmaz: algoritmus
Im z (X,Y) FilledJuliaDraw ( ) FOR Y = 0 TO Ymax DO FOR X = 0 TO Xmax DO ViewportWindow(X,Y x, y) z = x + j y FOR i = 0 TO n DO z = z2 + c IF |z| > “infinity” THEN WRITE(X,Y, white) ELSE WRITE(X,Y, black) ENDFOR END Re z
22
Kitöltött Julia halmaz: kép
23
Julia shader float2 juliac = float2(-0.65, 0.5);
float4 psJuliaFill(vsQuadOutput input) : COLOR0 { float2 c = juliac; float2 z = input.worldPos.xy; bool divergent = false; for(int i=0; i<30; i++) { float2 z2 = float2(z.x * z.x - z.y * z.y, 2 * z.x * z.y) + c; z = z2; if(length(z) > 100.0) { divergent = true; break; } return divergent; };
24
Julia shader
25
Távolság becslés színezés a pont halmaztól vett távolsága alapján
zo pont távolsága a Julia halmaztól |G|/|G'| G(zo) = lim k→∞ log|zk|/nk |G'(zo)| = lim k→∞ |dzk/dzo| / (nk|zk|) . a dzk/dzo is iteratívan számolható dzk/dzo = 2kzk zo
26
Julia shader DE float2 juliac = float2(-0.65, 0.5);
float4 psJuliaDistanceEstimator(vsQuadOutput input) : COLOR0 { float2 c = juliac; float2 z = input.worldPos.xy; float2 dz = float2(1, 0); while(length(dz) > 0.01) { float2 z2 = float2(z.x * z.x - z.y * z.y, 2 * z.x * z.y) + c; dz = 2 * float2(z.x * dz.x - z.y * dz.y, z.x * dz.y + dz.x * z.y); z = z2; if(length(z) > 100.0) break; } return pow(log(dot(z, z)) * length(z) / length(dz), 0.2); };
27
Julia shader DE
28
Julia 3D komplex → kvaternió
29
Sphere tracing
30
Julia halmaz nem összefüggő, Cantor féle halmaz összefüggő
31
Julia halmaz összefüggősége
H-c c H-c H c z n+1 = z n-c
32
Mandelbrot halmaz Azon c komplex számok, amelyekre a
z z2 + c Julia halmaza összefüggő
33
Mandelbrot halmaz, algoritmus
MandelbrotDraw ( ) FOR Y = 0 TO Ymax DO FOR X = 0 TO Xmax DO ViewportWindow(X,Y x, y) c = x + j y z = 0 FOR i = 0 TO n DO z = z2 + c IF |z| > “infinity” THEN WRITE(X,Y, white) ELSE WRITE(X,Y, black) ENDFOR END
34
Mandelbrot shader float4 psMandelbrotFill(vsQuadOutput input) : COLOR0 { float2 c = input.worldPos.xy; float2 z = c; bool divergent = false; for(int i=0; i<30; i++) { float2 z2 = float2(z.x * z.x - z.y * z.y, 2 * z.x * z.y) + c; z = z2; if(length(z) > 100.0) { divergent = true; break; } return divergent; };
35
Mandelbrot
36
Mandelbrot shader DE float4 psMandelbrotDE(vsQuadOutput input) : COLOR0 { float2 c = input.worldPos.xy; float2 z = c; float2 dz = 0; while(length(z) < 8.0) { float2 z2 = float2(z.x * z.x - z.y * z.y, 2 * z.x * z.y) + c; dz = 2 * float2(z.x * dz.x - z.y * dz.y, z.x * dz.y + dz.x * z.y) + float2(1, 0); z = z2; if(length(z) > 100.0) break; } return pow(log(dot(z, z)) * length(z) / length(dz), 0.1); };
37
Mandelbrot shader DE
38
Inverz feladat: IFS modellezés
x, y H F Attraktor: H = F(H) F: szabadon vezérelhető, legyen stabilis attraktora
39
F: többértékű lineáris leképzés
F = W1 W2 … Wn W(x,y) = [ax + by + c, dx + ey + f] H = W1(H) W2 (H) … Wn (H) Stabilitás = kontrakció H = F(H)
40
Egyszerű IFS-ek
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.