Просмотр полной версии : Вычисление начальной скорости
Привет!
Помогите решить задачку. Постараюсь растолковать подробно.
У меня есть объект. Ему придается начальная скорость по Х. Эта скорость с каждым кадром затухает, т.е. умножается на коэффициент 0.96. Вопрос в том, как мне лучше вычислить стартовую скорость объекта, чтобы он через определенное кол-во кадров очутился на определенном расстоянии?
Теперь то же самое конкретнее на примере: Есть объект._х == 0, у объекта есть скорость по Х. Есть ф-ция, которая добавляет к позиции объекта скорость и гасит скорость, умножая ее на коэффициент 0.96. Как проще всего вычислить начальную скорость для этого объекта, чтобы через 50 кадров (т.е. через 50 выполнений функции, которая добавляет к позиции объекта скорость и затухает ее) позиция объекта по Х стала, скажем, 300 ?
Надеюсь, доходчиво.
Спасибо.
А не проще xCurrent+=(xTarget-xCurrent)/кол-во кадров?
Мне нужно вычислить начальную скорость для объекта, а не перемещать его. Это для AI, чтобы комп мог рассчитать силу, с которой надо бросить предмет на определенное расстояние.
Stargazer
19.03.2009, 20:37
Можно воспользоваться формулами движения. Либо взять из школьной физики (или математики), либо придумать самому.
В общем: путь является интегралом от скорости. Вы можете вывести нужную вам формулу и запрограммировать вычисление нужных значений исходя из неё.
Можно просто начинать считать с конца. Взять конечную точку (какая, кстати там будет скорость?) и пошагово вычислять положение объекта от конца к началу прибавляя скорость. При таком подходе будет присутствовать некоторая погрешность (в том случае, если движение объекта не уложится в целое число шагов).
Да, я уже разобрался. Натуральный логарифм помогает в данном случае.
Такая формула у меня работает: <нач.скорость> = (<расстояние> * Math.log (<коэф. затухания>)) / (<коэф. затухания-в-степени-равной-колву-кадров> - 1)
Stargazer
19.03.2009, 22:32
Отличная догадка. :)
Неожиданное простое по реализации решение.
Совсем в школе не учились? 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, не та формула.
Это для равноускоренного движения. А у автора затухание зависит от скорости (теоретически, скорость никогда не сведётся к нулю).
:) У меня 0.96 - это не ускорение, а коэффициент. Скорость на него умножается.
А почему у Вас начальная скорость отрицательная, если начальное положение 0, а конечное - 300?
У меня 0.96 - это не ускорение, а коэффициент. Скорость на него умножается.Ну, как хотите. Хотя странно.
А почему у Вас начальная скорость отрицательная, если начальное положение 0, а конечное - 300?Это не у меня, а у формулы :) Какие данные дали, такие результаты и получились. и ничего удивительного в этом нет.
cleptoman
20.03.2009, 01:03
формула равноускоренного движения
насколько помню 7-8 класс.))..эх..были времена.)
формула равноускоренного движения
насколько помню 7-8 класс.))..эх..были времена.)
Эмм. Это не равноускоренное/равнозамедленное движение. Это логарифмически-замедленное движение. Здесь скорость ассимптотически приближается к нулю. И никогда объект не изменит вектор скорости на противоположный, как это бы произошло при равнозамедленном движении.
=) Коэффициент при скорости "<1" => движение равно замедленное... Физика читаем про ускорение физика 7 класс!
alexcon314
20.03.2009, 13:47
Скорее, речь идет вот об этом. Экспоненциальное затухание. В 7-8 классе такого не проходят).
http://mdm-zinc.narod.ru/img/exp.PNG
Ну пока автор не уточнит что именно он имел в виду... ничего не будет ясно !:cool:
Автор изложил все достаточно четко и давно нашел решение, о чем и сообщил. А alexcon314 прав.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.