Fraktale i atraktory IFS
Strona [ 1 ] z 1
| winerfresh |
10-03-2010 17:26 |
|
Użytkownik Status: Offline Dołączył: 29-12-2007 Skąd: Schengen |
Chodzi mi głównie o to jak to jest z tymi przekształceniami, bo na wiki jest to dość zawile wytłumaczone, niestety. Próbuję ogarnąć Smoka z Parku Jurajskiego, ale krucho mi idzie ![]() Jeśli chcesz programować przeczytaj DRY&KISS Bust Lib |
|
|
| bo |
10-03-2010 18:14 |
|
|
Mógłbyś sprecyzować czego nie rozumiesz? - co to są przekształcenia afiniczne? - jak wygląda algorytm rysowania? - skąd u diabła na rysunku smoka są kolory, skoro smok jest zbiorem, a punkt do zbioru albo należy albo nie? .... Pytam, bo pełne wyjaśnienie byłoby długie. |
|
|
| winerfresh |
10-03-2010 19:47 |
|
Użytkownik Status: Offline Dołączył: 29-12-2007 Skąd: Schengen |
- co to są przekształcenia afiniczne? - jak wygląda algorytm rysowania? Kolory to nie jest problem do późniejszego zrozumienia. Jeśli chcesz programować przeczytaj DRY&KISS Bust Lib |
|
|
| RFabianski |
10-03-2010 20:22 |
|
Użytkownik Status: Offline Dołączył: 12-05-2009 Skąd: Układ Słoneczny, Droga Mleczna |
//nie wiem co to jest ale ładnie wygląda For a:=0 to Bmp.Width-1 do For s:=0 to Bmp.Height-1 do begin x:=a*(Right-Left)/(Bmp.Width-1)+Left; y:=s*(Bottom-Top)/(Bmp.Height-1)+Top; n:=0; while (n<=50) and (sqr(x)+sqr(y)<10) do begin inc(n); temp:=x; x:=sqr(x)-sqr(y); y:=2*temp*y-1; end; Bmp.pixels[a,s]:=n*$50505; end; //Mandelbrot For a:=0 to Bmp.Width-1 do For s:=0 to Bmp.Height-1 do begin x:=a*(Right-Left)/(Bmp.Width-1)+Left; y:=s*(Bottom-Top)/(Bmp.Height-1)+Top; re:=0; im:=0; n:=0; while (n<=50) and (sqr(re)+sqr(im)<10) do begin inc(n); temp:=re; re:=sqr(re)-sqr(im)+x; im:=2*temp*im+y; end; Bmp.pixels[a,s]:=n*$50505; end; da da da daaa Ostatnio zmodyfikowany: 10-03-2010 20:31 przez RFabianski |
|
|
| winerfresh |
10-03-2010 20:31 |
|
Użytkownik Status: Offline Dołączył: 29-12-2007 Skąd: Schengen |
RFabianski napisał: //nie wiem co to jest ale ładnie wygląda For a:=0 to Bmp.Width-1 do For s:=0 to Bmp.Height-1 do begin x:=a*(Right-Left)/(Bmp.Width-1)+Left; y:=s*(Bottom-Top)/(Bmp.Height-1)+Top; n:=0; while (n<=50) and (sqr(x)+sqr(y)<10) do begin inc(n); temp:=x; x:=sqr(x)-sqr(y); y:=2*temp*y-1; end; Bmp.pixels[a,s]:=n*$50505; end; //Mandelbrot For a:=0 to Bmp.Width-1 do For s:=0 to Bmp.Height-1 do begin x:=a*(Right-Left)/(Bmp.Width-1)+Left; y:=s*(Bottom-Top)/(Bmp.Height-1)+Top; re:=0; im:=0; n:=0; while (n<=50) and (sqr(x)+sqr(y)<10) do begin inc(n); temp:=re; re:=sqr(re)-sqr(im)+x; im:=2*temp*im-y; end; Bmp.pixels[a,s]:=n*$50505; end; Osobiście preferuję C++, ale komentarze by się i tak przydały, bo rozumiem część, ale nie wszystko. Jeśli chcesz programować przeczytaj DRY&KISS Bust Lib |
|
|
| bo |
10-03-2010 20:38 |
|
|
Przekształcenie afiniczne płaszczyzny wyraża się wzorem f(x,y) = (ax+by,cx+dy). Często krótszy jest zapis korzystający z liczb zespolonych, np. pierwsze odwzorowanie z definicji smoka Heighwaya w postaci zespolonej wygląda tak f(z) = 1/2*(1+i)*z, ponieważ z=x+iy, to bez użycia liczb zespolonych wzór wygląda tak f(x,y) = 1/2*(1+i)*(x+iy) = ... =1/2*(x-y,x+y). Wydajny jest algorytm probabilistyczny: wybierasz prawdopodobieństwa, tzn. liczby p1, ... , pn większe od zera i takie, że p1 + ... + pn = 1. (n oznacza ilość użytych przekształceń afinicznych, dla smoka n = 2). Wybierasz w zasadzie dowolnie punkt P0, losujesz (zgodnie z wybranymi prawdopodobieństwami) jedno z przekształceń afinicznych (dla smoka jedno z dwóch), jeżeli f oznacza wylosowane przekształcenie, to kolejny punkt fraktala P1 = f(Po), znowu losujesz, P2 = f(P1), .... Pewna ilość początkowych wyrazów utworzonego ciągu może nie należeć do fraktala. Można tego uniknąć jeżeli punkt startowy P0 wybierzemy tak by spełniał warunek fk(P0) = P0, (fk to jedno z odwzorowań tworzących IFS). |
|
|
| bo |
11-03-2010 10:29 |
|
|
f(x,y) = (ax+by+e,cx+dy+f)
|
|
|
| bo |
11-03-2010 15:19 |
|
|
Przykłady fraktali opisane przez RFabianskiego, to nie są atraktory IFS. One podpadają pod taki schemat: dla każdego punktu P0 płaszczyzny definiujemy rekurencyjnie pewien ciąg. Punkt P0 należy do fraktala <==> otrzymany ciąg jest ograniczony. Dla zbioru Mandelbrota ciąg jest zdefiniowany tak: Pn+1 = Pn2 + P0 dla n>=0 W praktyce możemy wyliczyć tylko skończoną ilość wyrazów ciągu, podejmowanie decyzji o ograniczoności całego ciągu na podstawie skończonej ilości wyrazów jest trochę niebezpieczne. Np. dla zbioru Mandelbrota łatwo pokazać, że jeżeli pewien punkt Pn leży poza kołem o promieniu 2, to ciąg jest nieograniczony, nożna też pokazać, że jeżeli P0 jest postaci 1/2+epsilon + 0i (epsilon>0), to ciąg jest nieograniczony. Jeżeli epsilon = 0,0000000000000001, to dopiero wyraz o numerze 302 015 641 wychodzi poza koło o promieniu 2. Łatwo zatem o błędną decyzję, że ciąg jest ograniczony. |
|
|
| winerfresh |
11-03-2010 16:17 |
|
Użytkownik Status: Offline Dołączył: 29-12-2007 Skąd: Schengen |
Zdaje mi się, że już coś nie co rozumiem... Jak by co to się jeszcze odezwę...Jeśli chcesz programować przeczytaj DRY&KISS Bust Lib |
|
|
| winerfresh |
23-03-2010 18:08 |
|
Użytkownik Status: Offline Dołączył: 29-12-2007 Skąd: Schengen |
I moje pytanie, rysujemy punkt (x,y) czy jak?? Jeśli chcesz programować przeczytaj DRY&KISS Bust Lib |
|
|
|
|
|
Strona [ 1 ] z 1
| 1 użytkownik(ów) przegląda ten temat (1 gości) |
|---|
| (żadnych zarejestrowanych użytkowników) |












f(x,y) = (ax+by+e,cx+dy+f)
Jak by co to się jeszcze odezwę...