Jaką matematykę powinni znać wszyscy programiści gier? [Zamknięte]


163

Proste pytanie: z jakiej matematyki powinni się dobrze zapoznać wszyscy programiści, aby odnieść sukces?

Nie mówię konkretnie o renderowaniu matematyki lub czegokolwiek w niszowych obszarach programowania gier, a konkretnie o rzeczach, o których nawet programiści powinni wiedzieć, a jeśli tego nie zrobią, prawdopodobnie uznają to za przydatne.

Uwaga: ponieważ nie ma jednej poprawnej odpowiedzi , to pytanie (i jego odpowiedzi) jest wiki społeczności.

Ponadto, jeśli chcesz uzyskać fantazyjne równania matematyczne z lateksu, skorzystaj z http://mathurl.com/ .


1
mmm, myślę, że był temat mówiący o książkach matematycznych, które powinien przeczytać każdy programista, czy coś takiego, tak naprawdę nie przypominam sobie tego ... ale miał na sobie kilka fajnych rzeczy ... nie jestem pewien, czy to był tutaj, czy też stackoverflow aswell lol
Prix



15
Zamknięte jako zbyt konstruktywne przez Tetrad ♦
Thomas Eding

1
@ThomasEding Tak, zbyt szeroki może być bardziej odpowiedni, ponieważ jest to wyraźnie pytanie z listy .
Anko,

Odpowiedzi:


137

Istnieje wiele innych form matematyki, które są przydatne, ale przy absolutnym minimum musisz je znać:

  • Algebra i arytmetyka

Są to dość proste, ale jeśli ich nie znasz, nie będziesz miał szansy zostać programistą, a tym bardziej twórcą gier.

Obiekty w świecie gry są reprezentowane przez wektory. Wektor reprezentuje rzeczy takie jak pozycja obiektu, kierunek patrzenia i prędkość. Niezbędne są obliczenia matematyczne wektorów, takie jak iloczyn skalarny , iloczyn krzyżowy i normalizacja wektorów.

Jak przenieść obiekt gry? Nowicjusz może powiedzieć:

„Wiem! Po prostu zrobię:” object.position.x++.

Nie nie nie. Musisz użyć obliczenia wektorowego. Obiekt potrzebuje położenia, kierunku i wektora przyspieszenia, którego można użyć do przesunięcia obiektu. Jeśli zrobisz nowicjusz, utkniesz w nie do utrzymania bałaganie i jak sprawić, by poruszał się w kierunku, który nie jest zgodny z osią XYZ świata?

Głównym powodem, dla którego gry używają czwartorzędów, jest to, że reprezentują one obroty prawie tak oszczędnie przestrzennie jak kąty Eulera, bez cierpienia z powodu blokady Gimbala . Blokada gimbala rozpoczyna się, gdy dowolny kąt Eulera osiąga obrót o 90 stopni wokół dowolnej osi: natychmiast tracisz stopień swobody. Czwarty rozwiązują ten problem, dodając czwarty wymiar. Jeśli utkniesz z kątami Eulera, będziesz musiał ograniczyć jedną oś, aby nigdy nie obracać się więcej niż ~ 89 stopni.

Jeśli planujesz matematykę reakcji fizyki w grze, wzięcie lekcji fizyki nie byłoby złym pomysłem.

Powody, dla których musisz znać równania fizyki:

  1. Odbijanie piłki (patrz: współczynnik restytucji)
  2. Wykonaj ruch piłki w kierunku z użyciem niutonów siły „x”
  3. Spraw, aby coś miało mniej lub więcej tarcie, aby ślizgało się z inną prędkością
  4. Reakcje na kolizję: w jakim kierunku obróci się obiekt, gdy uderzę go „tutaj”?

Jeśli używasz silnika fizyki (lub silnika gry, który ma wbudowany silnik fizyki), możesz uciec od wiedzy o fizyce. Mimo to dobrze wiedzieć, kiedy trzeba ubrudzić ręce, ponieważ silnik fizyki nie działa prawidłowo.


