Matematyka

2016-08-23 16:32
Jacek Labudda
												

Sentencje życiowe

Bez matematyki nasz świat nie wyglądałby, tak jak wygląda. Zastanów się sam... ...zbuduj pojazd bez żadnych obliczeń matematycznych, czy też urządzenie typu telefon/komputer. Jest to niemożliwe. Chociażby to, że teraz możesz przeglądać strony w internecie oraz czytać ten artykuł, jest zasługą matki nauk. Zatem jak napisać grę nie znając podstaw matematyki? Nijak. Jeśli kiedyś na lekcji matematyki powiedziałeś na głos coś w stylu: Ale do czego nam to się przyda? Po co my się uczymy tych głupot? Do czego nam pierwiastki/trygonometria/ciągi?
Powinieneś prędko przeprosić Pana/Panią profesor i błagać o wybaczenie! Prawie każdy dział matematyki znajdzie swoje zastosowanie w produkcji gier.

Przykłady zastosowania matematyki:

  • Ruch postaci
  • W jaki sposób zaimplementowałbyś poruszanie postacią pod dowolnym kątem. Według mojego mniemania, pierwsze próby wyglądałyby tak: jeśli strzałka w górę pozycja_y = pozycja_y - 1; jeśli strzałka w dól pozycja_y = pozycja_y + 1; jeśli strzałka w prawo pozycja_x = pozycja_x+ 1; jeśli strzałka w lewo pozycja_x = pozycja_x - 1; I co dalej? No dobra... Moje pierwsze poruszanie postacią tak wyglądało :P Ale zajmijmy się meritum sprawy. Bez zastosowania funkcji trygonometrycznych się nie obejdzie - sorry. :D Kod po modyfikacjach będzie wyglądał mniej więcej tak:
    float predkosc = 1; //dodatkowy parametr if(strzałka w górę){ pozycja_x += sin(radian(kat+90.0f))*predkosc; pozycja_y -= cos(radian(kat+90.0f))*predkosc; } if(strzałka w dół){ pozycja_x += sin(radian(kat-90.0f))*predkosc; pozycja_y -= cos(radian(kat-90.0f))*predkosc; } if(strzałka w prawo){ pozycja_x -= sin(radian(kat))*predkosc; pozycja_y += cos(radian(kat))*predkosc; } if(strzałka w lewo){ pozycja_x += sin(radian(kat))*predkosc; pozycja_y -= cos(radian(kat))*predkosc; }
    Zmienna kat jest kątem kierunkowym postaci. Obsługa zdarzeń jest zależna od użytego silnika, dlatego zastosowałem słownych znaczeń. Dla niektórych może być to przykład nieco odstraszający, ale jest to wiedza na poziomie gimnazjum. Trygonometria znajdzie swoje zastosowanie również w strzale z broni lub symulacje typu falowanie wody czy ruch planet po orbicie.

  • Odległość pomiędzy dwoma obiektami
  • Nic prostszego. Mamy dwa obiekty, które mają swoją pozycję X i Y. Mamy też wzór na odległość pomiędzy dwoma punktami: odleglosc_pomiedzy_punktami Podstawiamy do wzoru i gotowe. odleglosc_pomiedzy_punktami_przyklad Implementacja w c++:
    #include <iostream> #include <cmath> using namespace std; struct Punkt{ float x, y; Punkt(float x, float y){ this->x = x; this->y = y; } }; int main(){ Punkt A = Punkt(8,1), B = Punkt(2,9); float AB = sqrt(((B.x-A.x)*(B.x-A.x)) + ((B.y-A.y)*(B.y-A.y))); cout << "Dlugosc odcinka |AB| = " << AB << endl; return 0; }
    Wynik: Dlugosc odcinka |AB| = 10 Zastosowanie tego jest ogromne.

  • Kolizja typu koło - koło
  • kolizja_koło_-_koło Jeśli odległość pomiędzy okręgami jest większa niż suma ich promieni, to nie ma kolizji, jeśli odległość pomiędzy okręgami jest mniejsza bądź równa sumie ich promieni to mamy kolizje.

  • Optymalizacja
  • Na ten temat będzie osobna lekcja, ale jest dobrym przykładem na zastosowanie obliczeń matematycznych. Sprawdzając, w jakiej odległości znajduje się dany obiekt, możesz również zoptymalizować odpowiednio grę. optymalizacja Np. będąc dalej od obiektu, rysujesz jego replikę o mniejszej ilości werteksów i teksturze o niższej jakości lub w ogóle nie jest rysowany.
Zapamiętanie wszystkich wzorów jest niemożliwe, ale warto wiedzieć o ich istnieniu. W internecie znajdziesz wiele rozwiązań pewnych problemów, które możesz użyć w swojej grze, zatem wystarczy odrobina sprytu. Google zawsze służy pomocnym linkiem ;D
Pomysł
Brak nowszych lekcji

Użytkownicy
Logowanie:
Zaloguj
Polub nas na facebooku
Wyszukiwanie na stronie