Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Konfiguracja środowiska

W e‑materiale Modelowanie ruchów BrownaP14JSHgfzModelowanie ruchów Browna przeprowadziliśmy proste modelowanie, w którym zakładaliśmy, że w każdej jednostce czasu cząsteczka przemieszcza się o określoną z góry odległość. W ramach przypomnienia zrealizujmy identyczny algorytm w środowisku Qt.

W tej sekcji wykorzystamy projekt omówiony w e‑materiale Konstrukcje fraktalne w języku C++Pvq5X39MFKonstrukcje fraktalne w języku C++.

Potrzebne nam będzie prawidłowo skonfigurowane środowisko Qt oraz przykładowy projekt, który utworzyliśmy. Wykorzystamy również stworzony specjalnie na potrzeby e‑materiału szablon, którego zadaniem będzie rysowanie trasy cząstki na podstawie dostarczonych mu punktów.

Zacznijmy zatem od wprowadzenia odpowiednich zmian do projektu.

W pliku mainwindow.h należy umieścić następujący kod:

Linia 1. kratka ifndef MAINWINDOW podkreślnik H. Linia 2. kratka define MAINWINDOW podkreślnik H. Linia 4. kratka include otwórz nawias ostrokątny QMainWindow zamknij nawias ostrokątny. Linia 5. kratka include otwórz nawias ostrokątny list zamknij nawias ostrokątny. Linia 7. using namespace std średnik. Linia 9. QT podkreślnik BEGIN podkreślnik NAMESPACE. Linia 10. namespace Ui otwórz nawias klamrowy class MainWindow średnik zamknij nawias klamrowy. Linia 11. QT podkreślnik END podkreślnik NAMESPACE. Linia 13. class MainWindow dwukropek public QMainWindow otwórz nawias klamrowy. Linia 14. Q podkreślnik OBJECT. Linia 16. public dwukropek. Linia 17. MainWindow otwórz nawias okrągły QWidget asterysk parent znak równości nullptr zamknij nawias okrągły średnik. Linia 18. tylda MainWindow otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 20. virtual void paintEvent otwórz nawias okrągły QPaintEvent asterysk event zamknij nawias okrągły override średnik. Linia 22. void addPoint otwórz nawias okrągły double x przecinek double y zamknij nawias okrągły średnik. Linia 23. void wait otwórz nawias okrągły double time zamknij nawias okrągły średnik. Linia 25. static const int PARTICLE podkreślnik SIZE znak równości 10 średnik. Linia 27. private dwukropek. Linia 28. Ui dwukropek dwukropek MainWindow asterysk ui średnik. Linia 29. list otwórz nawias ostrokątny QPoint zamknij nawias ostrokątny points średnik. Linia 30. zamknij nawias klamrowy średnik. Linia 31. kratka endif prawy ukośnik prawy ukośnik MAINWINDOW podkreślnik H.

Analogicznie w pliku mainwindow.cpp wprowadzamy zmiany w kodzie:

Linia 1. kratka include cudzysłów mainwindow kropka h cudzysłów. Linia 2. kratka include cudzysłów ui podkreślnik mainwindow kropka h cudzysłów. Linia 3. kratka include cudzysłów qpainter kropka h cudzysłów. Linia 4. kratka include otwórz nawias ostrokątny QTime zamknij nawias ostrokątny. Linia 6. using namespace std średnik. Linia 8. MainWindow dwukropek dwukropek MainWindow otwórz nawias okrągły QWidget asterysk parent zamknij nawias okrągły. Linia 9. dwukropek QMainWindow otwórz nawias okrągły parent zamknij nawias okrągły. Linia 10. przecinek ui otwórz nawias okrągły new Ui dwukropek dwukropek MainWindow zamknij nawias okrągły. Linia 11. otwórz nawias klamrowy. Linia 12. ui minus zamknij nawias ostrokątny setupUi otwórz nawias okrągły this zamknij nawias okrągły średnik. Linia 13. this minus zamknij nawias ostrokątny setFixedSize otwórz nawias okrągły 600 przecinek 600 zamknij nawias okrągły średnik. Linia 14. this minus zamknij nawias ostrokątny setWindowTitle otwórz nawias okrągły cudzysłów Symulacja ruchów Browna cudzysłów zamknij nawias okrągły średnik. Linia 15. zamknij nawias klamrowy. Linia 17. MainWindow dwukropek dwukropek tylda MainWindow otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 18. delete ui średnik. Linia 19. zamknij nawias klamrowy. Linia 21. void MainWindow dwukropek dwukropek addPoint otwórz nawias okrągły double x przecinek double y zamknij nawias okrągły otwórz nawias klamrowy. Linia 22. int new podkreślnik x znak równości x asterysk 50 kropka 0 plus size otwórz nawias okrągły zamknij nawias okrągły kropka width otwórz nawias okrągły zamknij nawias okrągły prawy ukośnik 2 średnik. Linia 23. int new podkreślnik y znak równości size otwórz nawias okrągły zamknij nawias okrągły kropka height otwórz nawias okrągły zamknij nawias okrągły prawy ukośnik 2 minus y asterysk 50 kropka 0 średnik. Linia 25. points kropka push podkreślnik back otwórz nawias okrągły QPoint otwórz nawias okrągły new podkreślnik x przecinek new podkreślnik y zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 26. repaint otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 27. zamknij nawias klamrowy. Linia 29. void MainWindow dwukropek dwukropek wait otwórz nawias okrągły double time zamknij nawias okrągły otwórz nawias klamrowy. Linia 30. QTime dieTime znak równości QTime dwukropek dwukropek currentTime otwórz nawias okrągły zamknij nawias okrągły kropka addMSecs otwórz nawias okrągły time asterysk 1000 kropka 0 zamknij nawias okrągły średnik. Linia 31. while otwórz nawias okrągły QTime dwukropek dwukropek currentTime otwórz nawias okrągły zamknij nawias okrągły otwórz nawias ostrokątny dieTime zamknij nawias okrągły. Linia 32. QCoreApplication dwukropek dwukropek processEvents otwórz nawias okrągły QEventLoop dwukropek dwukropek AllEvents przecinek 100 zamknij nawias okrągły średnik. Linia 33. zamknij nawias klamrowy. Linia 35. void MainWindow dwukropek dwukropek paintEvent otwórz nawias okrągły QPaintEvent asterysk event zamknij nawias okrągły otwórz nawias klamrowy. Linia 36. QPainter painter otwórz nawias okrągły this zamknij nawias okrągły średnik. Linia 38. auto last znak równości points kropka begin otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 39. for otwórz nawias okrągły auto it znak równości points kropka begin otwórz nawias okrągły zamknij nawias okrągły średnik it wykrzyknik znak równości points kropka end otwórz nawias okrągły zamknij nawias okrągły średnik plus plus it zamknij nawias okrągły otwórz nawias klamrowy. Linia 40. if otwórz nawias okrągły it wykrzyknik znak równości points kropka begin otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 41. painter kropka drawLine otwórz nawias okrągły asterysk it przecinek asterysk last zamknij nawias okrągły średnik. Linia 42. last znak równości it średnik. Linia 43. zamknij nawias klamrowy. Linia 44. zamknij nawias klamrowy. Linia 46. if otwórz nawias okrągły wykrzyknik points kropka empty otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 47. painter kropka setBrush otwórz nawias okrągły Qt dwukropek dwukropek red zamknij nawias okrągły średnik. Linia 48. painter kropka drawEllipse otwórz nawias okrągły last minus zamknij nawias ostrokątny x otwórz nawias okrągły zamknij nawias okrągły minus PARTICLE podkreślnik SIZE prawy ukośnik 2 przecinek last minus zamknij nawias ostrokątny y otwórz nawias okrągły zamknij nawias okrągły minus PARTICLE podkreślnik SIZE prawy ukośnik 2 przecinek PARTICLE podkreślnik SIZE przecinek PARTICLE podkreślnik SIZE zamknij nawias okrągły średnik. Linia 49. zamknij nawias klamrowy. Linia 50. zamknij nawias klamrowy. Linia 52. void MainWindow dwukropek dwukropek closeEvent otwórz nawias okrągły QCloseEvent asterysk event zamknij nawias okrągły otwórz nawias klamrowy. Linia 53. exit otwórz nawias okrągły 0 zamknij nawias okrągły średnik. Linia 54. zamknij nawias klamrowy.

Z kolei plik main.cpp zmieniamy na:

