|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Помогите с математикой (стрельба из пушки)
задача простая:
стоит пушка, ствол под определенным углом к горизонту.. выбераем силу выстрела.. (как в игрушке с 2я башнями).. предположим что по оси Х сопротивления нет.. есть только сила тяжести.. как сделать нормальный полет снаряда? простыми +\- у меня выходит полная фигня.. думаю тут нужно применить SIN , COS.. но что именно не как не разбирусь.. и полет снаряда получается какой то дискретный.. как сделать плавный полет? Мои жалкие попытки: ball._x = ball._x + eval("castle"+current).ang0._rotation; ball._y = ball._y - sila; sila = sila - 1;
__________________
WebInside.RU Последний раз редактировалось evgenz; 30.09.2005 в 00:29. |
|
|||||
Тут на сколько я понимаю рисуется парабола...
Так вот вопрос как нарисовать параболу правильно.. когда пушка под углом 45, 30, 10 итд.. пушка же движется... и еще выберается сила выстрела..
__________________
WebInside.RU |
|
|||||
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
|
Тогда бери полную версию с учетом сопротивления воздуха
// скорость u0 = 20; // ускорение свободного падения g = .98; // угол стрельбы a = 40; // сопротивление воздуха k = 0.01; // this.lineStyle (0, 0xFF0000); this.onEnterFrame = function () { t++; z = (1 - Math.pow (Math.E, -k * t)) / k; x = u0 * Math.cos (a * Math.PI / 180) * z; y = (u0 * Math.sin (a * Math.PI / 180) + g / k) * z - g * t / k; if (y < 0) { delete this.onEnterFrame; } if (t == 1) { this.moveTo (x, -y); } else { this.lineTo (x, -y); } }; |
|
|||||
Примного благадарен! То что надо!
__________________
WebInside.RU |
|
|||||
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
у меня в древних уроках описан простой принцип разделения траекторий на составляющие.
там и математику-то знать не надо. например, дано : угол поворота angle начальная скорость speed сила притяжения gravitation если выстрелить без гравитации, то снаряд улетит по прямой под углом angle. стреляем: this.baBahhhh = function (angle, speed) { var angle_rad = angle*(Math.PI/180) // раскладываем по осям: var xspeed = Math.cos(angle)*speed var yspeed = Math.sin(angle)*speed this.shell_mc.onEnterFrame = function () { this._x+=xspeed this._y+=yspeed } } - улетел снарядик по прямой без гравитации вторая составляющая- гравитация, ее добавить просто: this.baBahhhh = function (angle, speed) { // added var gravity = 1 var angle_rad = angle*(Math.PI/180) var xspeed = Math.cos(angle)*speed var yspeed = Math.sin(angle)*speed this.shell_mc.onEnterFrame = function () { this._x+=xspeed this._y+=yspeed // added this._y+=gravity } } можно добавить и сопротивление среды (можно и четверга, но не нужно, хехе), оно будет влиять на скорость: this.baBahhhh = function (angle, speed) { var gravity = 1 // added var friction = .99 var angle_rad = angle*(Math.PI/180) this.shell_mc.onEnterFrame = function () { // added speed*= friction // moved var xspeed = Math.cos(angle)*speed var yspeed = Math.sin(angle)*speed this._x+=xspeed this._y+=yspeed this._y+=gravity } } - вот так раскладывая на составляющие очень просто и легко сделать любую траекторию и управлять ею. но самое главное - понимать, что делаешь... - скрипт я не тестил, писал прям тут, так что возможны ашипки. |
|
|||||
angle, speed, gravity - константы
var yspeed = Math.sin(angle)*speed => yspeed тоже константа... this._y+=gravity - тоже константа... ... не думаю что это работает...
__________________
WebInside.RU |
|
|||||
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
в программировании думать не надо.
сиди, да программируй. а когда начинаешь думать, начинается ботва типа той, что ты написал. ты просто попробуй... |
|
|||||
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
Stage.align = "TL";
this.baBahhhh = function(angle, speed) { var gravity = .5; var friction = .98; var angle_rad = angle*(Math.PI/180); var xspeed = Math.cos(angle_rad)*speed; var yspeed = Math.sin(angle_rad)*speed; this.shell_mc.onEnterFrame = function() { this._x += xspeed*friction; this._y += yspeed *= friction; yspeed += gravity; }; }; this.onMouseUp = function() { this.baBahhhh(-60, 20); }; - протестированный рабочий пример. только одно изменение: гравитация влияет на скорость по y а не на позицию объекта. Последний раз редактировалось BitSky; 30.09.2005 в 17:51. |
|
|||||
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
вот с отрисовкой пути:
Stage.align = "TL"; this.baBahhhh = function(angle, speed) { var start_y = this.shell_mc._y; var start_x = this.shell_mc._x; var gravity = .5; var friction = .98; var angle_rad = angle*(Math.PI/180); var xspeed = Math.cos(angle_rad)*speed; var yspeed = Math.sin(angle_rad)*speed; this.clear() this.lineStyle(0,0,100) this.moveTo(this.shell_mc._x, this.shell_mc._y) this.shell_mc.onEnterFrame = function() { this._x += xspeed*friction; this._y += yspeed *= friction; yspeed += gravity; this._parent.lineTo(this._x, this._y) if (this._y>start_y) { this._y = start_y; this._x = start_x; delete this.onEnterFrame; this._parent.onMouseUp() } }; }; this.onMouseUp = function() { this.baBahhhh(-1*random(90), 20+random(10)); }; |
Часовой пояс GMT +4, время: 20:35. |
|
« Предыдущая тема | Следующая тема » |
|
|