Quale matematica dovrebbero sapere tutti i programmatori di giochi? [chiuso]


163

Domanda abbastanza semplice: quale matematica dovrebbero avere tutti i programmatori di gioco per avere successo?

Non sto specificamente parlando di rendere la matematica o altro nelle aree di nicchia della programmazione di gioco, più specificamente solo cose che anche i programmatori di giochi dovrebbero sapere e, in caso contrario, probabilmente lo troveranno utile.

Nota: poiché non esiste una risposta corretta , questa domanda (e le relative risposte) è un wiki della comunità.

Inoltre, se desideri fantastiche equazioni matematiche in lattice, puoi usare http://mathurl.com/ .


1
mmm penso che ci fosse un argomento che parlava di libri di matematica che ogni programmatore dovrebbe leggere o qualcosa del genere che non ricordo davvero ... ma aveva alcune cose carine su di esso .... non sono sicuro se fosse qui o stackoverflow e anche lol
Prix



15
Chiuso come eccessivamente costruttivo da Tetrad ♦
Thomas Eding,

1
@ThomasEding Sì, troppo ampia avrebbe potuto essere più adatta, poiché questa è chiaramente una domanda di lista .
Anko,

Risposte:


137

Esistono molte altre forme matematiche utili, ma al minimo assoluto è necessario conoscere queste:

  • Algebra e aritmetica

Questi sono piuttosto semplici, ma se non li conosci non avrai la possibilità di essere un programmatore e tanto meno uno sviluppatore di giochi.

Gli oggetti in un mondo di gioco sono rappresentati da vettori. Un vettore rappresenta cose come la posizione di un oggetto, la direzione e la velocità dello sguardo. I calcoli matematici vettoriali come Dot Product , Cross Product e normalizzazione Vector sono essenziali.

Come posso spostare il mio oggetto di gioco? Il novizio potrebbe dire:

"Lo so! Lo farò semplicemente:" object.position.x++.

No no no Devi usare un calcolo vettoriale. L'oggetto necessita di un vettore di posizione, direzione e accelerazione che è possibile utilizzare per spostare l'oggetto. Se fai la cosa da principiante, rimarrai bloccato in un disordine non mantenibile e come lo fai muovere in una direzione non allineata con l'asse XYZ del mondo?

La ragione principale per cui i giochi usano i quaternioni è perché rappresentano rotazioni quasi altrettanto efficienti nello spazio degli angoli di Eulero, senza soffrire della chiusura del gimbal . Il blocco cardanico inizia quando qualsiasi angolo di Eulero raggiunge una rotazione di 90 gradi attorno a qualsiasi asse: perdi immediatamente un grado di libertà. I quaternioni affrontano questo problema aggiungendo una quarta dimensione. Se rimani bloccato con gli angoli di Eulero, dovresti limitare un asse a non ruotare mai più di ~ 89 gradi.

Se stai programmando la matematica per le risposte di fisica in un gioco, seguire una lezione di fisica non sarebbe stata una cattiva idea.

Ragioni per cui dovrai conoscere le equazioni della fisica:

  1. Far rimbalzare una palla (vedi: coefficiente di restituzione)
  2. Fai muovere una palla in una direzione con 'x' newton di forza
  3. Fai in modo che qualcosa abbia più o meno attrito in modo che scivoli a una velocità diversa
  4. Risposte alle collisioni: quale direzione ruoterà l'oggetto quando lo colpisco "qui"?

Se usi un motore fisico (o un motore di gioco che ha il motore fisico integrato), puoi farcela con pochissima conoscenza della fisica. Tuttavia, è abbastanza buono sapere quando è necessario sporcarsi le mani perché il motore fisico non funziona correttamente.


1
Per la fisica, gli articoli di Chris Hecker sulla dinamica del corpo rigido, inclusa la risposta alla collisione e la restituzione, sono meravigliosi: chrishecker.com/Rigid_Body_Dynamics
tenpn

25
Hai citato quaternioni ma non matrici di trasformazione ??
Andrew Russell,

8
"Il blocco [sic] di Gimble è quell'effetto in cui quando muovi il mouse per guardare in basso, si fermerà quando guardi direttamente in basso ...." In realtà questo è di solito fatto per la sanità mentale del giocatore, e non ha nulla a che fare con il blocco del gimbal.