Linia 1. kratka include cudzysłów mainwindow kropka h cudzysłów. Linia 3. kratka include otwórz nawias ostrokątny QApplication zamknij nawias ostrokątny. Linia 4. kratka include otwórz nawias ostrokątny cstdlib zamknij nawias ostrokątny. Linia 5. kratka include otwórz nawias ostrokątny cmath zamknij nawias ostrokątny. Linia 6. kratka include otwórz nawias ostrokątny random zamknij nawias ostrokątny. Linia 8. using namespace std średnik. Linia 10. int main otwórz nawias okrągły int argc przecinek char asterysk argv otwórz nawias kwadratowy zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy. Linia 11. prawy ukośnik prawy ukośnik Początek kodu minus utworzenie okna do rysowania. Linia 12. QApplication a otwórz nawias okrągły argc przecinek argv zamknij nawias okrągły średnik. Linia 13. MainWindow w średnik. Linia 14. w kropka show otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 16. prawy ukośnik asterysk początek właściwej części kodu asterysk prawy ukośnik. Linia 18. prawy ukośnik asterysk koniec właściwej części kodu asterysk prawy ukośnik. Linia 20. prawy ukośnik prawy ukośnik Koniec programu minus wyświetlenie wyniku. Linia 21. return a kropka exec otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 22. zamknij nawias klamrowy.

W szablonie dla klasy MainWindow dostępne są dwie interesujące nas metody: addPoint(double x, double y) oraz wait(double time). Pierwsza pozwala na dodanie punktu do trasy, którą renderujerenderowanierenderuje program. Druga natomiast powoduje odczekanie przez program określonego w parametrze time czasu w sekundach. Ponieważ na początku programu w szablonie utworzony jest obiekt klasy MainWindow o nazwie w, przykładowe wywołanie metod może wyglądać następująco:

Linia 1. w kropka addPoint otwórz nawias okrągły x przecinek y zamknij nawias okrągły średnik. Linia 2. w kropka wait otwórz nawias okrągły dt zamknij nawias okrągły średnik.

Takie działanie spowoduje dodanie punktu o współrzędnych x, y do tworzonej przez program trasy oraz sprawi, że będzie potrzebny czas oczekiwania na reakcję, zawarty w zmiennej dt.

Symulacja procesu Wienera w środowisku graficznym

Jak wiemy, proces Wienera jest procesem losowym z czasem ciągłym. Możemy określać jego stan po pewnym interwaleinterwałinterwale czasowym. Uproszczona definicja wygląda następująco:

W0=0
Wt+dt=Wt+kN0, dt

- gdzie Nμ,σ2 jest zmienną losową, zgodną z rozkładem normalnym Gaussa z parametrami wartość oczekiwana μ oraz odchylenie standardowe σ. Przy czym k jest współczynnikiem długości wykonywanych kroków.

Pierwszym i największym problemem związanym z implementacją ruchów Browna z wykorzystaniem procesu Wienera, z jakim się spotykamy, jest generowanie losowej liczby, zgodnie z rozkładem normalnym Gaussa. Ponieważ ten e‑materiał nie jest poświęcony tematyce rozkładów prawdopodobieństwa, skorzystamy z dostarczanej wraz z językiem C++ biblioteką <random>, która jest częścią standardu języka od wersji C++11. Zawiera ona różne generatory liczb pseudolosowych oraz implementacje najbardziej popularnych rozkładów prawdopodobieństwa, m.in. rozkładu normalnego Gaussa.

Dostarczone generatory oraz rozkłady dostępne są jako klasy, zatem potrzebne będzie utworzenie zarówno generatora, jak i rozkładu. Można to osiągnąć za pomocą następującego fragmentu kodu. W przedstawionym kodzie wartości, którymi inicjujemy rozkład, są przykładowe. W późniejszym etapie zostaną zastąpione w taki sposób, aby spełniały definicję procesu Wienera.

Linia 1. double wartosc podkreślnik oczekiwana znak równości 0 kropka 0 przecinek. Linia 2. odchylenie podkreślnik standardowe znak równości 0 kropka 3 średnik. Linia 4. default podkreślnik random podkreślnik engine generator średnik. Linia 5. normal podkreślnik distribution otwórz nawias ostrokątny double zamknij nawias ostrokątny rozklad otwórz nawias okrągły wartosc podkreślnik oczekiwana przecinek odchylenie podkreślnik standardowe zamknij nawias okrągły średnik.

