Russian Qt Forum
Март 29, 2024, 12:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Расчет скоростей [решено]  (Прочитано 18874 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Июнь 03, 2018, 16:01 »

Добрый день

Есть N точек на пути, для каждой известно пройденное (от начала пути) расстояние. Также известно

- время за которое должен быть пройден весь путь
- скорости в начальной и конечной точках

Требуется: для всех точек рассчитать время и скорость (т.е. то что дано для первой и последней)

Спасибо
« Последнее редактирование: Июнь 07, 2018, 06:27 от Igors » Записан
maks1596
Гость
« Ответ #1 : Июнь 03, 2018, 21:35 »

А с одной и той же скоростью нельзя пройти все точки? Просто может я неверно понял задачу, но я бы взял расстояние пройденное от начала пути у последней точки и поделили бы на время, за которое требуется пройти весь путь.
Я, если честно, не понял зачем нужны скорости в крайних точках. Можете немного яснее поставить задачу?
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #2 : Июнь 04, 2018, 00:37 »

Цитировать
А с одной и той же скоростью нельзя пройти все точки?
Нет, в общем случае нельзя.
У этой задачи существует бесконечное число решений, однако, также существует универсальный алгорит решения (одного из множества решений).

Рассмотрим простейший частный случай, когда мы задаём скорость как квадратичную функцию времени (см. fig1). Такая функция имеет три пераметра: a, b, c.
Для их определения нам нужно три уравнения. Первые два - очевидны: они задают начальную и конечную скорости в начале и конце пути (см. fig2).
Третье уравнение согласует среднюю скорость на всём пути (см. fig2).
Из этих трёх уравнений мы вытаскиваем три неизвестных константы a,b,c.

Теперь легко получить значения соответствующих скоростей и времён в каждой точке на пути (см. fig3).   
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Июнь 04, 2018, 06:08 »

Рассмотрим простейший частный случай, когда мы задаём скорость как квадратичную функцию времени (см. fig1). Такая функция имеет три пераметра: a, b, c.
Просмотрел Ваши выклвдки, но, правду сказать, не особо вник (чижеловато). Давайте расскажу как я сделал, а Вы попинайте. Введем обозначения

v0, v1 - скорости в начальной и конечной точках
S - длина всего пути
T - время прохождения всего пути

Нужно вывести такое уравнение(я) что подставляя в него s(i) - длина пути i-й точки, получить v(i) и t(I) - время и скорость i-й точки. Ну ясно что свести дело к равноускоренному движению не удастся (к равномерному тем более). Поэтому моей фантазии хватило лишь на утверждение "Пусть скорость меняется квадратично"  Улыбающийся

v(t) = a * t * t + b * t + v0;

Мы знаем что v(T) = v1, отсюда ур-е 1
Цитировать
a * k0 + b * k1 = v1 - v0;  // k0 и к1 - константы
Путь - интеграл от скорости,

s(t) = a / 3 * t * t * t + b / 2 * t * t + v0 * t
 
Мы знаем что s(T) = S, отсюда ур-е 2
Цитировать
S - v0 * T = a * k2 + b * k3; // k2 и k3 - константы
В итоге имеем сопливую СЛАУ 2x2. решая ее находим a и b

Теперь сам расчет.

1) Решаем кубическое ур-е s(i) - путь i-й точки. находим t
s(i) = a / 3 * t * t * t + b / 2 * t * t + v0 * t

2) Подставляя найденное t в ур-е скорости находим скорость i-й точки
v(i) = a * t * t + b * t + v0;

Верно ли я мыслюсь? Меня смущает что как только сказано "квадратичный" (закон скорости) - все остальное уже определено, выбора нет. Почему так получается?

Спасибо
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #4 : Июнь 04, 2018, 10:30 »

Цитировать
Просмотрел Ваши выклвдки, но, правду сказать, не особо вник (чижеловато)
Чего там тижаловатого в трёх картинках со школьными выкладками?

Цитировать
Верно ли я мыслюсь? Меня смущает что как только сказано "квадратичный" (закон скорости) - все остальное уже определено, выбора нет. Почему так получается?