4
Mi sorprende la frequenza con cui i quaternioni sono collegati alla serratura del gimble. Ho scritto giochi 3D senza quaternioni e non ho mai avuto problemi di blocco dei gimble. Se capisci davvero la matematica 3D e sai cos'è un lucchetto, non avrai questo problema.
Skizz,

7
Il blocco cardanico è in realtà causato da un'ingenua rotazione con angoli di Eulero (comunemente angoli di Tait – Bryan: Yaw, Pitch, Roll). Rappresentazioni alternative come l'Asse-Angle possono anche essere utilizzate per prevenirne il verificarsi. I quaternioni hanno tuttavia il vantaggio di una facile interpolazione e sono generalmente preferiti per questo motivo.
Jason Kozak,

51

Sogno il giorno in cui lo sviluppo del gioco è guidato dai dati come la produzione artistica. Non lo vedo da nessuna parte all'orizzonte, quindi per ora conoscere un po 'di matematica sembra essere una necessità.

La matematica è come una tecnica, tanto più tanto meglio, finché puoi applicarla.

Ecco l'ordine di importanza che vedo.

  • Aritmetica
  • Algebra lineare (con interpretazioni geometriche)
  • Calcolo (fisica)
  • Combinatoria (livelli randomizzati)
  • Probabilità (bilanciamento)
  • Statistica (esp. Bayesiana per AI)

Potrei andare avanti. Più conosci, meglio è, ma imparare un sacco di matematica non significa che farai un grande gioco, ma può aiutarti.


4
Il calcolo è un campo enorme. Probabilmente solo una piccola parte è necessaria per lo sviluppo del gioco.
Noldorin,

2
@Noldorin yep. Nella maggior parte dei casi la comprensione della relazione tra derivata, accelerazione, velocità e posizione potrebbe essere sufficiente ... ma il calcolo è fantastico.
Jonathan Fischoff il

Le IA bayesiane tendono a non essere utilizzate per i giochi a causa dell'utilizzo relativamente ampio della memoria, della scarsa debuggabilità e prevedibilità e di uno spazio problematico ben definito. Una buona implementazione della ricerca classica con un'euristica intelligente è di solito (ma non sempre) uno strumento migliore.

1
Per me non è un algoritmo bayesiano particolare che trovo importante, ma che comprende il processo di ragionamento adottato da ET Jaynes. Non credo sia qualcosa di intrinsecamente lento nel ragionamento bayesiano.
Jonathan Fischoff,

1
Le statistiche sono meravigliose quando si sviluppa un'intelligenza artificiale o in generale si sviluppa un gioco di gestione / magnate. D'altra parte, non ho alcuna familiarità con il calcolo. Direi che la statistica e la probabilità sono essenzialmente la stessa cosa ai fini dell'apprendimento poiché il campo della statistica deriva dal lavoro sulla probabilità. È molto soggettivo.
Rushyo,

25

Uno di base è il teorema di Pitagora. Conosciuta anche come formula della distanza.

a ^ 2 + b ^ 2 = c ^ 2dove ae bsono i bordi di un triangolo rettangolo ed cè l'ipotenusa. Ciò significa che per trovare la lunghezza di un vettore, devi fare questo:

distanza = sqrt (a ^ 2 + b ^ 2)

Un'altra nota interessante è che se stai solo confrontando le distanze, non devi prendere la radice quadrata (che può essere relativamente costosa). Ecco perché la maggior parte dei framework ha una funzione "quadrata distanza" o "quadrata lunghezza" per i loro vettori.


1
Sono abbastanza sicuro di averlo letto altrove su questo sito prima :)
Ricket,

Certo, questo post è stato ispirato da quel thread / commento.
Tetrad

Sto ricevendo un po 'di déjà vu qui ... :)
mmyers

2
Più in generale, la lunghezza di un vettore è la radice quadrata del prodotto punto con se stesso. Quindi, sqrt(V dot V)è la sua lunghezza. Quindi, la distanza tra due punti è:sqrt((A-B) dot (A-B))
greyfade

Grande anche la comprensione nel contesto dell'identità del trigono sin² (x) + cos² (x) = 1.