Wygenerowanie losowej liczby zgodnej z rozkładem normalnym może się odbyć za pomocą następującej instrukcji:

Linia 1. double losowa podkreślnik liczba znak równości rozklad otwórz nawias okrągły generator zamknij nawias okrągły średnik.

Przejdźmy zatem do realizacji procesu Wienera. Ponieważ chcemy stworzyć dwuwymiarową symulację ruchów Browna, musimy przeprowadzić równolegle dwa procesy Wienera. Jeden z nich będzie opisywał ruch cząsteczki według współrzędnej x, drugi - według współrzędnej y. Zgodnie z definicją, proces zaczyna się w punkcie początkowym 0. Zainicjujmy zatem na początek obie zmienne wartością 0.0.

Linia 1. prawy ukośnik prawy ukośnik początkowe położenie. Linia 2. double x znak równości 0 kropka 0 przecinek. Linia 3. y znak równości 0 kropka 0 średnik.

Warto już teraz zastanowić się, w jakich odstępach czasowych chcemy sprawdzać „stan” naszej cząstki. Pomyślmy także, jak długo powinna trwać symulacja. Aby płynnie obserwować ruchy cząstki, proponujemy przyjąć parametr dt = 0.1. Na początku spróbujmy przeprowadzić 10‑sekundową symulację. Optymalny współczynnik długości wykonywanych kroków dla utworzonego szablonu to k = 1. Aby cząstka nie uciekła poza granice okna, ustawmy wartość k właśnie na tę wartość.

Linia 1. prawy ukośnik prawy ukośnik początkowe położenie. Linia 2. double x znak równości 0 kropka 0 przecinek. Linia 3. y znak równości 0 kropka 0 średnik. Linia 5. double t znak równości 0 kropka 0 przecinek prawy ukośnik prawy ukośnik aktualny czas symulacji. Linia 6. t podkreślnik max znak równości 10 kropka 0 przecinek prawy ukośnik prawy ukośnik długość symulacji. Linia 7. dt znak równości 0 kropka 1 przecinek prawy ukośnik prawy ukośnik interwał czasowy. Linia 8. k znak równości 1 kropka 0 średnik prawy ukośnik prawy ukośnik współczynnik długości kroków.

Utwórzmy pętlę, która będzie się wykonywać do momentu, gdy czas przekroczy 10 sekund.

Linia 1. prawy ukośnik prawy ukośnik początkowe położenie. Linia 2. double x znak równości 0 kropka 0 przecinek. Linia 3. y znak równości 0 kropka 0 średnik. Linia 5. double t znak równości 0 kropka 0 przecinek prawy ukośnik prawy ukośnik aktualny czas symulacji. Linia 6. t podkreślnik max znak równości 10 kropka 0 przecinek prawy ukośnik prawy ukośnik długość symulacji. Linia 7. dt znak równości 0 kropka 1 przecinek prawy ukośnik prawy ukośnik interwał czasowy. Linia 8. k znak równości 1 kropka 0 średnik prawy ukośnik prawy ukośnik współczynnik długości kroków. Linia 10. while otwórz nawias okrągły t otwórz nawias ostrokątny t podkreślnik max zamknij nawias okrągły otwórz nawias klamrowy. Linia 11. prawy ukośnik prawy ukośnik zwiększ aktualny czas. Linia 12. t plus znak równości dt średnik. Linia 13. zamknij nawias klamrowy.

Przejdźmy zatem do przemieszczania cząstki. Zgodnie z definicją procesu Wienera, wartość oczekiwana, którą powinniśmy zainicjować rozkład, wynosi 0. Wówczas generator będzie zwracał równą liczbę wartości dodatnich i ujemnych. Odchylenie standardowe jest pierwiastkiem wariancji, która w definicji procesu Wienera wynosi d t. Skorzystajmy z funkcji sqrt() z biblioteki <cmath>, aby obliczyć jej pierwiastek. Ponieważ wartość oczekiwana i odchylenie standardowe będą stałe, możemy utworzyć rozkład przed wejściem do pętli while. Przemieszczenie będzie odbywało się zatem o losową liczbę, wygenerowaną przez rozkład oraz generator (ewentualnie pomnożoną przez parametr k).

