Какую математику должны знать все программисты? [закрыто]
Достаточно простой вопрос: Какую математику должны иметь все игровые программисты, чтобы добиться успеха?
Я не говорю конкретно о рендеринге математики или о чем-либо в нишевых областях игрового программирования, а конкретно о том, что даже программисты должны знать о них, и если они этого не сделают, они, вероятно, найдут это полезным.
Примечание: , так как есть не один правильный ответ , этот вопрос (и его ответы) является вики-сообществом.
Кроме того, если вы хотите фантастические математические уравнения латекса, не стесняйтесь использовать http://mathurl.com/.
16 ответов
Существуют many другие формы математики, которые полезны, но при абсолютном минимуме вам нужно знать следующее:
- Алгебра и арифметика
Это довольно простые, но если вы этого не знаете, у вас не будет шанса даже стать программистом, не говоря уже о разработчике игр.
Объекты в игровом мире представлены векторами. Вектор представляет такие вещи, как позиция объекта, направление взгляда и скорость. Математические вычисления, такие как Dot Product , Cross Product , а также нормализация вектора.
Как перенести свой игровой объект? Новичок может сказать:
«Я знаю, я просто сделаю:« object.position.x++
.
Нет, нет. Вам нужно использовать векторный расчет. Объекту требуется вектор положения, направления и ускорения, который вы можете использовать для перемещения объекта. Если вы делаете новичков, вы застрянете в неудержимом беспорядке и как вы сделаете движение в направлении, не совпадающем с осью XYZ в мире?
Основной причиной игры являются кватернионы, потому что они представляют собой вращения почти так же эффективно, как и углы Эйлера, не страдая от Gimbal lock . Gimbal Lock начинается, когда любой угол Эйлера достигает поворота на 90 градусов вокруг любой оси: вы сразу теряете степень свободы. Кватернионы решают эту проблему, добавляя четвертое измерение. Если вы застряли с углами Эйлера, вам придется ограничивать одну ось, чтобы никогда не вращаться более чем на 89 градусов.
Если вы собираетесь программировать математику для ответов на физику в игре, то занятие физическим классом не было бы плохой идеей.
Причины, по которым вам понадобятся физические уравнения:
- Создание отскока мяча (см.: Коэффициент реституции)
- Сделать шарик движением в направлении с помощью 'x' newtons силы
- Сделайте что-то более или менее трением, чтобы он скользил с другой скоростью.
- Ответы на столкновения: какое направление будет вращаться, когда я нажму «здесь»?
Если вы используете физический движок (или движок игры, в котором встроен физический движок), вы можете уйти, зная очень мало о физике. Тем не менее, неплохо знать, когда вам нужно загрязнять руки, потому что физический движок работает неправильно.
Я мечтаю о том, что развитие игры - это как данные, созданные как художественное производство. Я не вижу его нигде на горизонте, так что теперь знание какой-то математики представляется необходимостью.
Математика подобна технике, тем лучше, если вы ее примените.
Вот порядок важности, который я вижу.
- Арифметика
- Линейная алгебра (с геометрическими интерпретациями)
- Исчисление (физика)
- Комбинаторика (рандомизированные уровни)
- Вероятность (балансировка)
- Статистика (байесовская версия для AI)
Я мог продолжать идти. Чем больше вы знаете, тем лучше, но изучение кучки математики не означает, что вы сделаете отличную игру, но это может помочь.
Самая простая - это теорема Пифагора. Также известна как формула расстояния.
a ^ 2 + b ^ 2 = c ^ 2 http://mathurl.com/y8ouslw.png где a
и b
- это ребра прямоугольного треугольника и c
является гипотенузой. Это означает, что для того, чтобы найти длину вектора, вы делаете это:
distance = sqrt (a ^ 2 + b ^ 2) http://mathurl.com/2dyhukn.png
Еще одно интересное замечание: если вы просто сравниваете расстояния, вам не нужно принимать квадратный корень (что может быть относительно дорогостоящим). Вот почему большинство фреймворков имеют функцию «квадрат квадрата» или «квадрат длины» для своих векторов.
- Векторы как 3D, так и 4D, а также то, что компонент W должен быть установлен на
- Левая и правая системы координат, а какая ваша игра
- Точечный продукт и что он полезен для
- Перекрестное произведение и то, что оно полезно для
- Матрицы, как они представляют ориентацию и положение, и как вы можете их комбинировать.
- Кватернионы
Даже если вы не The Graphics Guy, вы будете использовать векторы и векторные математические вычисления в 80% случаев. Это лук нашего веселого болоньеза.
Твердая схватка +, -, * и /.
Без них вы полностью ввернуты.
Да, игровое программирование имеет тенденцию быть довольно сложным по математике. Какая математика вам нужна, зависит от того, над чем вы работаете. Основная арифметика - это, конечно же, необходимость, как и во всех программах. Помимо этого:
Геометрия важна для любой графической работы. Если вы хотите отображать информацию на экране, вам необходимо понять системы координат. И если вы хотите переместить их во что угодно, кроме кардинальных направлений, вы будете полностью потеряны без твердого понимания синусов, косинусов и векторов (базовый тригг). И если вам нужно работать в 3D, требования геометрии и триггера усложняются.
Если вы хотите смоделировать любую дистанционно реалистичную физику, для этого вам нужно исчисление. (Это то, что заставило Ньютона изобретать исчисление, после всего.)
Любые вероятностные вычисления требуют знания статистики и теории вероятностей, чтобы получить разумные результаты без безумных сумм проб и ошибок.
Там, вероятно, гораздо больше, но это то, что приходит на ум с моей головы.
По крайней мере, вам понадобится.
- Алгебра
- Основная геометрия
- Основная тригонометрия
Вы также захотите иметь хотя бы рабочее знание операций с Vector, и вы захотите узнать, что такое матрица и для чего ее можно использовать, хотя детали не будут строго необходимы.
Если вы хотите попасть в графическое программирование, вам понадобятся черты гораздо большего математического знания, но выполнение общего программирования геймплея не обязательно должно быть настолько интенсивным в математике.
Двоичный и Hexadecimal , и как их преобразовать в десятичные числа /из десятичных чисел.
Хотя вам обычно не нужно работать с двоичными числами raw , они часто используются для переменных Flag, для которых требуется логическая логика и бит-сдвиг.
Hex не так важен (если вы не хотите обрабатывать 0xDEADBEEF ), но, как минимум, d хотите распознать , когда они используются, и почему.
Нет упоминаний о основополагающих математиках программирования? Теория графов, теория чисел, теория множеств и конкретная математика, как правило, все объединяются в болезненный и плохо обученный класс, называемый «дискретной математикой» в университете.
«Глупые бит-трюки» сохраняют все виды времени программы (и они также обычно эквивалентны некоторым трюкам и набора трюков), типы графов и обходы используются повсюду (даже если вы просто выбираете STL контейнеры), а алгоритмическая сложность является ключом к оптимизации по мере того, как языки достигают более высоких уровней.
Я думаю, что матрица выигрыша - довольно важный инструмент. Игры часто веселее, когда они приближаются к интересному балансу справедливой игры с нулевой суммой, а матрицы выплат помогают вам количественно оценить это в сложных случаях. Я предполагаю, что эта статья в википедии так же хороша, как и любая, и получает основную необходимую концепцию: http://en.wikipedia.org /вики /Нормаль-form_game
Понять точечный продукт: Если два вектора имеют примерно одинаковое направление (theta & deg; 90 deg), то точечный продукт вл етс положительным или отрицательным. Его можно использовать для проверки всякий раз, когда игрок находится в поле зрения (при условии, что FOV - 90 градусов).
И обобщите свою 2D-игру на более высокие размеры. (используйте векторные вычисления)
Если вы можете самостоятельно реализовать 3D-движок, вам хорошо идти.
Это зависит от того, что вы делаете .
Все программисты должны знать, по крайней мере, среднюю школьную алгебру. Это означает:
- Хорошее чувство чисел
- Комфорт с базовой математикой (добавление, под, мульти, разделение)
- Тригонометрия (sin и cos)
- Векторы, угол между векторами, точечный продукт, кросс-произведение
Ваши программисты должны знать:
- Все вышеперечисленное и
- Матричная алгебра (для матриц преобразования)
- Методы пересечения многоугольников /луче-многоугольник (см. книгу Обнаружение конфликтов в режиме реального времени
Ваши программисты должны знать:
- Все вышеперечисленное и
- Дифференциальные уравнения
- Численные методы
Помимо синусов и косинусов (которые 50-75% программистов, которых я встречал, не знали, как их использовать), изучите магическую функцию дуги-загара и как ее можно использовать для получения угла любого вектора.
Я удивлен, что никто не упомянул Quaternions . У меня нет большого опыта работы с разными моделями, но, по крайней мере, JME использует его везде, и у меня сложилось впечатление, что это довольно важная концепция.
Создание игр - это приведение «реальной» жизни в виртуальную реальность. Лучше узнать больше о реальном мире /Вселенной, чем меньше :). Математика - это только инструмент. И если вы составляете план, вы также должны поместить время на учебу в планы.
EDITED: я видел некоторое недоразумение :) .. Я думаю, что набор математических приемов, которые вам нужно править, зависит от конкретных вещей, которые вы хотите описать. Никто не знает все. И лучший способ, как это сделать. Не учиться всему на начальном этапе, но изучать маленький кусочек, использовать, учиться, использовать и т. Д. Затем вы можете сделать это во время разработки, если у вас есть хороший план.
Простой ответ: LOT!
Подробный ответ:
Арифметика, Элементарная & Линейная алгебра, в большинстве случаев Trig, если вы делаете 3D-игру, ОПРЕДЕЛЕННОЕ исчисление и физику (физика требует исчисления)!