19
  • Disegna sia 3D che 4D e su quale dovrebbe essere impostato il componente W.
  • Sistemi di coordinate per la mano sinistra e per la mano destra e quale è il tuo gioco
  • Il prodotto punto e per cosa è utile
  • Il prodotto incrociato e per cosa è utile
  • Matrici, come rappresentano l'orientamento e la posizione e come è possibile combinarle
  • quaternions

Anche se non sei The Graphics Guy, utilizzerai i vettori e la matematica vettoriale l'80% delle volte. Sono le cipolle del nostro divertente bolognese.


4
Questa non è una brutta lista, ma speravo in una risposta più descrittiva. Vale a dire qual è la formula del prodotto punto, che cosa significa e come è utile.
Tetrad,


1
Non per i giochi in particolare, no.
Tetrad

5
Lo fa. Ti dice che il prodotto punto è il coseno dell'angolo. Questo è tutto ciò che devi sapere (e puoi sapere), poiché l'applicazione dipende ancora da cosa vuoi usarla. Orientamento dell'IA? Hai bisogno dell'angolo, quindi il punto è tuo amico. Rendering della luce? Hai bisogno dell'angolo. Tutto ciò che si può dire è che (punto prodotto in questo caso) definisce il coseno dell'angolo per la lunghezza del vettore a, per la lunghezza del vettore b. Questa è la conoscenza che può essere data. Quale parte di esso utilizzare e come non può essere definita poiché le applicazioni sono infinite.
Kaj,


10

Una solida conoscenza +, -, *, e /. Senza di loro, sei completamente fregato.


12
Penso che possiamo essere tutti d'accordo sul fatto che non è questa la domanda. (anche tu hai dimenticato%).
coderanger

2
Altre risposte vengono votate per questo (aritmetica di base) ....
RCIX

7
Non solo aritmetica di base, ma comprensione del funzionamento di tutte le operazioni in ambienti a virgola mobile a complemento doppio, punto fisso e IEEE. Senza una solida comprensione del perché 0,1 * 3! = 0,3, o perché -x potrebbe non essere quello che ti aspetti, sei fregato.

1
@ user744 Sono davvero fregato, cos'è questa stregoneria?
Neon Warge,

9

Sì, la programmazione del gioco tende ad essere piuttosto intensiva in matematica. Quale matematica ti serve dipende da cosa stai lavorando. L'aritmetica di base è un must, ovviamente, proprio come in tutta la programmazione. Oltre a questo:

La geometria è vitale per qualsiasi lavoro grafico. Se si desidera visualizzare elementi sullo schermo, è necessario comprendere i sistemi di coordinate. E se vuoi spostarli in tutto tranne che nelle direzioni cardinali, ti perderai completamente senza una solida comprensione di seni, coseni e vettori (trig di base). E se hai bisogno di lavorare in 3D, i requisiti di geometria e di configurazione diventano molto più complicati.

Se vuoi modellare qualsiasi tipo di fisica realistica da remoto, hai bisogno di calcoli per questo. (Dopotutto è ciò che ha spinto Newton a inventare il calcolo.)

Qualsiasi tipo di calcolo delle probabilità richiede la conoscenza delle statistiche e della teoria delle probabilità al fine di ottenere risultati sani senza quantità insane di prove ed errori.

Probabilmente c'è molto di più, ma è quello che mi viene in mente proprio dalla cima della mia testa.


Ricordo quando il mio fratellino cercò di realizzare un gioco Bang-Bang come progetto per la sua classe VB al liceo. Aveva sistemato tutto, tranne che non aveva idea di come far volare le palle di cannone in un arco in base all'angolo e alla potenza, perché non aveva ancora preso Trig 1. Dopo aver spiegato le basi, ha funzionato bene.
Mason Wheeler,

Nessun Trig necessario per l'arco, basta usare s=u.t + a.t.t/2. Per ottenere la velocità iniziale è necessario il trigger (u).
Skizz,

Perché non è più alto? La metà dei programmatori con cui ho lavorato non può usare seni e coseni per la loro vita.
Zaratustra,

@Skizz: Sì. Hai bisogno di un grilletto per trasformare un angolo e una potenza in un vettore iniziale. Dopo di che hai solo bisogno di un loop di animazione e una costante gravitica.
Mason Wheeler,

9

Almeno ne avrai bisogno.

  • Algebra
  • Geometria di base
  • Trigonometria di base

