¿Qué matemáticas deben saber todos los programadores de juegos? [cerrado]

163

Pregunta bastante simple: ¿Qué matemática deben tener todos los programadores de juegos para poder tener éxito?

No me refiero específicamente a la representación de las matemáticas ni a nada en las áreas específicas de la programación de juegos, más específicamente, solo cosas que incluso los programadores de juegos deberían saber, y si no lo hacen, probablemente lo encontrarán útil.

Nota: como no hay una respuesta correcta , esta pregunta (y sus respuestas) es una wiki comunitaria.

Además, si desea elegantes ecuaciones matemáticas de látex, no dude en utilizar http://mathurl.com/ .

Tetrad
fuente
1
mmm, creo que hubo un tema que hablaba de libros de matemáticas que todo programador debería leer o algo así. Realmente no lo recuerdo ... pero tenía algunas cosas buenas ... no estoy seguro de si estaba aquí o stackoverflow también jajaja
Premio del
@Prix: te refieres a este: gamedev.stackexchange.com/questions/1210/… ;)
Michael Klement
15
Cerrado por ser demasiado constructivo por Tetrad ♦
Thomas Eding
1
@ThomasEding Sí, demasiado amplio podría haber sido más apropiado, ya que esta es claramente una pregunta de lista .
Anko

Respuestas:

137

Hay muchas otras formas de matemática que son útiles, pero como mínimo absoluto necesita saber estas:

  • Álgebra y Aritmética

Estos son bastante básicos, pero si no los conoce, ni siquiera tendrá la oportunidad de ser un programador y mucho menos un desarrollador de juegos.

Los objetos en un mundo de juego se representan con vectores. Un vector representa cosas como la posición, la dirección y la velocidad de un objeto. Los cálculos matemáticos de vectores, como el producto de puntos , el producto cruzado y la normalización de vectores son esenciales.

¿Cómo muevo mi objeto de juego? El novicio podría decir:

"¡Lo sé! Solo haré:" object.position.x++.

No no no. Necesitas usar un cálculo vectorial. El objeto necesita un vector de posición, dirección y aceleración que puede usar para mover el objeto. Si haces lo novato, te quedarás atrapado en un desastre inmanejable, y ¿cómo haces que se mueva en una dirección no alineada con el eje XYZ del mundo?

La razón principal por la que los juegos usan quaternions es porque representan rotaciones casi tan eficientemente en el espacio como los ángulos de Euler, sin sufrir el bloqueo Gimbal . El bloqueo de cardán comienza cuando cualquier ángulo de Euler alcanza una rotación de 90 grados alrededor de cualquier eje: inmediatamente pierde un grado de libertad. Los cuaterniones abordan este problema agregando una cuarta dimensión. Si te quedaste con los ángulos de Euler, tendrías que restringir un eje para que nunca gire más de ~ 89 grados.

Si vas a programar las matemáticas para las respuestas de física en un juego, entonces tomar una clase de física no hubiera sido una mala idea.

Razones por las que necesitará conocer ecuaciones físicas:

  1. Hacer rebotar una pelota (ver: coeficiente de restitución)
  2. Haz que una pelota se mueva en una dirección con 'x' newtons de fuerza
  3. Haga que algo tenga más o menos fricción para que se deslice a una velocidad diferente
  4. Respuestas de colisión: ¿en qué dirección rotará el objeto cuando lo golpee 'aquí'?

Si usa un motor de física (o un motor de juego que tiene el motor de física incorporado), entonces puede evitar saber muy poco sobre física. Aún así, es bastante bueno saber cuándo necesita ensuciarse las manos porque el motor de física no funciona correctamente.

