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

Плавная остановка колеса

Поделиться

Страницы: 1 2 Следующая

Adult_MasterПостоялецwww13 июля 201711:37#0
Как можно плавно остановить вращение по заданному углу ? Например: Нужно остановить колесо под углом 45.23 градуса, если угол поворота колеса на данный момент например 30, то что бы не было резкой остановки лучше прокрутить колесо ещё один круг плавно уменьшая скорость, и наоборот, если на момент начала остановки угол равен 50 градусов, то не нужно делать лишний полный оборот. На данный момент считаю разницу между текущим и конечным углом, и пропорционально меняю скорость, может есть какой то более универсальный и математически верный вариант ?
kvakvsПостоялецwww13 июля 201711:59#1
Осталось А градусов с текущей скоростью вращения это Х секунд.
Жди Х/2 секунд.
Понижай скорость вдвое.
Жди Х/4 секунд.
Понижай скорость вдвое.
Итд.

Это фактически симуляция трения. Трение в физдвижках есть, включай просто его, как будто тормозные колодки прижались.

Правка: 13 июля 2017 12:01

Adult_MasterПостоялецwww13 июля 201712:17#2
В том то и дело, что сейчас идёт привязка по времени, но дело в том, что мне не так важно за какое время остановится колесо, чем то как плавно оно остановится. Т.е. нужно что бы затухание было плавным, т.е. как будто колесо само остановилось в псевдо-случайной точке (на самом деле точка останова известна заранее), иными словами нужен некий балансир между скоростью затухания и временем, что бы сгладить видимые погрешности вращения.
TailsПостоялецwww13 июля 201713:08#3
Начальная скорость вращения колеса какая, фиксированная? Сколько rad/sec?
RikkПостоялецwww13 июля 201713:15#4
ну вы совсем . это точка по окружности = закон синуса . затухающие колебания. школа механика 8класс. я вас поздравляю.
TailsПостоялецwww13 июля 201713:19#5
Rikk
Может быть вы ещё и решение предложите? Или так, просто написали..
mahrizhПостоялецwww13 июля 201713:21#6
Рулетку делаешь?
float easeOut(float t)
{
  return sin(clamp(t,0,1) * PI * 0.5f);
}

void start()
{
  timeCur = 0;
  timeMax = 5;
  targetPosition = random(0, 360); // + 360 * число дополнительных оборотов
}

void update(float dt)
{
  if (timeCur > timeMax)
    return;

  timeCur += dt;
  rotation = easeOut(timeCur / timeMax) * targetPosition;
}
RikkПостоялецwww13 июля 201713:34#7
Tails
> Может быть вы ещё и решение

мы предлагали. недавно. тут было много срач-флуда по теме. ищите сами. или вам и поиск предлагать а вы только проглотите ? ну как та присказка - поднести, пожевать,в рот положить , а птенцам-гадёнышам-засранцам только проглотить остаётся.

Правка: 13 июля 2017 13:43

daveПостоялецwww13 июля 201715:17#8
mahrizh
> Рулетку делаешь?

Вот тоже первое что в голову пришло.
Играйте после этого в джойказино, ага.

RikkПостоялецwww13 июля 201715:47#9
dave
> Играйте после этого в джойказино, ага.

свою лепите.

SuslikМодераторwww13 июля 201716:08#10
Rikk
> ну вы совсем . это точка по окружности = закон синуса . затухающие колебания.
> школа механика 8класс. я вас поздравляю.
я смотрю, у тебя появилось хобби: залезть в чужую тему, написать несколько терминов не по теме и строить из себя умный вид. предупреждение.
Adult_MasterПостоялецwww13 июля 201717:42#11
Rikk
Мне знакомы понятия единичной окружности и синуса, представьте себе, я даже знаю что такое интерполяция ! У вас вместе с поздравлениями случаем решение вопроса не завалялось ?)
Ну а если без шуток:
mahrizh
> mahrizh
На данный момент алгоритм построен почти по такому же принципу. А что за функция clamp ? Погуглить погуглил, но я не пользуюсь С, код пишется под ПЛИС, на Верилоге, а тут даже функции синуса и косинуса приходится руками писать, всё как в 8-ом классе). Я к тому, что потрахов этой clamp не кините ?
Dmitry_MilkПостоялецwww13 июля 201719:51#12
Интеграл от exp(-t*K) [0...+беск.] = 1/K
RikkПостоялецwww13 июля 201719:52#13
A=Amax * sinus (2pi *f *t +phi )

нач условия =

Amax= обычно известно - амплитуда термин - максимальное отклонение от положения равновесия. для колеса положение равновесия это центр колеса, макс отклонение это дальняя точка-радиус окружности. Rколеса.
нач  фаза phi= 30
частота обращения - обычно известно (как эл.сеть 50герц,60герц), см справочники . взять стандартное значение логически по смыслу в аналогичной ситуации. если колесо по земле - то логически частоты волны света не будет,тк абсурд.
конечное значение угол =45.23 градуса=известно.


закон движения
А=Амакс*sinus(2 pi f t +30grad)

конечная точка останов - известно при угол оборота 45.23град

(2 pi f t +30) =45.23 градуса

интервал времени t от начала движения до останова

t= [45.23-30 ] / 2 pi f .

в следующие секунды - всегда стоит . это момент t+1sec .

решение вопроса

  если ...то , iff then

если t= [45.23-30 ] / 2 pi f , то останов-колесо .

или же —- товарищ Adult_Master заявил (на самом деле точка останова известна заранее),

В момент времени t= [конечное угол град- начальное угол град] / 2 pi f  —- останов колеса . от момента времени  [ (t+1)....и далее]  колесо неподвижно. (вдруг вы считаете что момент t включен в движение  и t-секунда колесо движется в последний финальный момент.когда закончилась секунда t и началась секунда t+1 то это железное стоп)

-—
о том что градусы возможно надо будет перевести в радианы - скромно помалкиваю. полагается что эта мысль придет сама без указок.

Правка: 13 июля 2017 22:38

SuslikМодераторwww14 июля 20172:00#14
Rikk
заканчивай этот бессвязный поток.

Страницы: 1 2 Следующая

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

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