PDA

Просмотр полной версии : Движение частицы под водой


viyer
10.06.2004, 20:54
Сижу, чего то не приходит в голову элегантного решения...

Требуется реализовать примерно такой эффект. Шарик разрывается на множество частиц (пусть, например, тоже шарики)... Они должны разлетаться от центра, как разлетались бы шарики под водой при отсуствии гравитации: резкое движение до полной остановки и зависли в воздухе....

Все это реализуется программно.

отсюда вопрос: какое уравнение движения у этих частиц?

Спасибо, заранее..

silin
10.06.2004, 21:43
вот держи 'резкое движение до полной остановки '
(усорение/замедление тож несложно приделать)
а насчет 'уравнения движения у этих частиц', думаю ты погорячился: не флешовое это дело..

Dindin
10.06.2004, 22:52
http://www.robertpenner.com/easing/easing_demo.html
бесплатные классы можно скачать оттуда же

ЗЫ это про "не флэшовое это дело" :D

silin
10.06.2004, 23:56
ценные вещи,
есть из чего выбрать..( и не надо никакого 'разлета под водой')

viyer
11.06.2004, 00:10
Ок!... Всем спасибо, буду копаться :)...

PS: Конечно я не имел ввиду точного моделирования физики, мне более важно, чтобы это в принципе именно так виделось :)

KomSerg
11.06.2004, 00:53
На счет физики - можно подумать.
ктстаи применял физические формулы во флэше.
ВРоде бы не так вес плохо :-)

можно и в данном случае рассмотреть

например вверх сила Архимеда а виз сила тяжести.

mg-pgV=ma

отсюда искать ускорение например :-)
напрвить его вверх
или наоборт

pgV-mg=ma

тогда вверх :-)


тут важно ФПС делать большой
чтоб не прыгало все !

viyer
11.06.2004, 02:33
Вот!.. О том и речь, что можно ввести физику. Например, равноускоренное падение в этом же ролике у меня выглядит так:


_root.ball._y = y0+vy*time+(g*time*time/2);

Смысл в том, что при движении в жидкости есть зависимость ускорения от скорости. Т.е. шарик как будто в вату падает. Насколько я помню динамику такая формула где то есть, что то вроде "уравнение движения в вязкой среде" или что то подобное... Физическая достоверность мне не нужна, но пока я не могу никак добиться в движении этого ощущения вязкости.... Потому что там зависимость нелинейная и без формул мне кажется это кропотливо будет слишком..

Вот кто бы мне сказал эту формулу :)

KomSerg
11.06.2004, 12:50
Я так сразу и не помню.
Но могу сказать то, что действительно зависимость есть.

Это так называемое вязкое трение.
Там до определенного момента идет зависимость от V а после этого момента от v в квадрате .

Поищи в нете инфу по поводу вязкого трения.
Там должно быть все описано.

justin
17.07.2004, 13:16
Оригинал написал(а) Dindin
http://www.robertpenner.com/easing/easing_demo.html
бесплатные классы можно скачать оттуда же

вроде всё понятно, а ... не получается... :( :( :(
как то же t (current time) и d (duration) рассчитать?
дайте исходник plz

Dindin
17.07.2004, 17:50
Исходник чего? Программной анимации?

justin
17.07.2004, 22:06
не совсем. изменение скорости движения объекта по заданному графику "скорость/время". вот. траекторию можно не трогать (иначе у меня крыша съедет).

по ссылке только конечные функции описаны... или я не спал долго и ничего уже не вижу

justin
17.07.2004, 23:54
только ведь вотрая переменная (у господина RP) НЕ скорость... и не ускорение. потому что график движения БЕЗ ускорения выглядит (у него) как y=x. вторая переменная вроде как расстояние пройдённое ОТ НАЧАЛА ПУТИ.

блин, не важно. :D

justin
19.07.2004, 03:09
неужели всё так сложно?

silin
19.07.2004, 21:31
не ясно в чем твои трудности :зачем тебе скорость-время, если можно координата-время?

justin
20.07.2004, 03:45
2 silin : ну хорошо. а как сделать, чтоб в начале пути объект набирал скорость (разгонялся), в середине двигался равномерно, а в конце - "тормозил"? ...

FreakParty
20.07.2004, 06:14
А почему бы не сделать зависимость координаты от экспоненты или логарифма???

silin
20.07.2004, 13:30
как сделать, чтоб в начале пути объект набирал скорость (разгонялся), в середине двигался равномерно, а в конце - "тормозил"? ...
берешь подходящую функцию, подгоняешь под свой расклад коэффициенты и в путь..
как вариант: разбиваешь диапазон на три части и каждую считаешь своей функцией

justin
22.07.2004, 06:10
там по идее все проще и универсальнее. Робберта Пеннера попросить чтоль дать исходник?... :D

silin
22.07.2004, 19:45
проще чем что ? (ты в его демо загляни - мало не покажется)
на вот пример с функцией от РП (если тебе именно это надо)

justin
23.07.2004, 15:44
то бишь, вместо функции можно подставлять значения отсюда:
http://www.robertpenner.com/easing/easing_equations.as ?
вроде работает. Ж) только, иногда процесс длится до бесконечности (шарики улетают за экран).
ща будем разбираться КАК это работает. :D
спасибо.

BrainSmasher
23.07.2004, 18:15
Ну что сказать,
если отталкиваться от физики, то надо решать дифференциальное уравнение, т.к. движение тела в вязкой среде, как правило, не является равноускоренным (ибо сила сопротивления среды прямопропорциональна некой константе, зависящей от свойств среды и формы тела и квадрату скорости тела относительно этой среды).
В принципе уравнение не шибко сложное, но это как говорится, на любителя...
А если упростить задачу так подобное поведение частиц проще всего описать кусочной апроксимацией, можно линейной, можно нет.
Например, если T- полное время движения частицы от взрыва до останова, то 0 до t=0.3T частица движется с ускорением A с t=0.3T до t=0.5T с ускорением B и т.д. А координаты частицы на каждом из отрезков рассчитывать по формулам равноускоренного движения x=a*(t-T0)^2/2+V0*(t-T0)+X0, где t-время движения прошедшее от момента взрыва, T0-время начала очередного отрезка,X0 и V0-координаты и скорость частицы на момент начала очередного отрезка аппроксимации. Скорость естественно вычисляется как V=V0+a*(t-T0). а- соответственно ускорение на текущем отрезке. Естественно, что координаты и скорость - векторные величины и описываются двумя значениями. Поэтому аналогичные уравнения должны быть записаны и для координаты y.
Итак, если сначала a (т.е. в нашем примере A) положительно то частица летит ускоряясь, если а (т.е. в нашем примере B) равно 0, то частица летит с прежней скоростью, а если a<0, то частица тормозит. Для пущей реалистичности отрезков можно сделать 5-10 и на каждом задать соответствующее ускорение
Все.