Да, верно.
Да, для "квадратичного" закона движения существует только одно решение. В этом нет ничего странного.
Но это не означает, что это единственное решение в принципе. Можно выбрать любую другую зависимость скорости от времени, главное, чтоб она удовлетворяла трём условиям:
1,2: В начальной и конечной точках скорости должны быть фиксированы и равны соответствующем значением и 3: должно выполняться уравнение на среднюю скорость.
Таких функций можно придумать бесконечное множество.
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #5 : Июнь 04, 2018, 11:01 »

Задача для теслы, только электродвигатель/реактивный двигатель способен выдавать примерно одинаковое максимальное ускорение на любой посильной ему скорости.
потом может получиться вначале скорость 60-120-240-300(что не совсем реально для автомобиля). вместо того чтоб всю дорогу 120 ехать, а в крайних точках резко разогнаться.

Еще у вас скорость в конечной точке разве учитывается? квадратичное уравнение задается жестко начальной скоростью и временем(конечную скорость уже не изменить).
Потом если скорость отрицательная в начальной конечной точке(или квадратное уравнение такое получиться) то объект проедет эти точки а потом вернется к заданному времени.

Кубическое уравнение опишет вашу задачу, по скорости в начальной и конечной точке, и времени. Ну и нужно учесть что график может вылететь за конечную или начальную точку.
« Последнее редактирование: Июнь 04, 2018, 11:05 от deMax » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #6 : Июнь 04, 2018, 12:09 »

Еще у вас скорость в конечной точке разве учитывается?
Конечно учитывается. Учитывается и скорость в начальной, конечной да и ещё средняя скорость полностью согласована)

Цитировать
квадратичное уравнение задается жестко начальной скоростью и временем(конечную скорость уже не изменить).
Нет, ничего подобного. Вот квадратичная функция в общем случае: v(t) = v0 + a*t + b*t*t.
v0 - скорость в начальный момент времени (t=0). Остаётся ещё два параметра. Для их определения нужно два уравнения. Одно из них как раз определяет скорость в конечный момент времени
t = T: v2 = v0 + a*T + b*T*T. Второе уравнение определяет среднюю скорость: S/T = v0 + (a/2)*T + (b/3)*T*T
В итоге у нас СЛАУ 2x2:

v2 = v0 + a*T + b*T*T,
S/T = v0 + (a/2)*T + (b/3)*T*T.

из которых мы однозначно найдём a и b.  

Цитировать
Кубическое уравнение опишет вашу задачу, по скорости в начальной и конечной точке, и времени
Кубическое, конечно тоже опишет, но оно избыточно (более того, для кубической зависимости мы уже будем иметь множество решений)..
Квадратичное же имеет единственное. Короче, квадратичного вполне достаточно Улыбающийся
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Июнь 04, 2018, 13:29 »

Второе уравнение определяет среднюю скорость: S/T = v0 + (a/2)*T + (b/3)*T*T
Мне кажется интуитивнее домножить обе части на T и мы получим ур-е пути. А так неясно почему средняя должна быть такой. Ну это не принципиально

А с одной и той же скоростью нельзя пройти все точки?
В общем случае нет, не даст расстояние (в точках). Если a = 0 то получится равноускоренное движение. А если и b = 0 то выйдет движение с постоянной скоростью.

Да, для "квадратичного" закона движения существует только одно решение. В этом нет ничего странного.
Ну вообще-то парабола задается 3 точками, а здесь только 2 (начальная и конечная). Не пойму каким образом я (неявно) задал третью?  Улыбающийся

Можно выбрать любую другую зависимость скорости от времени,
Хорошо, а как удобно (гибко) варьировать "форму" графика скоростей? Напр при v0 = v1 = 0.0 он выглядит как школьная парабола
у = -x^2
Как сместить максимум влево/вправо по желанию юзверя (пусть примитивно но с минимумом опций и не влезая в обильную математику)?

Спасибо
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #8 : Июнь 04, 2018, 13:48 »

Да, вы правы, я невнимательно посмотрел. Функция от скорости конечно квадратичная. (я просто думал вы про функцию от растояния говорите, она здесь не нужна)
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #9 : Июнь 04, 2018, 13:52 »