1
Jeśli chodzi o fizykę, artykuły Chrisa Heckera na temat dynamiki sztywnego ciała, w tym reakcji na zderzenie i restytucji, są cudowne: chrishecker.com/Rigid_Body_Dynamics
tenpn

25
Wspomniałeś o czwartorzędach, ale nie o macierzach transformacji?
Andrew Russell,

8
„Blokada Gimble [sic] to taki efekt, że kiedy poruszasz myszką, by spojrzeć w dół, przestanie, gdy spojrzysz bezpośrednio w dół…” W rzeczywistości jest to zwykle wykonywane dla zachowania rozsądku gracza i nie ma nic wspólnego z blokadą gimbala.

4
Dziwi mnie, jak często ćwiartki są połączone z blokadą drgań. Pisałem gry 3D bez żadnych ćwiartek i nigdy nie miałem problemu z blokadą drgań. Jeśli naprawdę rozumiesz matematykę 3D i wiesz, czym jest blokada gimble, nie będziesz miał tego problemu.
Skizz

7
Blokada gimbala jest w rzeczywistości spowodowana naiwnym obrotem z kątami Eulera (zwykle kąty Tait – Bryan: Yaw, Pitch, Roll). Alternatywne reprezentacje, takie jak kąt osi, można również zastosować, aby zapobiec jego wystąpieniu. Czwarty mają jednak zaletę łatwej interpolacji i z tego powodu są ogólnie preferowane.
Jason Kozak,

51

Marzę o dniu, w którym tworzenie gier będzie oparte na danych tak samo jak produkcja sztuki. Nigdzie nie widzę tego na horyzoncie, więc na razie znajomość matematyki wydaje się koniecznością.

Matematyka jest jak technika, im więcej, tym lepiej, o ile można ją zastosować.

Oto kolejność ważności, którą widzę.

  • Arytmetyka
  • Algebra liniowa (z interpretacjami geometrycznymi)
  • Rachunek (fizyka)
  • Kombinatoryka (poziomy losowe)
  • Prawdopodobieństwo (bilansowanie)
  • Statystyka (Bayesian esp. For AI)

Mógłbym iść dalej. Im więcej wiesz, tym lepiej, ale nauka matematyki nie oznacza, że ​​stworzysz świetną grę, ale może pomóc.


4
Rachunek jest ogromnym polem. Prawdopodobnie tylko niewielka jej część jest potrzebna do tworzenia gier.
Noldorin

2
@Noldorin tak. W większości sytuacji wystarczające może być zrozumienie zależności między pochodną, ​​przyspieszeniem, prędkością i pozycją ... ale rachunek jest niesamowity.
Jonathan Fischoff

Bayesowskie AI są zwykle nieużywane do gier ze względu na stosunkowo duże użycie pamięci, słabą debugowalność i przewidywalność oraz dobrze zdefiniowaną przestrzeń problemów. Dobra implementacja klasycznego wyszukiwania za pomocą sprytnej heurystyki jest zwykle (ale nie zawsze) lepszym narzędziem.

1
Dla mnie nie jest to szczególny algorytm bayesowski, który uważam za ważny, ale rozumienie procesu rozumowania zaproponowanego przez ET Jaynesa. Nie sądzę, aby w rozumowaniu Bayesa było z natury powolne.
Jonathan Fischoff,

1
Statystyki są wspaniałe, gdy tworzysz sztuczną inteligencję lub po prostu ogólnie rozwijasz grę zarządczą / potentat. Z drugiej strony nie mam żadnej znajomości rachunku różniczkowego. Twierdzę, że statystyki i prawdopodobieństwo są zasadniczo tym samym do celów uczenia się, ponieważ dziedzina statystyki wynika z pracy nad prawdopodobieństwem. To bardzo subiektywne.
Rushyo,

25