Brock Woolf
fuente
1
Para la física, los artículos de Chris Hecker sobre la dinámica del cuerpo rígido, incluida la respuesta a la colisión y la restitución, son maravillosos: chrishecker.com/Rigid_Body_Dynamics
tenpn
25
¿Mencionaste cuaterniones pero no matrices de transformación?
Andrew Russell
8
"El bloqueo Gimble [sic] es ese efecto en el que cuando mueves el mouse para mirar hacia abajo, se detendrá cuando miras directamente hacia abajo ..." En realidad, eso generalmente se hace para la cordura del jugador, y no tiene nada que ver con el bloqueo del cardán.
44
Me sorprende la frecuencia con la que los cuaterniones están vinculados al bloqueo de gimble. He escrito juegos en 3D sin cuaterniones y nunca tuve un problema de bloqueo de gimble. Si realmente entiende las matemáticas 3D y sabe qué es realmente un candado de gimble, entonces no tendrá ese problema.
Skizz
77
El bloqueo del cardán en realidad es causado por una rotación ingenua con ángulos de Euler (comúnmente ángulos de Tait-Bryan: guiñada, cabeceo, balanceo). Las representaciones alternativas como Axis-Angle también se pueden usar para evitar que ocurra. Sin embargo, los cuaterniones tienen el beneficio de una fácil interpolación, y generalmente se prefieren por esa razón.
Jason Kozak
51

Sueño con el día en que el desarrollo del juego sea tan impulsado por los datos como la producción artística. No lo veo en ninguna parte del horizonte, así que por ahora saber algo de matemáticas parece ser una necesidad.

La matemática es como la técnica, cuanto más mejor, siempre que pueda aplicarla.

Aquí está el orden de importancia que veo.

  • Aritmética
  • Álgebra Lineal (con interpretaciones geométricas)
  • Cálculo (física)
  • Combinatoria (niveles aleatorios)
  • Probabilidad (equilibrio)
  • Estadísticas (especialmente bayesiano para IA)

Podría seguir adelante. Cuanto más sepa, mejor, pero aprender un montón de matemáticas no significa que va a hacer un gran juego, pero puede ayudar.

Jonathan Fischoff
fuente
44
El cálculo es un campo enorme. Probablemente solo se necesita una pequeña cantidad para el desarrollo del juego.
Noldorin
2
@Noldorin sí. En la mayoría de las situaciones, comprender la relación entre la derivada, la aceleración, la velocidad y la posición podría ser suficiente ... pero el cálculo es asombroso.
Jonathan Fischoff el
Las IA bayesianas tienden a no utilizarse para los juegos debido al uso de memoria comparativamente grande, la pobre capacidad de depuración y previsibilidad, y un espacio de problemas bien definido. Una buena implementación de búsqueda clásica con heurística inteligente suele ser (pero no siempre) una mejor herramienta.
1
Para mí, no es un algoritmo bayesiano particular lo que me parece importante, sino entender el proceso de razonamiento tal como lo propuso ET Jaynes. No creo que haya algo inherentemente lento sobre el razonamiento bayesiano.
Jonathan Fischoff
1
Las estadísticas son maravillosas cuando estás desarrollando una IA, o simplemente desarrollando un juego de gestión / magnate. Por otro lado, no estoy familiarizado con el cálculo en absoluto. Yo diría que las estadísticas y la probabilidad son esencialmente lo mismo para fines de aprendizaje, ya que el campo de las estadísticas proviene del trabajo sobre la probabilidad. Es muy subjetivo.
Rushyo
25

Uno muy básico es el teorema de Pitágoras. También conocida como la fórmula de la distancia.

a ^ 2 + b ^ 2 = c ^ 2donde ay bson los bordes de un triángulo rectángulo y ces la hipotenusa. Esto significa que para encontrar la longitud de un vector, debe hacer esto:

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

Otra nota de interés es que si solo está comparando distancias, no tiene que sacar la raíz cuadrada (que puede ser relativamente costoso). Es por eso que la mayoría de los marcos tienen una función de "distancia al cuadrado" o "longitud al cuadrado" para sus vectores.

Tetrad
fuente
1
Estoy bastante seguro de que he leído esto en otro lugar en este sitio antes :)
Ricket
Claro, esta publicación se inspiró en ese hilo / comentario.
Tetrad
Estoy recibiendo un déjà vu aquí ... :)
mmyers
2
Más generalmente, la longitud de un vector es la raíz cuadrada del producto escalar consigo mismo. Entonces, sqrt(V dot V)es su longitud. Entonces, la distancia entre dos puntos es:sqrt((A-B) dot (A-B))
greyfade
También es genial entenderlo en el contexto de la identidad trigonométrica sin² (x) + cos² (x) = 1.
19
  • Vectores tanto en 3D como en 4D, y en qué se debe configurar el componente W
  • Sistemas de coordenadas izquierdo y derecho, y cuál es tu juego
  • El producto punto y para qué sirve
  • El producto cruzado y para qué sirve
  • Matrices, cómo representan la orientación y la posición y cómo puedes combinarlas
  • Cuaterniones