Linia 1. prawy ukośnik prawy ukośnik początkowe położenie. Linia 2. double x znak równości 0 kropka 0 przecinek. Linia 3. y znak równości 0 kropka 0 średnik. Linia 5. double t znak równości 0 kropka 0 przecinek prawy ukośnik prawy ukośnik aktualny czas symulacji. Linia 6. t podkreślnik max znak równości 10 kropka 0 przecinek prawy ukośnik prawy ukośnik długość symulacji. Linia 7. dt znak równości 0 kropka 1 przecinek prawy ukośnik prawy ukośnik interwał czasowy. Linia 8. k znak równości 1 kropka 0 średnik prawy ukośnik prawy ukośnik współczynnik długości kroków. Linia 10. prawy ukośnik prawy ukośnik utworzenie generatora i rozkładu. Linia 11. default podkreślnik random podkreślnik engine generator średnik. Linia 12. normal podkreślnik distribution otwórz nawias ostrokątny double zamknij nawias ostrokątny rozklad otwórz nawias okrągły 0 kropka 0 przecinek sqrt otwórz nawias okrągły dt zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 14. while otwórz nawias okrągły t otwórz nawias ostrokątny t podkreślnik max zamknij nawias okrągły otwórz nawias klamrowy. Linia 15. prawy ukośnik prawy ukośnik przemieszczenie. Linia 16. x plus znak równości k asterysk rozklad otwórz nawias okrągły generator zamknij nawias okrągły średnik. Linia 17. y plus znak równości k asterysk rozklad otwórz nawias okrągły generator zamknij nawias okrągły średnik. Linia 19. prawy ukośnik prawy ukośnik zwiększ aktualny czas. Linia 20. t plus znak równości dt średnik. Linia 21. zamknij nawias klamrowy.

Ostatnim krokiem będzie zapisanie instrukcji dodającej współrzędne kolejnego punktu do rysowanej trasy co jednostkę czasu oraz odczekanie odpowiedniego czasu, aby obserwować animację w sposób odzwierciedlający symulację.

Linia 1. prawy ukośnik prawy ukośnik początkowe położenie. Linia 2. double x znak równości 0 kropka 0 przecinek. Linia 3. y znak równości 0 kropka 0 średnik. Linia 5. double t znak równości 0 kropka 0 przecinek prawy ukośnik prawy ukośnik aktualny czas symulacji. Linia 6. t podkreślnik max znak równości 10 kropka 0 przecinek prawy ukośnik prawy ukośnik długość symulacji. Linia 7. dt znak równości 0 kropka 1 przecinek prawy ukośnik prawy ukośnik interwał czasowy. Linia 8. k znak równości 1 kropka 0 średnik prawy ukośnik prawy ukośnik współczynnik długości kroków. Linia 10. prawy ukośnik prawy ukośnik utworzenie generatora i rozkładu. Linia 11. default podkreślnik random podkreślnik engine generator średnik. Linia 12. normal podkreślnik distribution otwórz nawias ostrokątny double zamknij nawias ostrokątny rozklad otwórz nawias okrągły 0 kropka 0 przecinek sqrt otwórz nawias okrągły dt zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 14. prawy ukośnik prawy ukośnik rysuj pierwszą pozycję. Linia 15. w kropka addPoint otwórz nawias okrągły x przecinek y zamknij nawias okrągły średnik. Linia 17. while otwórz nawias okrągły t otwórz nawias ostrokątny t podkreślnik max zamknij nawias okrągły otwórz nawias klamrowy. Linia 18. prawy ukośnik prawy ukośnik przemieszczenie. Linia 19. x plus znak równości k asterysk rozklad otwórz nawias okrągły generator zamknij nawias okrągły średnik. Linia 20. y plus znak równości k asterysk rozklad otwórz nawias okrągły generator zamknij nawias okrągły średnik. Linia 22. prawy ukośnik prawy ukośnik zwiększ aktualny czas. Linia 23. t plus znak równości dt średnik. Linia 25. prawy ukośnik prawy ukośnik odczekaj dt. Linia 26. w kropka wait otwórz nawias okrągły dt zamknij nawias okrągły średnik. Linia 27. prawy ukośnik prawy ukośnik rysuj aktualną pozycję. Linia 28. w kropka addPoint otwórz nawias okrągły x przecinek y zamknij nawias okrągły średnik. Linia 29. zamknij nawias klamrowy.

Umieśćmy teraz napisany kod w szablonie i sprawdźmy jego działanie:

