Стрельба снарядами с учетом угла и мощности - PullRequest
0 голосов
/ 31 декабря 2011

Я делаю игру-прототип, такую ​​как Worms , и я хотел бы не только выстрелить, но и увидеть всю кривую проекции , где мой выстрел пройдет до того, как он упадет на землю , Единственная информация, которую дает игрок, это угол и сила. Есть также некоторые элементы уровня, такие как ветер и гравитация.

Могу ли я получить код для кривой проекции? Я думаю, это похоже на параболу. Я изучаю параболу, но мне было сложно применить эти математические формулы в программном коде.

Спасибо.

1 Ответ

4 голосов
/ 31 декабря 2011

Математическая (и физическая) часть

Так что это похоже на физику 10-го класса для меня.

Путь, пройденный снарядом, - (как вы сказали) парбола, описываемая уравнением

Projectile differential equation

Теперь, если вы решите это уравнение, вы получите следующие параметры:

Диапазон: Range of projectile

Высота: Height of projectile

(vi = начальная скорость, тета i = начальный угол съемки относительно горизонтали)

А уравнение в (x, y) для параболического пути будет

Prabola path equation

(v0 = начальная скорость, тета = угол обжига)

Программная часть

при условии следующих констант:

const g:Number = 9.81; //9.81 m/s, the grav const

Функция sin доступна как Math.sin

Функция питания доступна как Math.pow. Это означает, что синусоидальный квадрат будет

Math.pow(Math.sin(theta), 2)

Вы могли бы написать функцию диапазона как

function projectileRange(vel:Number, angle:Number):Number {
    var vsquare:Number = vel * vel;
    var rv:Number = vsquare * Math.sin(2 * angle) / g;
    return rv;
}

и функция высоты как

function projectileHeight(vel:Number, angle:Number):Number {
    var vsquare:Number = vel * vel;
    var rv:Number = vsquare * Math.pow(Math.sin(angle), 2) / (2 * g);
    return rv;
}

и функция yPosition как

function yPosition(xPos:Number, vel:Number, angle:Number):Number {
    return xPos * Math.tan(angle) - (g * xPos * xPos / (2 * vel * vel * Math.cos(angle) * Math.cos(angle)));
}

Обратите внимание, что углы в радианах

function toRadians(degrees:Number):void {
    return degrees * Math.PI / 180;
}

Для получения дополнительной информации о движении снаряда, google it.

...