Russian Qt Forum
Ноябрь 23, 2024, 00:06
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Алгоритмы
>
Расчет скоростей [решено]
Страниц: [
1
]
2
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Расчет скоростей [решено] (Прочитано 21415 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Расчет скоростей [решено]
«
:
Июнь 03, 2018, 16:01 »
Добрый день
Есть N точек на пути, для каждой известно пройденное (от начала пути) расстояние. Также известно
- время за которое должен быть пройден весь путь
- скорости в начальной и конечной точках
Требуется: для всех точек рассчитать время и скорость (т.е. то что дано для первой и последней)
Спасибо
«
Последнее редактирование: Июнь 07, 2018, 06:27 от Igors
»
Записан
maks1596
Гость
Re: Расчет скоростей
«
Ответ #1 :
Июнь 03, 2018, 21:35 »
А с одной и той же скоростью нельзя пройти все точки? Просто может я неверно понял задачу, но я бы взял расстояние пройденное от начала пути у последней точки и поделили бы на время, за которое требуется пройти весь путь.
Я, если честно, не понял зачем нужны скорости в крайних точках. Можете немного яснее поставить задачу?
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Расчет скоростей
«
Ответ #2 :
Июнь 04, 2018, 00:37 »
Цитировать
А с одной и той же скоростью нельзя пройти все точки?
Нет, в общем случае нельзя.
У этой задачи существует бесконечное число решений, однако, также существует универсальный алгорит решения (одного из множества решений).
Рассмотрим простейший частный случай, когда мы задаём скорость как квадратичную функцию времени (см. fig1). Такая функция имеет три пераметра: a, b, c.
Для их определения нам нужно три уравнения. Первые два - очевидны: они задают начальную и конечную скорости в начале и конце пути (см. fig2).
Третье уравнение согласует среднюю скорость на всём пути (см. fig2).
Из этих трёх уравнений мы вытаскиваем три неизвестных константы a,b,c.
Теперь легко получить значения соответствующих скоростей и времён в каждой точке на пути (см. fig3).
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Расчет скоростей
«
Ответ #3 :
Июнь 04, 2018, 06:08 »
Цитата: m_ax от Июнь 04, 2018, 00:37
Рассмотрим простейший частный случай, когда мы задаём скорость как квадратичную функцию времени (см. 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
Сообщений: 2095
Re: Расчет скоростей
«
Ответ #4 :
Июнь 04, 2018, 10:30 »
Цитировать
Просмотрел Ваши выклвдки, но, правду сказать, не особо вник (чижеловато)
Чего там тижаловатого в трёх картинках со школьными выкладками?
Цитировать
Верно ли я мыслюсь? Меня смущает что как только сказано "квадратичный" (закон скорости) - все остальное уже определено, выбора нет. Почему так получается?
Да, верно.
Да, для "квадратичного" закона движения существует только одно решение. В этом нет ничего странного.
Но это не означает, что это единственное решение в принципе. Можно выбрать любую другую зависимость скорости от времени, главное, чтоб она удовлетворяла трём условиям:
1,2
: В начальной и конечной точках скорости должны быть фиксированы и равны соответствующем значением и
3
: должно выполняться уравнение на среднюю скорость.
Таких функций можно придумать бесконечное множество.
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
deMax
Хакер
Offline
Сообщений: 600
Re: Расчет скоростей
«
Ответ #5 :
Июнь 04, 2018, 11:01 »
Задача для теслы, только электродвигатель/реактивный двигатель способен выдавать примерно одинаковое максимальное ускорение на любой посильной ему скорости.
потом может получиться вначале скорость 60-120-240-300(что не совсем реально для автомобиля). вместо того чтоб всю дорогу 120 ехать, а в крайних точках резко разогнаться.
Еще у вас скорость в конечной точке разве учитывается? квадратичное уравнение задается жестко начальной скоростью и временем(конечную скорость уже не изменить).
Потом если скорость отрицательная в начальной конечной точке(или квадратное уравнение такое получиться) то объект проедет эти точки а потом вернется к заданному времени.
Кубическое уравнение опишет вашу задачу, по скорости в начальной и конечной точке, и времени. Ну и нужно учесть что график может вылететь за конечную или начальную точку.
«
Последнее редактирование: Июнь 04, 2018, 11:05 от deMax
»
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Расчет скоростей
«
Ответ #6 :
Июнь 04, 2018, 12:09 »
Цитата: deMax от Июнь 04, 2018, 11:01
Еще у вас скорость в конечной точке разве учитывается?
Конечно учитывается. Учитывается и скорость в начальной, конечной да и ещё средняя скорость полностью согласована)
Цитировать
квадратичное уравнение задается жестко начальной скоростью и временем(конечную скорость уже не изменить).
Нет, ничего подобного. Вот квадратичная функция в общем случае: 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
Сообщений: 11445
Re: Расчет скоростей
«
Ответ #7 :
Июнь 04, 2018, 13:29 »
Цитата: m_ax от Июнь 04, 2018, 12:09
Второе уравнение определяет среднюю скорость: S/T = v0 + (a/2)*T + (b/3)*T*T
Мне кажется интуитивнее домножить обе части на T и мы получим ур-е пути. А так неясно почему средняя должна быть такой. Ну это не принципиально
Цитата: maks1596 от Июнь 03, 2018, 21:35
А с одной и той же скоростью нельзя пройти все точки?
В общем случае нет, не даст расстояние (в точках). Если a = 0 то получится равноускоренное движение. А если и b = 0 то выйдет движение с постоянной скоростью.
Цитата: m_ax от Июнь 04, 2018, 10:30
Да, для "квадратичного" закона движения существует только одно решение. В этом нет ничего странного.
Ну вообще-то парабола задается 3 точками, а здесь только 2 (начальная и конечная). Не пойму каким образом я (неявно) задал третью?
Цитата: m_ax от Июнь 04, 2018, 10:30
Можно выбрать любую другую зависимость скорости от времени,
Хорошо, а как удобно (гибко) варьировать "форму" графика скоростей? Напр при v0 = v1 = 0.0 он выглядит как школьная парабола
у = -x^2
Как сместить максимум влево/вправо по желанию юзверя (пусть примитивно но с минимумом опций и не влезая в обильную математику)?
Спасибо
Записан
deMax
Хакер
Offline
Сообщений: 600
Re: Расчет скоростей
«
Ответ #8 :
Июнь 04, 2018, 13:48 »
Да, вы правы, я невнимательно посмотрел. Функция от скорости конечно квадратичная. (я просто думал вы про функцию от растояния говорите, она здесь не нужна)
Записан
deMax
Хакер
Offline
Сообщений: 600
Re: Расчет скоростей
«
Ответ #9 :
Июнь 04, 2018, 13:52 »
Цитата: Igors от Июнь 04, 2018, 13:29
А так неясно почему средняя должна быть такой. Ну это не принципиально
интеграл от скорости даст путь.
Записан
deMax
Хакер
Offline
Сообщений: 600
Re: Расчет скоростей
«
Ответ #10 :
Июнь 04, 2018, 13:58 »
Ну и возвращаясь к задаче, при отрицательных скоростях ему придестя заехать за старт/финиш. При слишком большой начальной скорости ему придется уехать за финиш, вернуться уехав за старт, и потом финишировать.
Ну и сам алгоритм(допустим мы едем в тесла), есть начальная скорость и начальное нахатие на педаль ускорения, в течении всего времени педаль равномерно движеться.
Вобщем есть много краевых моментов и не факт что алгоритм оптимальный. Смотря какие дополнительные условия? можно ли пересекать старт/финиш, ограничения на скорость/ускорение...
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Расчет скоростей
«
Ответ #11 :
Июнь 04, 2018, 14:18 »
Цитировать
А так неясно почему средняя должна быть такой. Ну это не принципиально
Цитировать
Ну вообще-то парабола задается 3 точками, а здесь только 2
Это принципиально! Это условие фактически фиксирует третью точку. Поскольку с одной стороны суммарный путь по условию это S, а с другой стороны - это интеграл от скорости от начального момента времени до конечного!
Цитировать
Как сместить максимум влево/вправо по желанию юзверя (пусть примитивно но с минимумом опций и не влезая в обильную математику)?
Как только мы решили аппроксимировать скорость квадратичной функцией и юзер задал начальную и конечную скорости, полное время в пути и длину пути - то он уже больше ничего варьировать не сможет, поскольку (в сотый раз повторяю) решение для квадратичной функции в этом случае определяется однозначно!
Хотите дать юзеру свободу вырьировать параметры: апроксимируйте скорость полиномом выше второй степени. Например, для кубической функции и юзера появится один свободный параметр.
Цитировать
Вобщем есть много краевых моментов и не факт что алгоритм оптимальный.
Я бы сказал, выбор зависимости скорости от времени не единственно возможный - можно туеву хучу вариантов рассматривать, но сам алгоритм примерно один и тот же - фактически это просто решение краевой задачи.
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Расчет скоростей
«
Ответ #12 :
Июнь 04, 2018, 14:32 »
Цитата: m_ax от Июнь 04, 2018, 14:18
Хотите дать юзеру свободу вырьировать параметры: апроксимируйте скорость полиномом выше второй степени. Например, для кубической функции и юзера появится один свободный параметр.
Как его "дать"? Какие ручки / контролы? Рассказывать ему о полиномах (любой степени) бесполезно. Нужно примитивное упр-е, типа:
- если значение = 1, то как сейчас
- если < 1, то скорости нараствют/убывают сначала быстро, потом медленно
- если > 1, то наоборот
И о себе подумать. На ур-е 4-й степени либа еще найдется, а дальше что?
------------------------
Ну вот, только подумал "на этот раз удачно проскочил" - и на тебе
Хирак - выдает 3 корня.
И шо делать
? (паника)
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Расчет скоростей
«
Ответ #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
Сообщений: 11445
Re: Расчет скоростей
«
Ответ #14 :
Июнь 04, 2018, 15:21 »
Цитата: m_ax от Июнь 04, 2018, 14:40
Если на пути нет точек останова (т.е. точек, где скорость меняет направление) то корень на интервале t [0, T] будет только один.
Уже сообразил (да, путь неубывающий), но все равно спасибо,
Насчет бубочек - давайте через денек-другой, а то сейчас обсуждение слишком бурное (а значит быстро выдохнется)
Записан
Страниц: [
1
]
2
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...