Avrai anche bisogno di avere almeno una conoscenza pratica delle operazioni di Vector, e vorrai sapere cos'è una Matrice e a cosa serve, sebbene i dettagli non siano strettamente necessari.

Se vuoi entrare nella programmazione grafica, avrai bisogno di molte più conoscenze matematiche, ma fare una programmazione generale del gameplay non deve essere così intensivo in matematica.


9

Sistemi di numerazione binari ed esadecimali e come convertirli in / da numeri decimali.

Anche se non sarà generalmente necessario lavorare con prime numeri binari, essi sono spesso usati per le variabili Bandiera, che richiedono la logica booleana e bit-shifting.

Hex non è altrettanto importante (a meno che tu non voglia elaborare 0xDEADBEEF ), ma come minimo, vorresti riconoscere quando vengono utilizzati e perché.


1
Se non riesci a leggere hex, non puoi programmare in modo efficace. La maggior parte delle costanti bit a bit in C e C ++ verranno specificate come valori esadecimali.

Penso che tu abbia capito Booleane fatto binaryconfusione. Non sono sicuro che siano assolutamente necessari per la programmazione del gioco.
Skizz,

@Skizz, buon punto - risolto. (E un altro punto minore, è un wiki - niente ti impedisce di cambiarlo. :)
Ciclope,

Se non riesci a leggere hex, allora usa uno strumento per convertirlo per te.
Thomas Eding,

6

Nessuna menzione delle basi matematiche della programmazione informatica? Teoria dei grafi, teoria dei numeri, teoria degli insiemi e matematica concreta, di solito tutti raggruppati in una classe dolorosa e mal insegnata chiamata "matematica discreta" all'università.

I "trucchi dei bit stupidi" consentono di risparmiare ogni tipo di tempo del programma (e di solito sono equivalenti ad alcuni trucchi delle stringhe e trucchi impostati), i tipi di grafici e gli spostamenti vengono utilizzati ovunque (anche se stai solo raccogliendo contenitori STL), e la complessità algoritmica è la chiave per l'ottimizzazione man mano che le lingue raggiungono livelli più alti.


5

Penso che la matrice di payoff sia uno strumento piuttosto essenziale. I giochi sono spesso più divertenti quando si avvicinano ad alcuni interessanti equilibri a somma zero e le matrici di payoff ti aiutano a quantificarlo in casi complicati. Immagino che questo articolo di Wikipedia sia buono come tutti gli altri, e trasmetta il concetto di base necessario attraverso: http://it.wikipedia.org/wiki/Normal-form_game


Questo mi sembra estremamente poco pratico. Pensi che Starcraft o Warcraft 3 siano stati bilanciati usando un metodo come questo? Non credo, credo che sia stata iterazione e playtest e patching costanti.
Bobobobo,

Uh, quasi certamente lo erano, gli eserciti iniziali di warcraft erano duplicati modificati l'uno dell'altro che probabilmente erano stati creati con matrici di payoff progettate per renderli complessivamente bilanciati. Dopodiché potrebbero aver semplicemente basato su ciò che hanno imparato a mettere a punto le cose, ma probabilmente hanno dovuto farlo di nuovo con Starcraft per ottenere un ragionevole livello di equilibrio ora che sono stati coinvolti tre diversi eserciti, e ancora quando sono state aggiunte unità Starcraft II. Ovviamente non ti fermi semplicemente al modello, il playtest mostra spesso proprietà emergenti, ma una matrice di payoff è come inizialmente modellare la complessità.
Kzqai,

[citazione necessaria]?
Bobobobo,

1
È stato questo: amazon.com/Game-Architecture-Design-New-Edition/dp/0735713634/… Vorrei che la versione di Amazon consentisse la ricerca all'interno del libro, perché potrebbe essere un'ottima cosa fare riferimento in bit per questo sito. Anche se forse la ricerca nel libro di Amazon non funziona in questo modo. Ad ogni modo, è lì che sono andati oltre le matrici di payoff, usando come esempio la guerra militare, e il vantaggio di gestire la complessità era così evidente che mi ha fatto convertire istantaneamente. Non è una garanzia che Blizzard abbia effettivamente usato quell'approccio, ma sono ragazzi intelligenti, quindi probabilmente avevano una soluzione matematica ...
Kzqai