Bardzo podstawowe jest twierdzenie Pitagorasa. Znany również jako formuła odległości.

a ^ 2 + b ^ 2 = c ^ 2gdzie ai bsą krawędziami prostokąta trójkąta i cjest przeciwprostokątną. Oznacza to, że aby znaleźć długość wektora, wykonaj następujące czynności:

odległość = sqrt (a ^ 2 + b ^ 2)

Inną ciekawą rzeczą jest to, że jeśli porównujesz odległości, nie musisz wyliczyć pierwiastka kwadratowego (co może być stosunkowo kosztowne). Dlatego większość szkieletów ma dla swoich wektorów funkcję „odległość do kwadratu” lub „długość do kwadratu”.


1
Jestem prawie pewien, że przeczytałem to wcześniej na tej stronie :)
Ricket

Jasne, ten post został zainspirowany tym wątkiem / komentarzem.
Tetrad

Dostaję tutaj trochę déjà vu ... :)
mmyers

2
Mówiąc bardziej ogólnie, długość wektora jest pierwiastkiem kwadratowym iloczynu kropkowego z samym sobą. Więc sqrt(V dot V)jest jego długość. Tak więc odległość między dwoma punktami wynosi:sqrt((A-B) dot (A-B))
greyfade

Świetne jest także zrozumienie tego w kontekście tożsamości triggins sin² (x) + cos² (x) = 1.

19
  • Wektory zarówno 3D, jak i 4D oraz to, na co należy ustawić komponent W.
  • Układy współrzędnych lewej i prawej strony, a który to Twoja gra
  • Produkt kropkowy i do czego służy
  • Produkt krzyżowy i do czego jest przydatny
  • Macierze, jak reprezentują orientację i pozycję oraz jak je łączyć
  • Czwartorzędy

Nawet jeśli nie jesteś grafikiem, w 80% przypadków będziesz używać wektorów i matematyki wektorowej. To cebula naszej zabawnej bolońskiej.


4
To nie jest zła lista, ale liczyłem na bardziej opisową odpowiedź. To znaczy, czym jest wzór produktu kropkowego, co to znaczy i jak jest użyteczny.
Tetrad

3
@Tetrad Czy wikipedia ci tego nie daje? en.wikipedia.org/wiki/Dot_product#Definition .
Jonathan Fischoff,

1
Nie specjalnie dla gier, nie.
Tetrad

5
To robi. Mówi ci, że iloczyn skalarny jest cosinus kąta. To wszystko, co musisz wiedzieć (i wiedzieć), ponieważ aplikacja nadal zależy od tego, do czego chcesz jej używać. Orientacja AI? Potrzebujesz kąta, więc kropka jest twoim przyjacielem. Renderowanie światła? Potrzebujesz kąta. Wszystko, co można powiedzieć, to że (iloczyn iloczynu w tym przypadku) określa cosinus kąta razy długość wektora a, razy długość wektora b. To jest wiedza, którą można przekazać. Jakiej części tego użyć i jak nie można powiedzieć, ponieważ aplikacje są nieskończone.
Kaj,


10

W pełni zaistnieć +, -, *, i /. Bez nich jesteś kompletnie spieprzony.


12
Myślę, że wszyscy możemy się zgodzić, że nie o to pytano. (również zapomniałeś%).
coderanger

2
Inne odpowiedzi są głosowane za (podstawowa arytmetyka) ....
RCIX

7
Nie tylko podstawowa arytmetyka, ale także zrozumienie, w jaki sposób wszystkie operacje działają w środowiskach z uzupełnieniem dwójkowym, punktem stałym i zmiennoprzecinkowym IEEE. Bez dokładnego zrozumienia, dlaczego 0,1 * 3! = 0,3 lub dlaczego -x może nie być tym, czego oczekujesz, jesteś wkręcony.

1
@ user744 Właściwie to jestem wkręcony, co to za magia?
Neon Warge

9

Tak, programowanie gier bywa dość matematyczne. Potrzebna matematyka zależy od tego, nad czym pracujesz. Podstawowa arytmetyka jest oczywiście niezbędna, tak jak ma to miejsce we wszystkich programach. Ponadto:

Geometria jest niezbędna do każdej pracy graficznej. Jeśli chcesz wyświetlać rzeczy na ekranie, musisz zrozumieć układy współrzędnych. A jeśli chcesz je przenosić w dowolnym kierunku poza głównymi kierunkami, będziesz całkowicie zagubiony bez solidnego opanowania sinusów, cosinusów i wektorów (podstawowy trig). A jeśli potrzebujesz pracować w 3D, wymagania dotyczące geometrii i wyzwalania stają się znacznie bardziej skomplikowane.

Jeśli chcesz modelować dowolną zdalnie realistyczną fizykę, potrzebujesz do tego rachunku. (W końcu Newton wymyślił rachunek różniczkowy.)

Wszelkie obliczenia prawdopodobieństwa wymagają znajomości statystyki i teorii prawdopodobieństwa, aby uzyskać rozsądne wyniki bez szalonych prób i błędów.

Prawdopodobnie jest o wiele więcej, ale to właśnie przychodzi mi na myśl.


Pamiętam, kiedy mój młodszy brat próbował stworzyć grę Bang-Bang jako projekt dla swojej licealnej klasy VB. Rozpracował wszystko, ale nie miał pojęcia, jak sprawić, by kule armatnie latały łukiem opartym na kącie i sile, ponieważ nie wziął jeszcze Trig 1. Po wyjaśnieniu podstaw, zadziałało dobrze.
Mason Wheeler,

Trig nie jest potrzebny do łuku, po prostu użyj s=u.t + a.t.t/2. Potrzebujesz wyzwalacza, aby uzyskać prędkość początkową (u).
Skizz

Dlaczego to nie jest wyższe? Połowa programistów, z którymi pracowałem, nie może używać sinusów i cosinusów przez całe ich życie.
zaratustra

@Skizz: Tak. Potrzebujesz trig, aby zmienić kąt i moc w wektor początkowy. Następnie potrzebujesz tylko pętli animacji i stałej grawitacyjnej.
Mason Wheeler,

9

Przynajmniej będziesz potrzebować.

  • Algebra
  • Podstawowa geometria
  • Podstawowa trygonometria

Będziesz także chciał mieć przynajmniej praktyczną wiedzę na temat operacji Vector, i będziesz chciał wiedzieć, czym jest Matryca i do czego może być używana, chociaż szczegóły nie będą absolutnie konieczne.

Jeśli chcesz zająć się programowaniem graficznym, potrzebujesz dużo więcej wiedzy matematycznej, ale ogólne programowanie rozgrywki nie musi być tak intensywne z matematyki.


9

Systemy numeracji binarnej i szesnastkowej oraz sposób ich konwersji na liczby dziesiętne.

Chociaż generalnie nie będziesz musiał pracować z surowymi liczbami binarnymi, są one często używane do zmiennych Flag, które wymagają logiki logicznej i przesunięcia bitów.

Hex nie jest aż tak ważne (chyba, że chcesz przetworzyć 0xDEADBEEF ), ale przynajmniej, że chcesz, aby rozpoznać , kiedy jesteś one wykorzystywane, i dlaczego.


1
Jeśli nie możesz odczytać heksadecymalnego, nie możesz skutecznie programować. Większość stałych bitowych w C i C ++ będzie określonych jako wartości szesnastkowe.

Myślę, że masz Booleani binarypomieszane. Nie jestem pewien, czy są absolutnie niezbędne do programowania gier.
Skizz

@Skizz, dobry punkt - naprawiony. (I jeszcze jedna drobna uwaga, to wiki - nic nie powstrzymuje cię przed zmianą. :)
Cyclops

Jeśli nie możesz odczytać heksadecymalnego, użyj narzędzia, aby je przekonwertować.
Thomas Eding,

