Russian Qt Forum
Ноябрь 26, 2024, 05:06
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Алгоритмы
>
Расчет скоростей [решено]
Страниц:
1
[
2
]
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Расчет скоростей [решено] (Прочитано 21431 раз)
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Расчет скоростей
«
Ответ #15 :
Июнь 04, 2018, 15:49 »
Я извиняюсь, но вот "квадратичность" зависимости скорости от времени - это 100% заданное начальное условие или просто взято как иллюстрация (а движение может быть неравномерным)?
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Расчет скоростей
«
Ответ #16 :
Июнь 04, 2018, 17:10 »
Цитата: Racheengel от Июнь 04, 2018, 15:49
Я извиняюсь, но вот "квадратичность" зависимости скорости от времени - это 100% заданное начальное условие или просто взято как иллюстрация (а движение может быть неравномерным)?
Как иллюстрация) Если использовать в качестве апроксимирующей функции полином, то в общем случае (для фиксации трёх необходимых условий), вторая степень - это минимально возможная)
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Расчет скоростей
«
Ответ #17 :
Июнь 05, 2018, 01:04 »
Цитата: m_ax от Июнь 04, 2018, 17:10
Если использовать в качестве апроксимирующей функции полином, то в общем случае (для фиксации трёх необходимых условий), вторая степень - это минимально возможная)
Вот для меня как для не-специалиста ни в полиномах и их степенях, ни в физике вообще, есть (не)много непонятно, как же собственно произошел переход от интеграла от t1 до t2 (я так понимаю, "путь" там строится из кусочков) в выражения на рис.2 ?
Ну то есть идея вроде бы понятна - мы берем эту самую "апроксимирующую функцию" и с каким-то минимальным шагом получаем зависимости V от t и суммируем их. Но это же "процесс итерационный", то есть как бы нужен цикл, а там откуда ни возьмись - выражения с кубами и квадратами... Непонятно (с).
Да и загадкой остается, откуда же функция то на свет явилась, если ее нет в начальных условиях? То есть какая задача в итоге решается? Исходная или мнимая?
«
Последнее редактирование: Июнь 05, 2018, 01:09 от Racheengel
»
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Расчет скоростей
«
Ответ #18 :
Июнь 05, 2018, 08:14 »
Цитата: Racheengel от Июнь 05, 2018, 01:04
Да и загадкой остается, откуда же функция то на свет явилась, если ее нет в начальных условиях? То есть какая задача в итоге решается? Исходная или мнимая?
Строго говоря - мнимая
Пожуем простой пример: известны расстояния (от начала пути) которые проходит объект (их менять нельзя)
s = { 0, 10, 40, 100 }; // 4 точки, длина пути 100
Теперь юзверь говорит: хочу чтобы весь путь был пройден напр за 10 сек, начальная скорость ноль, конечная напр 50. Рассчитайте время и скорости в двух средних точках (в первой и последней они заданы)
Пройти с постоянной скоростью нельзя, хотя бы потому заданы разные начальная и конечная. Ладно, пытаемся пройти с постоянным ускорением. Тоже ни фига не выходит
v = v0 + a * t; // v = 50, v0 = 0, t = 10, отсюда ускорение a = 5
S = a * t * t / 2; // S = 100, t = 10, отсюда ускорение a = 2
Т.е. скорости первых 3 точек мы-то выстроим по прямой, но до последней или не дотянемся или она вообще окажется сзади.
Отсюда вывод - надо каким-то образом задать закон (форму) изменения скорости. Да, юзверь об этом ничего не говорил - ну так это и не его дело. Напрашивается квадратичный, его и берем
v = a * t * t + b * t + v0;
Где a - второе ускорение, b - первое. Ну и дальше песня как эти коэффициенты найти
Цитата: Racheengel от Июнь 05, 2018, 01:04
а там откуда ни возьмись - выражения с кубами и квадратами... Непонятно (с).
Хотя я чаще сталкиваюсь с математикой и физикой - мне тоже не очень понятно
Цитата: m_ax от Июнь 04, 2018, 10:30
Чего там тижаловатого в трёх картинках со школьными выкладками?
Ну строго говоря - первого семестра ВУЗа. Надо все-таки помягче, люди это видели/знали много лет назад (в лучшем случае), поэтому больше пояснений (пусть "очевидных") будет к месту.
Да, и я наконец понял с "третьей точкой". Надо сформулировать так
- найти ур-е параболы проходящей через 2 заданные точки причем такой что интеграл от нее (на известном интервале) был равен заданному.
Поэтому 3-я точка здесь наоборот, НЕ нужна
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Расчет скоростей
«
Ответ #19 :
Июнь 05, 2018, 10:29 »
Макс прав, решений тут может быть бесконечное множество, но имхо тут уже пошел отход от сути в дебри матанов
А почему бы не разбить задачу на конечные отрезки (например, на 2 - от 0 до 40 и от 40 до 100), и выполнять расчет ускорений отдельно? Получим 2 решения, но ведь в условии и не сказано, насколько "гладким" должно быть движение?
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
deMax
Хакер
Offline
Сообщений: 600
Re: Расчет скоростей
«
Ответ #20 :
Июнь 05, 2018, 10:33 »
Цитировать
Ну и дальше песня как эти коэффициенты найти
В смысле легко или сложно?
скорость и координаты от времени:
v(t) = a * t * t + b * t + v0
x(t) = a * t^3 / 3 + b * t^2 / 2 + v0 * t
b =( v2 - a*t
2
- v0 ) / t
S/t = a*t
2
/ 3 + b * t / 2 + v0 * t
S/t = a*t
2
/ 3 + ( v2 - a*t
2
- v0 ) / t * t / 2 + v0 * t
S/t = a*t
2
/ 3 + ( v2 - a*t
2
- v0 ) / 2 + v0 * t
S/t = - a*t
2
/ 6 + v2/2 -v0/2 + v0 * t
a = ( -S / t + v2 / 2 - v0 / 2 + v0 * t ) * 6 / t
2
p.s. Вообще если брать более практичный вариант, мне кажется машина должна ехать с учетом ограничений скорости и множеством других ограничений... График ускорения будет разрывная функция - точнее множество разных функций на разных участках, длинна которых будет определяться начальными условиями.
Записан
deMax
Хакер
Offline
Сообщений: 600
Re: Расчет скоростей
«
Ответ #21 :
Июнь 05, 2018, 10:50 »
Точнее даже не так, машина разгониться и будет ехать по спидлимиту на всем протяжении дороги, если будет время в запасе - срежет скорость чтобы экономить топливо(или будет нарушать, если времени мало) . Если времени будет слишком много, будет пить кофе на заправках.
просто езда с постоянным движением педали газа не очень реальна.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Расчет скоростей
«
Ответ #22 :
Июнь 05, 2018, 11:37 »
Цитата: Racheengel от Июнь 05, 2018, 10:29
Макс прав, решений тут может быть бесконечное множество, но имхо тут уже пошел отход от сути в дебри матанов
Конечно прав, но никто и не утверждал обратное
И то не дебри еще, а так, "3 сосны"
Цитата: Racheengel от Июнь 05, 2018, 10:29
А почему бы не разбить задачу на конечные отрезки (например, на 2 - от 0 до 40 и от 40 до 100), и выполнять расчет ускорений отдельно? Получим 2 решения, но ведь в условии и не сказано, насколько "гладким" должно быть движение?
Ну получим ту же задачу только с меньшим числом точек. А если речь о подстройке 2-3 точек - то есть редактор где можно это делать интерактивно.
Вероятный запрос юзера (аттач)
Цитировать
Да, вот вы сделали красную кривую, спасибо. Да, я понимаю что прямая здесь не выйдет. Но мне бы хотелось гибко менять "форму", см зеленую и синюю кривые
m_ax
предлагает брать полиномы высших порядков. Какие? И как юзер будет "управлять формой"? Не, я конечно понимаю что "теоретический интерес" исчерпан, структура/метод решения тот же самый. Но все-таки ...
Update: прочитал свой же пост выше и подумал - а что тут военного? Ну возьмем третье ускорение, вот у него коэффициент свободен и может задаваться юзером. СЛАУ остается 2х2. Вот только как этот коэффициент втихаря подстроить (от юзеровского ввода) чтобы график не "вилял"?
«
Последнее редактирование: Июнь 05, 2018, 11:46 от Igors
»
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Расчет скоростей
«
Ответ #23 :
Июнь 05, 2018, 11:57 »
Цитировать
Точнее даже не так, машина разгониться и будет ехать по спидлимиту на всем протяжении дороги, если будет время в запасе - срежет скорость чтобы экономить топливо(или будет нарушать, если времени мало) . Если времени будет слишком много, будет пить кофе на заправках.
просто езда с постоянным движением педали газа не очень реальна.
А откуда такая привязка конкретно к случаю движения машины? Может igors решает проблему полёта пьяного Карлсона?
Кто его знает, что у него в голове)
Цитировать
Update: прочитал свой же пост выше и подумал - а что тут военного? Ну возьмем третье ускорение, вот у него коэффициент свободен и может задаваться юзером. СЛАУ остается 2х2. Вот только как этот коэффициент втихаря подстроить (от юзеровского ввода) чтобы график не "вилял"?
С точки зрения юзера, мне, лично, было бы гораздо нагляднее задавать (и редактировать) график зависимости скорости от пройденного пути - это интуитивней. А не скорости от времени..
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Расчет скоростей
«
Ответ #24 :
Июнь 06, 2018, 06:14 »
Цитата: m_ax от Июнь 05, 2018, 11:57
А откуда такая привязка конкретно к случаю движения машины? Может igors решает проблему полёта пьяного Карлсона?
Кто его знает, что у него в голове)
Есть 3D объект, настройка траектории его движения (в пр-ве) - своя песня (сплайны и все такое). Термин "velocity" (control) означает упр-е скоростью НЕ меняя траектории. А насколько пьян Карлсон - решает юзер, мое дело дать ему тулзы.
Цитата: m_ax от Июнь 05, 2018, 11:57
С точки зрения юзера, мне, лично, было бы гораздо нагляднее задавать (и редактировать) график зависимости скорости от пройденного пути - это интуитивней. А не скорости от времени..
Вот не надо умничать, вещь пусть не очень популярная, но совсем не редкая.
Цитата: Igors от Июнь 05, 2018, 11:37
Ну возьмем третье ускорение, вот у него коэффициент свободен и может задаваться юзером. СЛАУ остается 2х2. Вот только как этот коэффициент втихаря подстроить (от юзеровского ввода) чтобы график не "вилял"?
Что имеете сказать по этому вопросу? Нужны еще пояснения (может проблема не ясна)?
«
Последнее редактирование: Июнь 06, 2018, 06:17 от Igors
»
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Расчет скоростей
«
Ответ #25 :
Июнь 06, 2018, 10:58 »
Цитировать
Что имеете сказать по этому вопросу? Нужны еще пояснения (может проблема не ясна)?
Так уже всё сказано. Вот алгоритм для кубической зависимости скорости:
v(t) = v0 + a*t + b*t*t + c*t*t*t;
Имеем 2 условия:
v2 = v0 + a*T + b*T*T + c*T*T*T,
S/T = v0 + a*T/2 + b*T*T/3 + c*T*T*T/4.
Находим коэффициенты a и b, которые в данном случае теперь зависят (причём линейно) от параметра c.
a = (6*f2 - 2*f1)/T,
b = (3*f1 - 6*f2)/(T*T),
f1 = v2 - v0 - c*T*T*T,
f2 = S/T - v0 - c*T*T*T/4.
Далее подставляем a и b в уравнение для скорости и ищем условие для параметра c, где скорость на интервале t [0, T] больше или равна нулю:
v0 + a*t + b*t*t + c*t*t*t >= 0
Это, так называемое неравенство с параметром, то, чего так боятся школьники на ЕГЭ.
Решая его, получаете возможный интервал изменения параметра c. Всё. юзеру даёте бубочку с мин и мак. значениями для c.
Пускай крутит туда-сюда)
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
deMax
Хакер
Offline
Сообщений: 600
Re: Расчет скоростей
«
Ответ #26 :
Июнь 06, 2018, 13:19 »
А зачем вообще эта задача нужна?
Можно вообще в пределах некоторого ускорения разогнаться до средней скорости, потом длительное движение на средней скорости, потом ускорение до конечной скорости.
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Расчет скоростей
«
Ответ #27 :
Июнь 06, 2018, 14:20 »
Цитата: deMax от Июнь 06, 2018, 13:19
Можно вообще в пределах некоторого ускорения разогнаться до средней скорости, потом длительное движение на средней скорости, потом ускорение до конечной скорости.
Такой вариант технически сложнее в реализации.. Поскольку зависимость скорости - уже не гладкая функция, следовательно нужно постоянно думать об интервалах, где она меняет свою функ. зависимость и т.д.. Зачем?
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
deMax
Хакер
Offline
Сообщений: 600
Re: Расчет скоростей
«
Ответ #28 :
Июнь 06, 2018, 16:40 »
Цитата: m_ax от Июнь 06, 2018, 14:20
Зачем?
Транспорт вряд ли будет по такой формуле ехать(есть более экономичные траектории). Хотя если задача связанна с созданием 3Д движка, практический смысл не так важен.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Расчет скоростей
«
Ответ #29 :
Июнь 06, 2018, 16:43 »
Цитата: deMax от Июнь 06, 2018, 13:19
А зачем вообще эта задача нужна?
Можно вообще в пределах некоторого ускорения разогнаться до средней скорости, потом длительное движение на средней скорости, потом ускорение до конечной скорости.
Можно, только сделать это интерактивно (тягая точки графика) отнюдь не просто. На 3-4 точках еще можно, дальше засада. Изменив время и/или скорость в точке мы воздействуем на последующие, т.е. возникает эффект домино. Напр легко добиться прямой (разгон до средней скорости) для первых 2 точек, Но на следующем сегменте возникает ситуевина типа: пройти расстояние 10 с начальной скоростью 100 и конечной 100 (длительное на постоянной). Придется сократить время постоянного движения, что может и не устроить, или вернуться к первому сегменту чтобы иметь меньшую начальную на втором. И.т.д.
Записан
Страниц:
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...