niedziela, 20 listopada 2016

Ruch 2D - błądzenie bili, modyfikacja kodu

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.

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.
Zastanówcie się jak to zrobić. Kod będzie w następnym poście...


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: