Какая математика нужна для игры на лунном корабле? - PullRequest
12 голосов
/ 25 июня 2010

Я бы хотел создать игру для изучения cocos2d. Lunar lander - первое упражнение, которое приходит мне в голову. Любой указатель / исходный код / ​​руководство по физическим расчетам будет оценено. Спасибо!

Ответы [ 6 ]

9 голосов
/ 25 июня 2010

Вам понадобятся такие вещи:

  1. Законы движения Ньютона в 2D.
  2. Возможность изменять эффект гравитации.9,8 м / с ^ 2 - это правильное ускорение на Земле, но вы должны иметь возможность изменить его на соответствующее значение для Марса, Луны, Юпитера и т. Д.
  3. Возможность выключать и включать двигатели, чтобы противодействоватьэффект гравитации.Не очень интересная игра, если вы этого не сделаете, потому что каждый заканчивается катастрофой.
  4. Способ связать продолжительность огня двигателя с расходом топлива.Если вы плохо разбираетесь с топливом, вы попадаете в аварию.
  5. Начальные условия (например, высота над поверхностью, начальная скорость, начальное топливо и т. Д.)

Вы начнете с начальнойусловия и цикл на несколько временных шагов.В конце каждого шага вы будете проверять положение и скорость.Если у-позиция над поверхностью равна нулю или отрицательна, вы приземлились.Если скорость больше, чем критическое значение y, у вас будет сбой;меньше критического значения означает безопасную, мягкую посадку.

Вы будете численно решать уравнения движения Ньютона.В вашем случае это четыре связанных обыкновенных дифференциальных уравнения первого порядка: скорость изменения скорости в направлениях x и y и скорость изменения положения в направлениях x и y.Если у вас есть двигатели на месте, вы добавите еще одно уравнение для сохранения массы для топлива.

Вы можете исключить два уравнения, если предположите, что нет x-компонентов: лунный аппарат перемещается перпендикулярно поверхности, сила движителя имеет только ненулевой компонент в вертикальном направлении.Если это правда, вы дошли до трех уравнений.

Вы сделаете шаг по времени, поэтому будет полезно прочитать методы интеграции, такие как явный Эйлер или неявный Рунге-Кутта 5-го порядка.

Сложная проблема - не тривиальная.Удачи.

6 голосов
/ 25 июня 2010

Математика, которая вам нужна для игры на лунном корабле, довольно проста. Законы движения Ньютона - это все, что вам действительно нужно - просто возьмите базовый учебник по физике.Вы должны быть установлены после первой главы.В системе есть только два входа силы - сила тяжести и тяга от двигателей.Просто рассчитайте вертикальные и горизонтальные составляющие движения и соответственно оживите ваш космический корабль.

4 голосов
/ 25 июня 2010

Физика очень проста: http://csep10.phys.utk.edu/astr161/lect/history/newtongrav.html

Полагаю, вы не будете беспокоиться о сопротивлении или ветре, поэтому в зависимости от ваших углов наклона (пользовательский ввод) вы будете реализовывать:

alt text

Источник: http://en.wikipedia.org/wiki/Trajectory. Возможно, вам даже удастся упростить его. Если вы не хотите быть сверхточным, вы можете просто сделать что-то вроде F=ma, где есть то, что вы считаете гравитационным ускорением (9,8 м / с² на Земле).

1 голос
/ 26 июня 2010

Это может быть излишним, но я рекомендую посмотреть Числовые рецепты - прочитайте главу об обыкновенных дифференциальных уравнениях.Вам даже не нужно изучать всю главу;только первая пара разделов.

1 голос
/ 25 июня 2010

Если ваша игра в 2D, вам не нужно много математики, вам нужна физика, особенно базовое ньютоновское движение. Вероятно, вступительный колледж или поздняя средняя школа. Математика - это некоторая алгебра начальной школы с начальным исчислением средней школы.

Если вы посмотрите на движение вверх-вниз, то ваш корабль по сути является объектом, который подвергается воздействию силы тяжести (константа зависит от вашей «луны»), которая нейтрализуется силой, излучаемой его двигателями. Вы можете использовать это, чтобы определить ускорение и оттуда скорость. Используя скорость, вы можете сделать свой результат столкновения. Движение влево и вправо легче, поскольку, если ваша луна не имеет атмосферы, вы просто прикладываете постоянную силу.

Если вы хотите что-то более реалистичное, вы можете изменить гравитационную константу, основанную на расстоянии от поверхности, и добавить силу атмосферного трения (хотя это не будет наша Луна).

Если ваша игра в 3D, и ваш корабль имеет боковые двигатели в дополнение к нижним, то у вас будет не только движение по локации, но и вращение. Это связано с физикой твердого тела. AFAIK, который включает исчисление уровня колледжа.

0 голосов
/ 26 июня 2010

В двух измерениях, при каждом тике, вы хотите добавить вращательную тягу корабля к его скорости вращения, прибавить скорость вращения к его текущему курсу, вычислить вектор тяги, умножив синус и косинус его курса на его основное движущее устройство Выведите, добавьте этот вектор и вектор гравитации (прямой нисходящий вектор некоторой величины) к его текущей скорости, и добавьте его текущую скорость к его положению. Если отметки таймера достаточно малы, это почти все, что вам нужно сделать, кроме проверки того, находится ли судно в контакте с землей. Экспериментируйте с величиной силы тяги и гравитации, пока не получите играбельную игру.

...