Incluso si no eres The Graphics Guy, vas a usar vectores y matemáticas de vectores el 80% del tiempo. Son las cebollas de nuestra divertida boloñesa.

tenpn
fuente
44
Esta no es una mala lista, pero esperaba una respuesta más descriptiva. Es decir, qué es la fórmula del producto de puntos, qué significa y cómo es útil.
Tetrad
3
@Tetrad ¿Wikipedia no te da eso? en.wikipedia.org/wiki/Dot_product#Definition .
Jonathan Fischoff
1
No para juegos específicamente, no.
Tetrad
55
Lo hace. Te dice que el producto escalar es el coseno del ángulo. Eso es todo lo que necesita saber (y puede saber), ya que la aplicación todavía depende de para qué quiere usarla. Orientación AI? Necesitas el ángulo, entonces el punto es tu amigo. ¿Renderizando luz? Necesitas el ángulo. Todo lo que se puede decir es que (producto de puntos en este caso) define el coseno del ángulo multiplicado por la longitud del vector a, multiplicado por la longitud del vector b. Ese es el conocimiento que se puede dar. Qué parte usar y cómo no se puede decir, ya que las aplicaciones son infinitas.
Kaj
10

Una sólida comprensión de +, -, *, y /. Sin ellos, estás completamente jodido.

El pato comunista
fuente
12
Creo que todos podemos estar de acuerdo en que esto no es lo que estaba haciendo la pregunta. (también olvidaste%).
coderanger
2
Otras respuestas se votaron por esto (aritmética básica) ...
RCIX
77
No solo la aritmética básica, sino que comprende cómo funcionan todas las operaciones en entornos de dos puntos flotantes, de complemento fijo y de IEEE. Sin una comprensión firme de por qué 0.1 * 3! = 0.3, o por qué -x podría no ser lo que espera, está jodido.
1
@ user744 Estoy realmente jodido, ¿qué es esta brujería?
Neon Warge
9

Sí, la programación de juegos tiende a ser bastante matemática. Las matemáticas que necesita dependen de en qué esté trabajando. La aritmética básica es imprescindible, por supuesto, tal como lo es en toda la programación. Más allá de eso:

La geometría es vital para cualquier trabajo gráfico. Si desea mostrar cosas en la pantalla, debe comprender los sistemas de coordenadas. Y si desea moverlos en cualquier cosa que no sean las direcciones cardinales, se perderá por completo sin una comprensión sólida de los senos, cosenos y vectores (trigonometría básica). Y si necesita trabajar en 3D, los requisitos de geometría y trigonométricos se vuelven mucho más complicados.

Si quieres modelar cualquier tipo de física remotamente realista, necesitas cálculo para eso. (Es lo que llevó a Newton a inventar cálculo, después de todo).

Cualquier tipo de cálculo de probabilidad requiere conocimiento de estadísticas y teoría de probabilidad para obtener resultados sanos sin cantidades increíbles de prueba y error.

Probablemente hay mucho más, pero eso es lo que me viene a la mente justo en la parte superior de mi cabeza.

Mason Wheeler
fuente
Recuerdo cuando mi hermano pequeño intentó hacer un juego de Bang-Bang como un proyecto para su clase de VB en la escuela secundaria. Tenía todo resuelto, excepto que no tenía idea de cómo hacer que las balas de cañón vuelen en un arco basado en el ángulo y la potencia, porque todavía no había tomado el Trig 1. Después de explicar los conceptos básicos, funcionó bien.
Mason Wheeler
No se necesita Trig para el arco, solo úsalo s=u.t + a.t.t/2. Sin embargo, necesita trigonométrico para obtener la velocidad inicial (u).
Skizz
¿Por qué no es esto más alto? La mitad de los programadores con los que he trabajado no pueden usar senos y cosenos para la vida de ellos.
zaratustra
@Skizz: Sí. Necesita trigonometría para convertir un ángulo y una potencia en un vector inicial. Después de eso, solo necesita un bucle de animación y una constante gravitacional.
Mason Wheeler
9

