|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 245
|
||||||
Как сделать анимацию движения объекта по кривой (алгоритм Безье)08.01.2021, 17:01. Показов 11723. Ответов 25
Смог написать программу для рисования кривой используя алгоритм Безье (anaconda), можете пожалуйста помочь, что нужно добавить, чтобы получилась анимация движения, например круга по этой кривой. Просят использовать ffmpeg, celluloid, matplotlib для анимации и Tkinter или что-то похожее для графического интерфейса, читал про библиотеки, но пока туго с пониманием того, как добиться нужного результата, надеюсь на вашу помощь.
Хочется, чтобы было вот так:
0
|
||||||
| 08.01.2021, 17:01 | |
|
Ответы с готовыми решениями:
25
Как сделать анимацию движения по трассе Как сделать анимацию движения велосипеда? |
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||
| 08.01.2021, 20:32 | ||
|
Это наверно высокой степени. Их вроде как никто не использует. Набирают кривую из кусков квадратичной кривой. Можно легко сделать сложной формы и замкнуть. Как правильно задать систему урАвнений для кубических сплайнов? Для анимации по таймеру на каждом кадре увеличиваете параметр t, подставляете в формулу кривой получаете координаты точки меняются по времени. Когда будет 2 кривых вместе то нужно будет завести два параметра, один общий t0 от 0 до 2 и второй t должен расти от 0 до 1 смотря какому диапазону принадлежит t0.Чтобы точка на кривой прошла сначала одну кривую затем вторую.
0
|
||
|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 245
|
|
| 09.01.2021, 11:29 [ТС] | |
|
Это 6 контрольных точек, можно и с двумя, мне главное понять, желательно код с маленькими пояснениями, как на моей кривой нарисовать круг и заставить его двигаться по этой кривой.
0
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||||||||||||||||||||||
| 09.01.2021, 13:56 | ||||||||||||||||||||||
|
Включил “картинки” смотрю где 1 точка а не 100500. https://stackoverflow.com/ques... f-a-circle Поменял строку
Тут другой с экспортом в mp4. https://medium.com/@kirthi.tej... 0e075e5c6e закоментил экспорт и добавил
1
|
||||||||||||||||||||||
|
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
|
||||||
| 09.01.2021, 15:35 | ||||||
1
|
||||||
|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 245
|
||||||
| 09.01.2021, 23:50 [ТС] | ||||||
|
Excalibur921, В anaconda ни один код не заработал, нету анимации просто статичная картинка. Как я понимаю, первый код это движение точки по кругу, а второй по синусоиде, а как передвигать по точкам кривой Безье?
u235, Всё работает, большое спасибо за код, но можно побольше объяснений, откуда взялась матрица 6 на 6, почему именно такие значения, зачем нужна T матрица, meshgrid? какой параметр отвечает за ускорение/замедление передвижения маркера? Добавлено через 17 минут u235, Анимация почему-то работает, только если добавить строчку %matplotlib qt, а затем удалить её, если просто скопировать код и запустить, отображается просто координатная система без линии и анимации. Запускаю этот код Кликните здесь для просмотра всего текста
Всё работает, перезагружаю kernel, всё работает, анимация показывается, вставляю ваш код, анимация работает, перезагружаю kernel снова просто координатная плоскость, иначе говоря, если в новый файл вставить ваш код анимация не работает, почему?
0
|
||||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||
| 09.01.2021, 23:51 | ||
|
Я настроил Visual Studio Code для Python 3.8 и коды работают. Первый код движение по кривой Безье. Второй по синусоиде с показом кривой. Плохо что одну и туже задачу можно рисовать 100500 способами .
1
|
||
|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 245
|
||||||
| 09.01.2021, 23:58 [ТС] | ||||||
|
Да, как оказалось, та же проблема, если вставить этот код и затем вставить ваш, анимация работает, но если вставить код в новый файл, будет статичная картинка, пока не понятно как это исправить.
Кликните здесь для просмотра всего текста
0
|
||||||
|
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
|
||||||
| 10.01.2021, 00:41 | ||||||
|
Bronzor, Матрица 6х6 это матрица Безье, если из ваших B0-B5 сделать полиномы (раскрыть скобки ), то матрица Безье это коэффициенты при t^5.. t^0 степени.
Матрица T - матрица степеней вектора времени. Если вектор t=0.5 (одна точка) T=[0.5**5, 0.5**4, 0.5**3,..0.5**0] Если вектор t=[0, 0.5, 1] (три точки), то матрица T=[[0**5, 0**4,..0**0], [0.5**5, 0.5**4,..0.5**0],[1**5, 1**4,..1**0]]. См. https://ru.wikipedia.org/wiki/... 1%8C%D0%B5 Т.о. мы ускоряем код, используя быстрое умножение матриц numpy, а не циклы. Добавлено через 20 минут Попробуйте добавить в конец скрипта
1
|
||||||
|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 245
|
|
| 10.01.2021, 12:20 [ТС] | |
|
0
|
|
|
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
|
|
| 10.01.2021, 12:33 | |
|
Так вы через Jupyter запускаете.. Там работать не будет. Запустите просто из комм.строки анаконды.
1
|
|
|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 245
|
|
| 10.01.2021, 12:34 [ТС] | |
|
u235, Notebook, а почему другая анимация работает, а эта нет?
0
|
|
|
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
|
|
| 10.01.2021, 12:48 | |
|
Bronzor, откуда же я знаю.
У меня нет кода другой анамации чтобы сравнить, а у вас есть. Вот и найдите различия.
1
|
|
|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 245
|
|||||||||||
| 10.01.2021, 13:59 [ТС] | |||||||||||
|
Оказывается два раза сверху не то скопировал, тоже самое всё, но эта анимация работает...
u235, Вставил %matplotlib qt5 перед созданием координатной плоскости (верно? fig = plt.figure()) и теперь анимация работает в отдельном окне.
Осталось понять как работает код. tau (что это за сокращение, кстати?) это одномерный массив состоящий из 1000 элементов от 0 до 1? P это двумерный массив, где хранятся координаты x,y моих контрольных точек. Mb это двумерный массив, где хранятся коэффициенты при t, Затем создаём прямоугольную сетку используя одномерные массивы xx и yy (от -5 до -1 с шагом -1), и зачем нужен параметр t здесь? не понял 25 строку. xx = матрица размерностью хх yy = матрица размерностью yy 28 снова не понял, но это возведение элемента массива yy в степень элемента массива xx? Затем создаём объект figure без осей Затем устанавливаем пределы x и y осей 35 не понял что происходит, но что-то присваивается переменным x и y Затем в цикле получаем координаты точек, отображаем их на графике красным цветом Добавляем маркер зелёного цвета (что значит coord[0,0], coord[0,1] ? и какие параметры отвечают за размер кружка, можно ли вместо маркера создать круг и его двигать?) Затем снимок камеры После того, как все кадры были получены, создаём анимацию?
0
|
|||||||||||
|
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
|
||||||
| 10.01.2021, 15:15 | ||||||
|
tau - параметр кривой Безье - меняется от 0 до 1 , 1000 - число точек из которых она состоит. Если сделать не 1000, а, например, 20, то на кривой будут изломы.
25 строка - (от 5 до 0 включительно) это степени, в которые будет возводится t. Посмотрите примеры np.meshgrid на оф. сайте numpy. На входе - два вектора, на выходе две матрицы-сетки. 28 - да, так и есть. 35 - Получаем два вектора координат X и Y из вектор tau - для статичного графика coord[0,0], coord[0,1] - координаты точки кривой, соответствующие параметру i/100 - центр кружка.
1
|
||||||
|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 245
|
||||||
| 10.01.2021, 15:31 [ТС] | ||||||
|
u235, вроде стало понятнее, а как переделать код в 3 контрольные точки? попробовал удалить координаты 3 точек, и последние три строки матрицы, но не заработало, видимо не всё так просто, также а как отобразить закрасить контрольные точки?
Нашёл вот такой идеальный код, мне бы анимировать точку и добавить возможность ввода конечной точки всё.
0
|
||||||
|
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
|
||||||
| 10.01.2021, 15:49 | ||||||
|
Bronzor, Для 3х контрольных точек нужна другая матрица Безье, 3x3, а не 5x5. Как ее считать я уже говорил.
Контрольные точки лучше хранить единой матрицей P, , а не в виде P0, P1... тогда достаточно вызвать что-то типа:
Работайте с матрицами и векторами как с единым целым, а не поэлементно. Почитайте хорошую книжку Роджерс Д., Адамс Дж. Математические основы машинной графики.
1
|
||||||
|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 245
|
||||||
| 10.01.2021, 16:20 [ТС] | ||||||
|
u235, Спасибо за разъяснения, пока что такой результат, осталось добавить возможность, чтобы пользователь вводил координаты последней контрольной точки P3.
1
|
||||||
|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 245
|
||||||
| 10.01.2021, 16:58 [ТС] | ||||||
|
u235, Добавил ввод, может перемудрил и как-то иначе можно? Правильно ли написал комментарии?
5 Введите y координату: -1
1
|
||||||
|
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
|
||||||
| 10.01.2021, 22:43 | ||||||
|
Все нормально, только код можно еще сократить. В цикле for не считать coord заново, а просто брать скажем каждый 10ый элемент из X , Y
Добавлено через 1 минуту типа
1
|
||||||
| 10.01.2021, 22:43 | |
|
Помогаю со студенческими работами здесь
20
Алгоритм вычисления максимального радиуса для сопряжения кривой Безье и отрезка
Directx. Как сделать анимацию объекта
Алгоритм движения касательной по кривой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|