Leniwce.com | blog technologiczny
Atraktor Lorenza
Bartosz Lewandowski, 2011-08-29 21:36:30
kategoria: C#, Inne

Nie będę ukrywać, że Kuby wpis bardzo mnie zaintrygował. Na tyle, że postanowiłem przedstawiony problem zwizualizować w C#. Nie korzystałem z OpenGLa, nie korzystałem z DirectX. Postanowiłem przygotować zwykłą aplikację Win32, która maluje układ Lorenza na kontrolce PictureBox.

Do wizualizacji wykorzystałem 20 000 punktów. Efekt przedstawia poniższy film, który zamieściłem na Youtube:

 

Sam układ Lorenza opisany jest wzorem:

zastosowałem "standardowe" parametry (standardowe = z Wikipedii :) ):

r=28,σ = 10,b = 8/3

które można łatwo zmienić modyfikując kod programu w metodzie countConstants(). Metoda oblicza punkty trajektorii układu oraz kilka pomocnicznych zmiennych do przekształceń grafiki 3D. Poniżej fragment odpowiedzialny za atraktor:

double a, r, b, d;
a = 10; //sigma
r = 28;
b = 8/3;
d = 0.005;
 
double xp, yp, zp;
//pętla obliczająca trajektorię układu
for (int i = 0; i < 20000; i++)
{
  xp = lastPoint3d.x;
  yp = lastPoint3d.y;
  zp = lastPoint3d.z;
  lastPoint3d.x = xp + d * a * (yp - xp);
  lastPoint3d.y = yp + d * (xp * (r - zp) - yp);
  lastPoint3d.z = zp + d * (xp * yp - b * zp);
  Points3d.Add(new Point3D(lastPoint3d.x,lastPoint3d.y,lastPoint3d.z));
}

W powyższej metodzie można również zmieniać ilość iteracji oraz krok (zmienna d). Jako, że aplikacja nie korzysta ze sprzętowej akceleracji (swego czasu opisywałem zabawę z OpenGL w C#) animacja nie jest zbyt wydajna.
Przy słabszych komputerach warto zmniejszyć łączną ilość punktów, w tym celu wystarczy zmienić wartość końcową pętli i.

Kuba, dzięki za inspirację :)

Oczywiście jak zawsze projekt (VS 2008) do pobrania wraz plikiem exe (44KB).

Powiązane artykuły
O związku motyli z pogodą... (2011-08-26)
Równoległy może więcej(?) - czyli kilka słów o Parallel.For (2011-02-06)
Święta, święta - czas pochwalić się (fraktalną) choinką (2010-12-25)
Własny wygaszacz ekranu (2010-06-03)
3.1415926535897932385... (2010-05-19)
Metody rozszerzające (2010-05-07)
GPS w lekkostrawnym sosie podany (2009-08-05)
Wszechświat na ekranie, czyli słowo o skalowaniu (2009-07-15)
OleDbConnection – Excel jako baza danych(C#) (2009-07-13)
Animacje 3D (OpenGL) (2009-07-05)


Komentarze
Brak komentarzy.

Dodaj komentarz:
Autor:*

WWW:

Treść:*

Wprowadź kod zabezpieczający*:


        * - pola wymagane
Kategorie
C# (13)
Inne (6)
Java (3)
Matlab (1)
OpenGL (1)
PHP (2)


Najnowsze wpisy

Ostatnie komentarze