Fraktale i atraktory IFS

szukaj na forum nowy temat odpowiedz

Strona [ 1 ] z 1

winerfresh ten post 10-03-2010 17:26
avatar

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
Przejdź na górę strony
cytuj
bo ten post 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.
Przejdź na górę strony
cytuj
winerfresh ten post 10-03-2010 19:47
avatar

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
Przejdź na górę strony
cytuj
RFabianski ten post 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
Przejdź na górę strony
cytuj
winerfresh ten post 10-03-2010 20:31
avatar

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
Przejdź na górę strony
cytuj
bo ten post 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).
Przejdź na górę strony
cytuj
bo ten post 11-03-2010 10:29





[glowa] f(x,y) = (ax+by+e,cx+dy+f)
Przejdź na górę strony
cytuj
bo ten post 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.
Przejdź na górę strony
cytuj
winerfresh ten post 11-03-2010 16:17
avatar

Użytkownik
Status: Offline
Dołączył: 29-12-2007
Skąd: Schengen
Zdaje mi się, że już coś nie co rozumiem... :P Jak by co to się jeszcze odezwę...
Jeśli chcesz programować przeczytaj DRY&KISS
Bust Lib
Przejdź na górę strony
cytuj
winerfresh ten post 23-03-2010 18:08
avatar

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
Przejdź na górę strony
cytuj
szukaj na forum nowy temat odpowiedz

Strona [ 1 ] z 1

1 użytkownik(ów) przegląda ten temat (1 gości)
(żadnych zarejestrowanych użytkowników)

Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 0.0884 sek. (zapytań SQL: 9)