6

Nie ma wzmianek o podstawach matematyki programowania komputerowego? Teoria grafów, teoria liczb, teoria mnogości i konkretna matematyka, zwykle wszystkie połączone w bolesną i słabo nauczaną klasę o nazwie „matematyka dyskretna” na uniwersytecie.

„Głupie triki bitowe” oszczędzają każdy czas programu (i zwykle są one również równoważne z niektórymi trikami łańcuchowymi i trikami ustawionymi), typy wykresów i przejścia są używane wszędzie (nawet jeśli tylko wybierasz pojemniki STL), a złożoność algorytmiczna jest kluczem do optymalizacji, gdy języki osiągają wyższy poziom.


5

Myślę, że matryca wypłat jest dość niezbędnym narzędziem. Gry są często bardziej zabawne, gdy zbliżają się do interesującego salda fair play o sumie zerowej, a macierze wypłat pomagają określić to w skomplikowanych przypadkach. Wydaje mi się, że ten artykuł z Wikipedii jest tak dobry, jak każdy, i zawiera podstawową niezbędną koncepcję na stronie : http://en.wikipedia.org/wiki/Normal-form_game


Wydaje mi się to niezwykle niepraktyczne. Czy uważasz, że Starcraft lub Warcraft 3 zostały zbalansowane przy użyciu takiej metody? Nie sądzę, uważam, że była to iteracja i testowanie playtów oraz ciągłe łatanie.
bobobobo

Prawie na pewno były, początkowe armie Warcraft były zmodyfikowanymi duplikatami siebie nawzajem, prawdopodobnie utworzonymi za pomocą macierzy wypłat zaprojektowanych tak, aby były ogólnie zrównoważone. Potem mogli po prostu oprzeć się na tym, czego nauczyli się dostroić rzeczy, ale prawdopodobnie musieli to zrobić ponownie z gwiezdnym statkiem, aby uzyskać rozsądny poziom równowagi teraz, gdy zaangażowane były trzy różne armie, i ponownie, gdy dodano jednostki gwiezdne II. Oczywiście nie poprzestajesz na modelu, testowanie często pokazuje pojawiające się właściwości, ale macierz wypłat jest tym, jak początkowo modelujesz złożoność.
Kzqai

[wymagany cytat]?
bobobobo

1
Było tak: amazon.com/Game-Architecture-Design-New-Edition/dp/0735713634/ ... Chciałbym, aby wersja Amazon umożliwiała wyszukiwanie w książce, ponieważ może to być świetna rzecz, do której można odwoływać się w bitach na tej stronie. Chociaż może wyszukiwanie w książce Amazon nie działa w ten sposób. W każdym razie, tam właśnie przeszli przez macierze wypłat, wykorzystując warcraft jako przykład, a korzyść z zarządzania złożonością była tak wyraźna, że ​​natychmiast przekonwertowałem. To nie jest żadna gwarancja, że ​​Blizzard faktycznie zastosował takie podejście, ale są
mądrymi

... przynajmniej po to, by móc zrozumieć równowagę na pierwszy rzut oka. Oczywiście chcesz do tego dodać również testowanie. Właściwie kupiłem książkę na podstawie mniejszej, skróconej broszury, która zawierała niesamowite treści związane z grą, w tym dyskusję na temat macierzy wypłat i relacji papier-kamień-nożyce oraz wszelkiego rodzaju wspaniałe rzeczy, i byłem rozczarowany, gdy stwierdziłem, że ostateczna książka jest tomem i dużo zajmuje się programowaniem w C ++ (co nie jest moją rzeczą), a także problemami z zarządzaniem tytułami AAA. Wszystko w skróconej broszurce było jednak świetne.
Kzqai

4

Zrozum iloczyn iloczynu: jeśli dwa wektory mają mniej więcej ten sam kierunek (theta <90 °), iloczyn iloczynu jest dodatni lub ujemny. Można go używać do testowania, gdy gracz jest w polu widzenia (zakładając, że FOV wynosi 90 °).