Por lo menos lo necesitarás.

  • Álgebra
  • Geometría básica
  • Trigonometría Básica

También querrá tener al menos un conocimiento práctico de las operaciones de Vector, y querrá saber qué es una matriz y para qué se puede usar, aunque los detalles no serán estrictamente necesarios.

Si desea entrar en la programación de gráficos, necesitará mucho más conocimiento matemático, pero hacer programación general de juegos no tiene que ser tan intensivo en matemáticas.

jessecurry
fuente
9

Sistemas de numeración binarios y hexadecimales , y cómo convertirlos a / desde números decimales.

Aunque generalmente no necesitará trabajar con números binarios sin formato, se usan con frecuencia para variables de indicador, que requieren lógica booleana y desplazamiento de bits.

Hex no es tan importante (a menos que desee procesar 0xDEADBEEF ), pero como mínimo, desearía reconocer cuándo se están utilizando y por qué.

Cyclops
fuente
1
Si no puede leer hexadecimal, no puede programar efectivamente. La mayoría de las constantes bit a bit en C y C ++ se especificarán como valores hexadecimales.
Creo que tienes Booleany binaryconfundido. No estoy seguro de que sean absolutamente necesarios para la programación del juego.
Skizz
@Skizz, buen punto - arreglado. (Y otro punto menor, es un wiki ; nada te impide cambiarlo. :)
Cyclops
Si no puede leer hexadecimal, utilice una herramienta para convertirlo por usted.
Thomas Eding
6

¿No se mencionan las matemáticas fundamentales de la programación de computadoras? La teoría de grafos, la teoría de números, la teoría de conjuntos y las matemáticas concretas, generalmente todas agrupadas en una clase dolorosa y mal enseñada llamada "matemáticas discretas" en la universidad.

Los "trucos de bits estúpidos" ahorran todo tipo de tiempo de programa (y también suelen ser equivalentes a algunos trucos de cuerda y juegos de trucos), los tipos de gráficos y los recorridos se utilizan por todas partes (incluso si solo está seleccionando contenedores STL), y la complejidad algorítmica es clave para la optimización a medida que los idiomas llegan a niveles más altos.

usuario744
fuente
5

Creo que la matriz de pagos es una herramienta bastante esencial. Los juegos a menudo son más divertidos cuando se acercan a un interesante equilibrio de juego limpio de suma cero, y las matrices de pagos le ayudan a cuantificar eso en casos complicados. Supongo que este artículo de Wikipedia es tan bueno como cualquier otro, y tiene el concepto básico necesario en: http://en.wikipedia.org/wiki/Normal-form_game

Kzqai
fuente
Esto me parece extremadamente poco práctico. ¿Crees que Starcraft o Warcraft 3 se equilibraron usando un método como este? No lo creo, creo que fue iteración y pruebas de juego, y parches constantes.
bobobobo
Uh, casi seguramente lo fueron, los ejércitos de warcraft iniciales fueron duplicados modificados entre sí que probablemente fueron creados con matrices de pago diseñadas para equilibrarlas en general. Después de eso, es posible que simplemente hayan construido sobre lo que aprendieron para ajustar las cosas, pero probablemente tuvieron que hacerlo nuevamente con Starcraft para obtener un nivel razonable de equilibrio ahora que estaban involucrados tres ejércitos diferentes, y nuevamente cuando se agregaron unidades Starcraft II. Obviamente, no se detiene simplemente en el modelo, las pruebas de juego a menudo muestran propiedades emergentes, sino que una matriz de pagos es cómo modela inicialmente la complejidad.
Kzqai
[cita requerida]?
bobobobo
1
Fue esto: amazon.com/Game-Architecture-Design-New-Edition/dp/0735713634/… Deseo que la versión de Amazon permita la búsqueda dentro del libro, porque podría ser una gran cosa para hacer referencia en bits para este sitio. Aunque tal vez la búsqueda en el libro de Amazon no funciona de esa manera. De todos modos, ahí es donde revisaron las matrices de pagos, usando warcraft como ejemplo, y la ventaja de manejar la complejidad fue tan clara que me convirtió en un convertidor instantáneo. Eso no es garantía de que Blizzard utiliza realmente ese enfoque, pero son chicos inteligentes, por lo que probablemente tenía una solución matemática ...
Kzqai
... al menos para poder entender el equilibrio de un vistazo. Obviamente, también desea agregar pruebas a eso. De hecho, compré el libro con la fuerza de un folleto más pequeño y recortado que tenía un contenido increíble relacionado con el juego, incluida la discusión de la matriz de pagos y las relaciones piedra-papel-tijera y todo tipo de cosas geniales, y me decepcionó encontrar que el final book es un tomo, y se ocupa mucho de la programación en C ++ (que no es lo mío), así como de los problemas de gestión de títulos de AAA. Sin embargo, todo en el folleto recortado fue genial.
Kzqai
4

