Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Плавная остановка колеса (2 стр)

Плавная остановка колеса (2 стр)

Поделиться

Страницы: 1 2

mahrizhПостоялецwww14 июля 20177:59#15
Adult_Master
> А что за функция clamp ?
clamp(x, low, high) = max(min(x, high), low)

> функции синуса и косинуса приходится руками писать
easeOut — любая функция т.ч.

d easeOut / dx (0) > 0,
d easeOut / dx (1) = 1,
easeOut(0) = 0,
easeOut(1) = 1.

Правка: 14 июля 2017 7:59

DeirelПостоялецwww14 июля 20178:18#16
Можно вывести аналитические формулы в зависимости от того, есть ли вязкое трение (зависящее от скорости) или нет.
Если нет:
m * a'' = -M, где m - момент инерции колёса, a - угловой путь колеса, a'' - угловое ускорение, M - момент трения (константа).
Интегрируем:
m * a' = -M * t + C1
m * a = -M * t^2 / 2 + C1 * t + C2
Находим значения C1 и C2 по граничным условиям:
В начальный момент времени a' = v0 (угловая скорость перед началом торможения), a = 0 (будем отсчитывать путь начиная от момента торможения). Тогда C1 = m * v0, а C2 = 0.
Получаем уравнение пути торможения:
m * a = m * v0 * t - M * t^2 / 2
a = v0 * t - M * t^2 / (2  * m)
И уравнение угловой скорости:
m * a' = m * v0 - M * t
Из последнего находим время, за которое колесо останавливается:
t1 = m * v0 / M
Подставляя в первое уравнение, находим путь до остановки:
a1 = m * v0^2 / (2 * M)

Этого достаточно для решения. Отслеживаем момент, когда угол колёса будет на  a1 меньше конечного, и начиная с этого момента крутим колесо по уравнению пути торможения. Только важно помнить, что в этом уравнении a - относительный угол, отсчитывая с начала торможения, а не абсолютный. Момент инерции колёса можно найти по формуле для цилиндра, например.

Правка: 14 июля 2017 8:44

SuslikМодераторwww14 июля 201710:30#17
Deirel дал правильный ответ. по сути для реализации здесь важны два равенства. первое — закон движения колеса:
[cht]\alpha(t) = \alpha(0) + \omega(0) t - \beta t^2[/cht]
и второе — время до остановки [cht]T = \omega(0) / \beta[/cht]. подставив второе уравнение в первое и произвольно выбрав  [cht]\omega(0)[/cht] и [cht]\beta[/cht], можно найти угол, от которого надо начинать движение [cht]\alpha(0)[/cht], чтобы [cht]\alpha(T)[/cht] равнялось требуемому углу.
закон трения можно выбрать и любой другой, но любой фейк вроде как попало выбранной сглаженной функции в законе движения будет выглядеть неестественно в сравнении с нормальным решением.

Правка: 14 июля 2017 10:33

ZefickПостоялецwww14 июля 201711:23#18
Adult_Master
> может есть какой то более универсальный и математически верный вариант ?
  Естественно есть. Распиши уравнения движения окружности и решай их исходя из известных данных (а это расстояние и время). Надеюсь квадратные уравнения и физику равнозамедленного движения в школе уже изучали.
daveПостоялецwww14 июля 201713:57#19
Здесь наверное вся идея в том чтобы расчитатъ количество оборотов и затухание, из начальных условий (положения круга, скорости вращения) так, чтобы отклонение замедления не бросалось в глаза. Т.е. нужно просто взять затухание равным некоторому значению, но при этом рассматриватъ возможность его небольшого отклонения в большую или меньшую сторону. Возможно, что получится неоднозначное решение, если количество оборотов между затуханием с максимумом и затуханием с минимумом отклонения дампинга будет больше одного.

Правка: 14 июля 2017 14:00

Dmitry_MilkПостоялецwww14 июля 201715:54#20
Да однозначно все решается для экспоненциального затухания скорости (в данном случае угловой скорости). При начальной скорости 1рад/с и экспоненциальном затухании в e раз в секунду полный поворот составит 1 радиан. Для другой начальной скорости - полный поворот изменится пропорционально. При другом затухании - обратно пропорционально.
Dmitry_MilkПостоялецwww14 июля 201716:01#21
Dmitry_Milk
> При другом затухании - обратно пропорционально.

Обратно пропорционально по времени. По величине за ту же единицу - обратно экспоненциально.

SuslikМодераторwww14 июля 201720:30#22
Dmitry_Milk
> Да однозначно все решается для экспоненциального затухания скорости
экспоненциальное затухание будет выглядеть как диск, вращающийся в воде. он никогда не остановится, будет бесконечно замедляться.
ZefickПостоялецwww14 июля 201720:43#23
dave
> отклонение замедления
  Можно узнать где вы берёте такую траву?
daveПостоялецwww14 июля 201721:14#24
Zefick

От среднего значения имелось в виду...
Трава нормальная, натурпродукт.

Правка: 14 июля 2017 21:15

daveПостоялецwww14 июля 201721:18#25
Suslik
> экспоненциальное затухание будет выглядеть как диск, вращающийся в воде. он
> никогда не остановится, будет бесконечно замедляться.

Но тем не менее пройдет конечный путь. Даже за бесконечное время.  )

ZefickПостоялецwww14 июля 201722:20#26
dave
> От среднего значения имелось в виду...
  Да от чего бы там оно в виду не имелось, более грамотным данную фразу это никак не делает.
daveПостоялецwww14 июля 201723:13#27
Zefick

Отклонение амплитуды замедления. Так фраза грамотнее?

ZefickПостоялецwww15 июля 201710:41#28
dave
> Отклонение амплитуды замедления.
Изображение
  Давай ещё что-нибудь в таком же духе.
daveПостоялецwww15 июля 201713:19#29
Угу, руки только мой перед фейспалмами. А то прыщей добавится.

Страницы: 1 2

/ Форум / Программирование игр / Физика

2001—2017 © GameDev.ru — Разработка игр