А так неясно почему средняя должна быть такой. Ну это не принципиально
интеграл от скорости даст путь.
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #10 : Июнь 04, 2018, 13:58 »

Ну и возвращаясь к задаче, при отрицательных скоростях ему придестя заехать за старт/финиш. При слишком большой начальной скорости ему придется уехать за финиш, вернуться уехав за старт, и потом финишировать.

Ну и сам алгоритм(допустим мы едем в тесла), есть начальная скорость и начальное нахатие на педаль ускорения, в течении всего времени педаль равномерно движеться.
Вобщем есть много краевых моментов и не факт что алгоритм оптимальный. Смотря какие дополнительные условия? можно ли пересекать старт/финиш, ограничения на скорость/ускорение...
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #11 : Июнь 04, 2018, 14:18 »

Цитировать
А так неясно почему средняя должна быть такой. Ну это не принципиально
Цитировать
Ну вообще-то парабола задается 3 точками, а здесь только 2
Это принципиально! Это условие фактически фиксирует третью точку. Поскольку с одной стороны суммарный путь по условию это S, а с другой стороны - это интеграл от скорости от начального момента времени до конечного!

Цитировать
Как сместить максимум влево/вправо по желанию юзверя (пусть примитивно но с минимумом опций и не влезая в обильную математику)?
Как только мы решили аппроксимировать скорость квадратичной функцией и юзер задал начальную и конечную скорости, полное время в пути и длину пути - то он уже больше ничего варьировать не сможет, поскольку (в сотый раз повторяю) решение для квадратичной функции в этом случае определяется однозначно!

Хотите дать юзеру свободу вырьировать параметры: апроксимируйте скорость полиномом выше второй степени. Например, для кубической функции и юзера появится один свободный параметр.

Цитировать
Вобщем есть много краевых моментов и не факт что алгоритм оптимальный.

Я бы сказал, выбор зависимости скорости от времени не единственно возможный - можно туеву хучу вариантов рассматривать, но сам алгоритм примерно один и тот же - фактически это просто решение краевой задачи.
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Июнь 04, 2018, 14:32 »

Хотите дать юзеру свободу вырьировать параметры: апроксимируйте скорость полиномом выше второй степени. Например, для кубической функции и юзера появится один свободный параметр.
Как его "дать"? Какие ручки / контролы? Рассказывать ему о полиномах (любой степени) бесполезно. Нужно примитивное упр-е, типа:

- если значение = 1, то как сейчас
- если < 1, то скорости нараствют/убывают  сначала быстро, потом медленно
- если > 1, то наоборот

И о себе подумать. На ур-е 4-й степени либа еще найдется, а дальше что?

------------------------

Ну вот, только подумал "на этот раз удачно проскочил" - и на тебе  Плачущий Хирак - выдает 3 корня.
И шо делать Непонимающий? (паника)
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #13 : Июнь 04, 2018, 14:40 »

Цитировать
Как его "дать"? Какие ручки / контролы? Рассказывать ему о полиномах (любой степени) бесполезно.
Юзер вообще не будет знать о ваших полиномах и т.д.. Вы ему дадите N-ное колличество "бубочек", которые он может крутить-вертеть. Число "бубочек" определяет число свободных параметров. Число свободных параметров N задаётся условием: N = n-2, где n - степень полинома (n >= 2).

Цитировать
Ну вот, только подумал "на этот раз удачно проскочил" - и на тебе   Плачущий Хирак - выдает 3 корня.

Если на пути нет точек останова (т.е. точек, где скорость меняет направление) то корень на интервале t [0, T] будет только один.
« Последнее редактирование: Июнь 04, 2018, 14:42 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Июнь 04, 2018, 15:21 »

Если на пути нет точек останова (т.е. точек, где скорость меняет направление) то корень на интервале t [0, T] будет только один.
Уже сообразил (да, путь неубывающий), но все равно спасибо,

Насчет бубочек - давайте через денек-другой, а то сейчас обсуждение слишком бурное (а значит быстро выдохнется) Улыбающийся
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.063 секунд. Запросов: 23.