I uogólnij swoją grę 2D na wyższe wymiary. (użyj obliczeń wektorowych)

Jeśli możesz samodzielnie wdrożyć silnik 3D, możesz zacząć.


4

To zależy od tego, co robisz .

Wszyscy programiści powinni znać przynajmniej algebrę szkoły średniej. To znaczy:

  • Dobre wyczucie liczb
  • Wygoda z podstawową matematyką (dodawanie, dodawanie, dzielenie, dzielenie)
  • Trygonometria (sin i cos)
  • Wektory, kąt między wektorami, iloczyn iloczynu, iloczyn krzyżowy

Twoi programiści graficzni muszą wiedzieć:

Twoi programiści fizyki muszą wiedzieć:

  • Wszystkie powyższe i
  • Równania różniczkowe
  • Metody numeryczne

3

Oprócz sinusów i cosinusów (których 50–75% programistów, których spotkałem, nie wiedziałem, jak się posługiwać), poznaj magiczną funkcję arc-tan i jak można jej użyć do uzyskania kąta dowolnego wektora.


5
w większości przypadków jest to pożądane, atan2ponieważ samo zajmuje się obsługą kwadrantu.
CodesInChaos

0

Dziwi mnie, że nikt nie wspominał o Czwartorzędach . Nie mam dużego doświadczenia z różnymi silnikami, ale przynajmniej JME używa go wszędzie i mam wrażenie, że są one dość ważną koncepcją.


2
er wspominałem o czwartorzędach.
tenpn

Ach, przepraszam, przegapiłem to.
Raoul,

3
Dla 1% programistów gier, którzy piszą kod animacji niskiego poziomu w silniku renderowania, czwartorzędy są przydatnym narzędziem. Dla pozostałych 99% programistów gier nie są tak naprawdę potrzebni.
Skizz

-1

Tworzenie gier polega na wprowadzeniu „prawdziwego” życia do rzeczywistości wirtualnej. Lepiej wiedzieć więcej o prawdziwym świecie / wszechświecie niż mniej :) .. Matematyka jest tylko narzędziem. A jeśli planujesz, musisz również poświęcić czas na naukę.

ZMIENIONO: Widziałem pewne nieporozumienia :) .. Myślę, że ten zestaw osiągnięć matematycznych, którym musisz rządzić, zależy od konkretnych rzeczy, które chcesz opisać. Nikt nie wie wszystkiego. Lepszym sposobem na to jest. Nie uczyć się wszystkiego na początku, ale uczyć się małego kawałka, używać, uczyć się, używać itp. Następnie możesz to zrobić podczas rozwoju, jeśli masz dobry plan.


1
Ile realnego życia jest w tetris?
tenpn

Dużo :). Tetris polega na logicznym myśleniu pod presją. Podobnie jak inne gry logiczne. Chodzi o ćwiczenie. Więcej ćwiczeń, więcej presji, z którą możesz sobie poradzić i nadal dobrze się z tego bawisz. Wydaje mi się, że to prawdziwe życie
:)

3
nie ma sensu, gdy nie uda się uczciwie odpowiedzieć na pytanie.
Heath Hunnicutt

@Heath Hunnicutt, masz rację.
samboush,

3
Naprawdę szanuję tę odpowiedź.
Heath Hunnicutt

-2

Prosta odpowiedź: DUŻO!

Szczegółowa odpowiedź:

Arytmetyka, algebra elementarna i liniowa, w większości przypadków Trig, jeśli tworzysz grę 3D, ZDECYDOWANIE rachunku i fizyki (fizyka wymaga rachunku)!


3
Czy możesz trochę wyjaśnić listę? Czy mówisz „Trig, jeśli tworzysz grę 3D” lub „Jeśli tworzysz grę 3D, ZAWSZE obliczasz rachunek różniczkowy”?
yoozer8
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.