2014-09-25 2 views
0
  1. В настоящее время я придерживаюсь идеи алгоритма скорости, насколько я знаю, лифт не перемещается с постоянной скоростью, он ускоряется от стационарного до определенной точки, чтобы достичь это максимальная скорость. Мне дана эта формула: t = vm/a, где t = время достижения максимальной скорости, vm - максимальная скорость подъема, а a - значение ускорения, пусть теперь у меня есть t = 5s, vm = 1 пол/секунда, поэтому a будет = 0,2? поэтому это означает, что для подъема до следующего этажа требуется 5 секунд (я прав?) и путешествовал с постоянной скоростью 0,2 м/с, но это нарушает часть ускорения, так как подъем, ускоряющийся до максимальной скорости, затем перемещается с максимальной скоростью , Поэтому мой вопрос заключается в том, как я могу разработать этот алгоритм, чтобы он ускорялся и доходил до места назначения в указанное время?Алгоритм ускорения ускорения и движущаяся графика

  2. Как мы можем плавно перемещать прямоугольник? Кажется, я прыгаю ко мне каждый раз, когда пытаюсь переместить фигуру вверх и вниз.

Спасибо вам за помощь, ребята :)

+0

вопросы довольно не связаны. Я бы порекомендовал разложить их на два вопроса (хотя второй из них так распространен, что маловероятно, что он станет дубликатом другого вопроса ...) – Marco13

+0

См. Также этот 'FloatSpring' [пример] (http: /stackoverflow.com/a/11233735/230513). – trashgod

ответ

1

Входные данные:

  • vm [этаж/с] Максимальная скорость
  • tm [s] убыстрение/перерыв времени <0-vm>

Моделирование:

  • создать некоторый таймер с интервалом dt [с]
  • добавить переменные
  • double p=0.0 - [этаж] фактическое положение
  • double pd=0.0 - [этаж] желаемое положение
  • double v=0.0 - [этаж/с] фактическим скорость
  • , когда вы нажмете кнопку/ключ на полу (0,1,2, ...), затем просто установите значение pd в соответствующее положение пола
  • внутри таймера сделать это:

    if (p<pd-1e-3) //go up 
    { 
    v+=vm*dt/tm; 
    } 
    else if (p>pd+1e-3) //go down 
    { 
    v-=vm*dt/tm; 
    } 
    else p=pd; // just for rounding safety 
    if (v>+vm) v=+vm; 
    if (v<-vm) v=-vm; 
    p+=v*dt; // update dynamics 
    // here redraw scene 
    

ОК это только начало, так как это выглядит распайке остальное на вас

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

[ноты]

заданного интервала таймера Dt = 20 - 100 мс для плавной анимации

+0

что это такое 1e ???? – user3600620

+0

@ user3600620 1e-3 = 0,001 стандартная постоянная поплавка в C++ означает (1) * 10^(- 3). это просто небольшое количество для обработки с плавающей запятой – Spektre

Смежные вопросы