Linia 1. kratka include cudzysłów mainwindow kropka h cudzysłów. Linia 3. kratka include otwórz nawias ostrokątny QApplication zamknij nawias ostrokątny. Linia 4. kratka include otwórz nawias ostrokątny cstdlib zamknij nawias ostrokątny. Linia 5. kratka include otwórz nawias ostrokątny cmath zamknij nawias ostrokątny. Linia 6. kratka include otwórz nawias ostrokątny random zamknij nawias ostrokątny. Linia 8. using namespace std średnik. Linia 10. int main otwórz nawias okrągły int argc przecinek char asterysk argv otwórz nawias kwadratowy zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy. Linia 11. prawy ukośnik prawy ukośnik Początek kodu minus utworzenie okna do rysowania. Linia 12. QApplication a otwórz nawias okrągły argc przecinek argv zamknij nawias okrągły średnik. Linia 13. MainWindow w średnik. Linia 14. w kropka show otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 16. prawy ukośnik asterysk początek właściwej części kodu asterysk prawy ukośnik. Linia 17. prawy ukośnik prawy ukośnik początkowe położenie. Linia 18. double x znak równości 0 kropka 0 przecinek. Linia 19. y znak równości 0 kropka 0 średnik. Linia 21. double t znak równości 0 kropka 0 przecinek prawy ukośnik prawy ukośnik aktualny czas symulacji. Linia 22. t podkreślnik max znak równości 10 kropka 0 przecinek prawy ukośnik prawy ukośnik długość symulacji. Linia 23. dt znak równości 0 kropka 1 przecinek prawy ukośnik prawy ukośnik interwał czasowy. Linia 24. k znak równości 1 kropka 0 średnik prawy ukośnik prawy ukośnik współczynnik długości kroków. Linia 26. prawy ukośnik prawy ukośnik utworzenie generatora i rozkładu. Linia 27. default podkreślnik random podkreślnik engine generator średnik. Linia 28. normal podkreślnik distribution otwórz nawias ostrokątny double zamknij nawias ostrokątny rozklad otwórz nawias okrągły 0 kropka 0 przecinek sqrt otwórz nawias okrągły dt zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 30. prawy ukośnik prawy ukośnik rysuj pierwszą pozycję. Linia 31. w kropka addPoint otwórz nawias okrągły x przecinek y zamknij nawias okrągły średnik. Linia 33. while otwórz nawias okrągły t otwórz nawias ostrokątny t podkreślnik max zamknij nawias okrągły otwórz nawias klamrowy. Linia 34. prawy ukośnik prawy ukośnik przemieszczenie. Linia 35. x plus znak równości k asterysk rozklad otwórz nawias okrągły generator zamknij nawias okrągły średnik. Linia 36. y plus znak równości k asterysk rozklad otwórz nawias okrągły generator zamknij nawias okrągły średnik. Linia 38. prawy ukośnik prawy ukośnik zwiększ aktualny czas. Linia 39. t plus znak równości dt średnik. Linia 41. prawy ukośnik prawy ukośnik odczekaj dt. Linia 42. w kropka wait otwórz nawias okrągły dt zamknij nawias okrągły średnik. Linia 43. prawy ukośnik prawy ukośnik rysuj aktualną pozycję. Linia 44. w kropka addPoint otwórz nawias okrągły x przecinek y zamknij nawias okrągły średnik. Linia 45. zamknij nawias klamrowy. Linia 48. prawy ukośnik asterysk koniec właściwej części kodu asterysk prawy ukośnik. Linia 50. prawy ukośnik prawy ukośnik Koniec programu. Linia 51. return a kropka exec otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 52. zamknij nawias klamrowy.

Po uruchomieniu programu wyświetli się okno, w którym rysowana będzie aktualna pozycja cząstki oraz przebyta przez nią trasa. Oto przykładowy stan końcowy okna:

R8tvAlApOsmwE
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Jak widzimy, można zwiększyć czas symulacji. Oto jak przedstawia się stan symulacji po czasie 100 sekund:

RGdeh6XYlO2ui
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Słownik

interwał
interwał

odstęp w czasie lub odległość w przestrzeni

renderowanie
renderowanie

(ang. rendering) przedstawienie wyników cyfrowych za pomocą formy odpowiedniej dla wybranych danych (np. graficznie lub dźwiękowo)