|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 245
|
||||||
Как сделать анимацию движения объекта по кривой (алгоритм Безье)08.01.2021, 17:01. Показов 11524. Ответов 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
|
||||||||||||||||||||||
|
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
|
||||||
| 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
|
||||||
|
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
|
||||||
| 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
|
|
|
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
|
|
| 10.01.2021, 12:33 | |
|
Так вы через Jupyter запускаете.. Там работать не будет. Запустите просто из комм.строки анаконды.
1
|
|
|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 245
|
|
| 10.01.2021, 12:34 [ТС] | |
|
u235, Notebook, а почему другая анимация работает, а эта нет?
0
|
|
|
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
|
|
| 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
|
|||||||||||
|
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
|
||||||
| 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
|
||||||
|
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
|
||||||
| 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
|
||||||
|
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
|
||||||
| 10.01.2021, 22:43 | ||||||
|
Все нормально, только код можно еще сократить. В цикле for не считать coord заново, а просто брать скажем каждый 10ый элемент из X , Y
Добавлено через 1 минуту типа
1
|
||||||
| 10.01.2021, 22:43 | |
|
Помогаю со студенческими работами здесь
20
Алгоритм вычисления максимального радиуса для сопряжения кривой Безье и отрезка
Directx. Как сделать анимацию объекта
Алгоритм движения касательной по кривой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|