... almeno per un modo di capire l'equilibrio a colpo d'occhio. Ovviamente vuoi aggiungere anche dei test. In realtà ho comprato il libro sulla base di un opuscolo più piccolo e abbreviato che conteneva fantastici contenuti relativi al gioco, tra cui la discussione sulla matrice dei payoff e le relazioni rock-paper-scissors e tutti i tipi di cose fantastiche, e sono rimasto deluso nello scoprire che il finale il libro è un tomo e si occupa molto della programmazione C ++ (che non è la mia cosa), così come dei problemi di gestione del titolo AAA. Tuttavia, tutto nell'opuscolo ridotto era eccezionale.
Kzqai,

4

Comprendi il prodotto punto: se due vettori hanno circa la stessa direzione (theta <90 gradi), allora il prodotto punto è positivo, oppure negativo. Può essere usato per testare ogni volta che il giocatore è in vista (supponendo che il FOV sia di 90 gradi).

E generalizza il tuo gioco 2D a dimensioni più elevate. (usa calcoli vettoriali)

Se riesci a implementare un motore 3D da solo, sei a posto.


4

Dipende da cosa stai facendo .

Tutti i programmatori di giochi dovrebbero conoscere almeno l'algebra delle scuole superiori. Questo significa:

  • Un buon senso dei numeri
  • Comfort con la matematica di base (aggiungi, sottotitoli, mult, dividi)
  • Trigonometria (sin e cos)
  • Vettori, angolo tra vettori, punto prodotto, prodotto incrociato

I programmatori grafici devono sapere:

I tuoi programmatori di fisica devono sapere:

  • Tutto quanto sopra e
  • Equazioni differenziali
  • Metodi numerici

3

Oltre a seno e coseno (che il 50-75% dei programmatori che ho incontrato non sapeva come usare), impara la magica funzione di abbronzatura ad arco e come può essere usata per ottenere l'angolo di qualsiasi vettore.


5
nella maggior parte dei casi, atan2poiché ciò si occupa della gestione del quadrante da solo.
CodesInCos

0

Sono sorpreso che nessuno abbia menzionato i Quaternioni . Non ho molta esperienza con motori diversi, ma almeno JME lo usa ovunque e ho avuto l'impressione che siano un concetto abbastanza importante.


2
e ho menzionato i quaternioni.
Tenpn

Ah, scusa, mi sono perso.
Raoul,

3
Per l'1% dei programmatori di giochi che scrivono codice di animazione di basso livello nel motore di rendering, i quaternioni sono uno strumento utile. Per l'altro 99% dei programmatori di giochi, non sono realmente necessari.
Skizz,

-1

Fare giochi significa dare vita "reale" alla realtà virtuale. È meglio sapere di più sul mondo / universo reale che meno :) .. La matematica è solo uno strumento. E se stai pianificando, devi dedicare del tempo anche per studiare nei piani.

EDITED: Ho visto dei malintesi :) .. Penso che quella serie di acquisizioni matematiche su ciò che devi governare, dipenda da cose concrete da ciò che vuoi descrivere. Nessuno sa tutto. E il modo migliore per farlo è. Non imparare tutto all'inizio, ma impara piccoli pezzi, usa, impara, usa ecc. Quindi puoi farlo durante lo sviluppo, se hai un buon piano.


1
Quanta vita reale c'è in tetris?
tenpn

Molti :). Tetris riguarda il pensiero logico sotto la pressione. Come altri giochi logici. Si tratta di praticare. Più pratica, più sicurezza che puoi gestire e comunque divertirti. Mi sembra la vita reale
:)

3
non ha senso quando non si riesce a rispondere equamente alla domanda.
Heath Hunnicutt,

@Heath Hunnicutt, hai ragione.
samboush,

3
Rispetto davvero quella risposta.
Heath Hunnicutt,

-2

Risposta semplice: MOLTO!

Risposta dettagliata:

Algebra aritmetica, elementare e lineare, nella maggior parte dei casi Trig, se stai realizzando un gioco 3D, DEFINITELY Calculus e Physics (Physics richiede Calculus)!


3
Puoi chiarire un po 'l'elenco? Stai dicendo "Trig se stai realizzando un gioco 3D" o "Se stai realizzando un gioco 3D, DEFINITAMENTE Calcolo"?
yoozer8
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.