Comprenda el producto escalar: si dos vectores tienen aproximadamente la misma dirección (theta <90 grados), entonces el producto escalar es positivo o negativo. Se puede usar para probar siempre que el jugador esté a la vista (suponiendo que el FOV sea de 90 grados).

Y generaliza tu juego 2D a dimensiones más altas. (usar cálculos vectoriales)

Si puede implementar un motor 3D usted mismo, está listo para comenzar.

Ming-Tang
fuente
4

Depende de lo que estés haciendo .

Todos los programadores de juegos deben conocer al menos el álgebra de la escuela secundaria. Eso significa:

  • Un buen sentido de los números.
  • Comodidad con las matemáticas básicas (sumar, sub, mult, dividir)
  • Trigonometría (pecado y cos)
  • Vectores, ángulo entre vectores, producto puntual, producto cruzado

Sus programadores gráficos deben saber:

Sus programadores de física deben saber:

  • Todo lo anterior y
  • Ecuaciones diferenciales
  • Métodos numéricos
bobobobo
fuente
3

Además de senos y cosenos (que el 50-75% de los programadores que he conocido no sabían cómo usarlos), aprenda la función mágica del arco iris y cómo se puede usar para obtener el ángulo de cualquier vector.

zaratustra
fuente
55
en la mayoría de los casos, atan2ya que esto se encarga del manejo del cuadrante por sí mismo.
CodesInChaos
0

Me sorprende que nadie haya mencionado Quaternions . No tengo mucha experiencia con diferentes motores, pero al menos JME lo usa en todas partes y tuve la impresión de que son un concepto bastante importante.

Raoul
fuente
2
Er, mencioné los cuaterniones.
Tenpn
Ahh, lo siento, me lo perdí.
Raoul
3
Para el 1% de los programadores de juegos que escriben código de animación de bajo nivel en el motor de representación, los cuaterniones son una herramienta útil. Para el otro 99% de los programadores de juegos, no son realmente necesarios.
Skizz
-1

Hacer juegos se trata de llevar la vida "real" a la realidad virtual. Es mejor saber más sobre el mundo real / universo que menos :). La matemática es solo una herramienta. Y si está haciendo un plan, también debe dedicar tiempo para estudiar en los planes.

EDITADO: Vi algunos malentendidos :) .. Creo que ese conjunto de adquisiciones de matemáticas que necesita gobernar depende de cosas concretas que desea describir. Nadie lo sabe todo. Y la mejor manera de hacerlo es. No para aprender todo al principio, sino para aprender poco, usar, aprender, usar, etc. Luego, puede hacerlo durante el desarrollo, si tiene un buen plan.

samboush
fuente
1
¿Cuánta vida real hay en tetris?
Tenpn
Un montón de :). Tetris trata sobre el pensamiento lógico bajo presión. Como otros juegos lógicos. Se trata de practicar. Más práctica, más presión puedes manejar y aún así divertirte. Me parece la vida real
:)
3
no tiene sentido cuando no aborda la pregunta de manera justa.
Heath Hunnicutt
@Heath Hunnicutt, tienes razón.
samboush
3
Realmente respeto esa respuesta.
Heath Hunnicutt
-2

Respuesta simple: MUCHO!

Respuesta detallada:

¡Álgebra aritmética, elemental y lineal, en la mayoría de los casos Trig, si estás haciendo un juego en 3D, DEFINITIVAMENTE cálculo y física (¡la física requiere cálculo)!

Darius Goad
fuente
3
¿Puedes aclarar un poco la lista? ¿Estás diciendo "Disparar si estás haciendo un juego en 3D" o "Si estás haciendo un juego en 3D, DEFINITIVAMENTE cálculo"?
yoozer8