Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Вычисление начальной скорости (http://www.flasher.ru/forum/showthread.php?t=122853)

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

Код AS1/AS2:

Проверяем
//// ускорение
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?
Это не у меня, а у формулы :) Какие данные дали, такие результаты и получились. и ничего удивительного в этом нет.


Часовой пояс GMT +4, время: 00:14.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.