Не могу понять математику за квадратичной кривой c, необходимой для рогатки - PullRequest
1 голос
/ 20 апреля 2020

Я хотел бы извиниться, если это слишком основано на математике.

У меня есть проект, в котором я должен создать игру AngryBirds с пользовательским игровым движком нашего учителя, однако я застрял в математике за рогаткой. Нам не разрешено использовать какие-либо стандартные библиотеки. Слева вверху 0, 0, а ось Y увеличивается, когда вы go вниз. Общая ширина окна составляет 1280 пикселей, а высота - 720 пикселей. Я пытаюсь заставить птицу двигаться дальше, когда вы вытягиваете птицу дальше влево от источника стропа, который равен 257, 524. Я использовал значение y с момента выпуска в начале, чтобы птица не go где-то еще в ось у сразу после разрешения go. В настоящее время птица увеличивается по оси Y, что и следовало ожидать, учитывая, что это именно то, что делает мой код. Я создал переменную, определяющую, как далеко от источника рогатки находится птица, когда мыши позволили go, и я хотел бы использовать это значение в расчете скорости. Я не знаю, какие значения использовать в формуле квадратичного c, чтобы птица оставалась на экране. Я попытался проиллюстрировать окно, чтобы сделать его более понятным.

float y = getY() + getX()/10 * getX()/10 * (game_time.delta.count() / 10000.f);
setY(y);

//window illustration
------------------------------------------------------------------------------
| (0, 0)                                                                     |
|                                                                            |
|                                                                            |
|                        o         o                                         |
|                 o                                                          |
|             o                              o                               |
|                                                                            |
|bird-> o\ / (257, 524)                             o                        |
|         |                                                                  |
|_________|______________________________________________________(1280, 720)_|

1 Ответ

1 голос
/ 21 апреля 2020

У вас есть две проблемы:

  • недостаток знаний элементарной физики, связанной с косым выстрелом.
  • Начало координат окна в верхнем левом углу подразумевает левую систему координат.

Для первой части я бы посоветовал вам прочитать статью о физике косого выстрела, например, кинематика движения снаряда .

Вкратце:

  • разделить движение птицы на горизонтальные и вертикальные части:

    • горизонтальная часть - это движение с постоянной скоростью
    • вертикальное движение - это движение, на которое влияет постоянная сила
  • рассчитывает горизонтальные и вертикальные компоненты скорости и положения независимо как функцию времени

  • используйте вычисленную позицию, чтобы нарисовать «птицу»

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

Когда вам действительно нужно «нарисовать» птицу, используйте следующее преобразование для координаты y:

y_draw = window_height - y_calculated;

Не забудьте добавить соответствующие смещения для x и y, чтобы компенсировать Дело в том, что происхождение исчисления отличается от положения рогатки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...