Modyfikacja funkcji draw() polega na zmianie warunku instrukcji if() zajmującej się zmianą prędkości oraz powiązaniu zmiany prędkości ze zmianą koloru
Zależy nam na tym żeby zmiana prędkości zachodziła ŚREDNIO raz na sekundę ale nieregularnie. Funkcja random() w Processingu zwraca zawsze wartość zmiennoprzecinkową typu float. Jeśli parametrem jest FR to będzie to wartość zmiennoprzecinkowa z zakresu <0..FR>. Taka wartość bardzo rzadko będzie dokładnie równa 0, ale całkiem często będzie z zakresu <0..1). Dlatego używamy funkcji floor(), która odcina część ułamkową i liczby zmiennoprzecinkowej.
Dzięki temu z prawdopodobieństwem 1/FR dostajemy 0 i ciało złożonej instrukcji warunkowej się wtedy wykonuje.
niedziela, 20 listopada 2016
Ruch 2D - błądzenie bili - kod.
Dwa wymiary wymagają dwóch zmiennych definiujących położenie i dwóch definiujących aktualną prędkość. Maksymalna prędkość może być wspólna dla obu wymiarów, podobnie jak współczynnik utraty energii przy odbiciu.

Dzięki zliczaniu klatek i operacji modulo (% reszta z dzielenia całkowitego) możemy, używając funkcji random() losować nowy wektor prędkości (prawie) dokładnie raz na sekundę.
Zwróćcie uwagę że przy zderzeniu odwracamy tylko jedną składową prędkości "upuszczając" jej nieco energii, oraz poprawiając współrzędną kulki tak aby nie przeszła na wylot przez ścianę.
Trochę to naciągana fizyka, ale każdy model musi być uproszczony, a tym bardziej w grach i zabawach :-)
#random
Ruch 2D - bładzenie przypadkowe
Przechodzimy do ruchu w dwu wymiarach.
Poniżej efekty uproszczonego błądzenia losowego kulki.
sobota, 19 listopada 2016
Rzut pionowy - przybliżony
Kolejne przybliżenie ruchu "punktu materialnego" w jednym wymiarze:

Poza początkową wysokością, która w tak prostej wersji na efekt wizualny nie wpływa, mamy dwie istotne zmienne - prędkość mierzoną w pikselach na sekundę oraz przyśpieszenie/hamowanie liczone w pikselach na sekundę do kwadratu.
Mechanika ruchu jest oczywiście przybliżeniem, tym lepszym, im więcej klatek na sekundę animujemy.
Jeśli powyższy program wydaje się zbyt skomplikowany to można przejść najpierw przez dwa uproszczone etapy:
Można też temat rozbudować i zamiast kadrowania wprowadzić odbijanie kulki od "podłogi" i "sufitu". Zmodyfikowany kod wygląda jak poniżej:
Poza początkową wysokością, która w tak prostej wersji na efekt wizualny nie wpływa, mamy dwie istotne zmienne - prędkość mierzoną w pikselach na sekundę oraz przyśpieszenie/hamowanie liczone w pikselach na sekundę do kwadratu.
Mechanika ruchu jest oczywiście przybliżeniem, tym lepszym, im więcej klatek na sekundę animujemy.
Jeśli powyższy program wydaje się zbyt skomplikowany to można przejść najpierw przez dwa uproszczone etapy:
Można też temat rozbudować i zamiast kadrowania wprowadzić odbijanie kulki od "podłogi" i "sufitu". Zmodyfikowany kod wygląda jak poniżej:
Subskrybuj:
Posty (Atom)