PDA

Просмотр полной версии : Вычисление начальной скорости


sinya
19.03.2009, 19:53
Привет!
Помогите решить задачку. Постараюсь растолковать подробно.

У меня есть объект. Ему придается начальная скорость по Х. Эта скорость с каждым кадром затухает, т.е. умножается на коэффициент 0.96. Вопрос в том, как мне лучше вычислить стартовую скорость объекта, чтобы он через определенное кол-во кадров очутился на определенном расстоянии?

Теперь то же самое конкретнее на примере: Есть объект._х == 0, у объекта есть скорость по Х. Есть ф-ция, которая добавляет к позиции объекта скорость и гасит скорость, умножая ее на коэффициент 0.96. Как проще всего вычислить начальную скорость для этого объекта, чтобы через 50 кадров (т.е. через 50 выполнений функции, которая добавляет к позиции объекта скорость и затухает ее) позиция объекта по Х стала, скажем, 300 ?

Надеюсь, доходчиво.
Спасибо.

VVall
19.03.2009, 19:55
А не проще xCurrent+=(xTarget-xCurrent)/кол-во кадров?

sinya
19.03.2009, 20:04
Мне нужно вычислить начальную скорость для объекта, а не перемещать его. Это для AI, чтобы комп мог рассчитать силу, с которой надо бросить предмет на определенное расстояние.

Stargazer
19.03.2009, 20:37
Можно воспользоваться формулами движения. Либо взять из школьной физики (или математики), либо придумать самому.

В общем: путь является интегралом от скорости. Вы можете вывести нужную вам формулу и запрограммировать вычисление нужных значений исходя из неё.

Можно просто начинать считать с конца. Взять конечную точку (какая, кстати там будет скорость?) и пошагово вычислять положение объекта от конца к началу прибавляя скорость. При таком подходе будет присутствовать некоторая погрешность (в том случае, если движение объекта не уложится в целое число шагов).

sinya
19.03.2009, 20:58
Да, я уже разобрался. Натуральный логарифм помогает в данном случае.
Такая формула у меня работает: <нач.скорость> = (<расстояние> * Math.log (<коэф. затухания>)) / (<коэф. затухания-в-степени-равной-колву-кадров> - 1)

Stargazer
19.03.2009, 22:32
Отличная догадка. :)
Неожиданное простое по реализации решение.

iNils
19.03.2009, 23:19
Совсем в школе не учились? 0,96 это ускорение.
Формула такая
xt = x0 + u0 * t + a * t * t / 2;
Значит, начальная скорость будет
u0 = (xt - x0 - a * t * t / 2) / t;
Подставляем значение и вычисляем
u0 = (300 - 0 - 0.96 * 50 * 50 / 2) / 50
u0 = 6 - 0.96 * 25;
u0 = -18

Проверяем
//// ускорение
var a:Number = 0.96;
//// начальная координата
var x0:Number = 0;
//// конечная координата
var x:Number = 300;
//// начальная скорость
var u0:Number = -18;
//// время движения
var time:Number = 50;
for (var t:Number = 1; t <= time; t++) {
var xt:Number = x0 + u0 * t + a * t * t / 2;
trace (xt);
}

Stargazer
19.03.2009, 23:43
iNils, не та формула.
Это для равноускоренного движения. А у автора затухание зависит от скорости (теоретически, скорость никогда не сведётся к нулю).

sinya
19.03.2009, 23:58
:) У меня 0.96 - это не ускорение, а коэффициент. Скорость на него умножается.
А почему у Вас начальная скорость отрицательная, если начальное положение 0, а конечное - 300?

iNils
20.03.2009, 00:03
У меня 0.96 - это не ускорение, а коэффициент. Скорость на него умножается.Ну, как хотите. Хотя странно.
А почему у Вас начальная скорость отрицательная, если начальное положение 0, а конечное - 300?Это не у меня, а у формулы :) Какие данные дали, такие результаты и получились. и ничего удивительного в этом нет.

cleptoman
20.03.2009, 01:03
формула равноускоренного движения
насколько помню 7-8 класс.))..эх..были времена.)

dimarik
20.03.2009, 11:25
формула равноускоренного движения
насколько помню 7-8 класс.))..эх..были времена.)

Эмм. Это не равноускоренное/равнозамедленное движение. Это логарифмически-замедленное движение. Здесь скорость ассимптотически приближается к нулю. И никогда объект не изменит вектор скорости на противоположный, как это бы произошло при равнозамедленном движении.

DiSouL
20.03.2009, 12:17
=) Коэффициент при скорости "<1" => движение равно замедленное... Физика читаем про ускорение физика 7 класс!

alexcon314
20.03.2009, 13:47
Скорее, речь идет вот об этом. Экспоненциальное затухание. В 7-8 классе такого не проходят).
http://mdm-zinc.narod.ru/img/exp.PNG

DiSouL
20.03.2009, 15:06
Ну пока автор не уточнит что именно он имел в виду... ничего не будет ясно !:cool:

sinya
20.03.2009, 15:40
Автор изложил все достаточно четко и давно нашел решение, о чем и сообщил. А alexcon314 прав.