2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 44
|
||||||
1 | ||||||
Как сделать анимацию движения объекта по кривой (алгоритм Безье)08.01.2021, 17:01. Просмотров 2104. Ответов 25
Смог написать программу для рисования кривой используя алгоритм Безье (anaconda), можете пожалуйста помочь, что нужно добавить, чтобы получилась анимация движения, например круга по этой кривой. Просят использовать ffmpeg, celluloid, matplotlib для анимации и Tkinter или что-то похожее для графического интерфейса, читал про библиотеки, но пока туго с пониманием того, как добиться нужного результата, надеюсь на вашу помощь.
Хочется, чтобы было вот так:
0
|
|
08.01.2021, 17:01 | |
Как сделать анимацию движения велосипеда? Как сделать анимацию движения по трассе Directx. Как сделать анимацию объекта Алгоритм движения касательной по кривой |
|
1080 / 692 / 114
Регистрация: 12.10.2013
Сообщений: 4,587
|
|
08.01.2021, 20:32 | 2 |
Никогда такого не видел. На википедии формула в одну строку, что это за монстр и зачем?
Это наверно высокой степени. Их вроде как никто не использует. Набирают кривую из кусков квадратичной кривой. Можно легко сделать сложной формы и замкнуть. Как правильно задать систему урАвнений для кубических сплайнов? Для анимации по таймеру на каждом кадре увеличиваете параметр t, подставляете в формулу кривой получаете координаты точки меняются по времени. Когда будет 2 кривых вместе то нужно будет завести два параметра, один общий t0 от 0 до 2 и второй t должен расти от 0 до 1 смотря какому диапазону принадлежит t0.Чтобы точка на кривой прошла сначала одну кривую затем вторую.
0
|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 44
|
|
09.01.2021, 11:29 [ТС] | 3 |
Это 6 контрольных точек, можно и с двумя, мне главное понять, желательно код с маленькими пояснениями, как на моей кривой нарисовать круг и заставить его двигаться по этой кривой.
0
|
1080 / 692 / 114
Регистрация: 12.10.2013
Сообщений: 4,587
|
|||||||||||||||||||||
09.01.2021, 13:56 | 4 | ||||||||||||||||||||
В гугле "point animation python"
Включил “картинки” смотрю где 1 точка а не 100500. https://stackoverflow.com/ques... f-a-circle Поменял строку
Тут другой с экспортом в mp4. https://medium.com/@kirthi.tej... 0e075e5c6e закоментил экспорт и добавил
1
|
837 / 555 / 155
Регистрация: 07.11.2019
Сообщений: 1,304
|
||||||
09.01.2021, 15:35 | 5 | |||||
1
|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 44
|
||||||
09.01.2021, 23:50 [ТС] | 6 | |||||
Excalibur921, В anaconda ни один код не заработал, нету анимации просто статичная картинка. Как я понимаю, первый код это движение точки по кругу, а второй по синусоиде, а как передвигать по точкам кривой Безье?
u235, Всё работает, большое спасибо за код, но можно побольше объяснений, откуда взялась матрица 6 на 6, почему именно такие значения, зачем нужна T матрица, meshgrid? какой параметр отвечает за ускорение/замедление передвижения маркера? Добавлено через 17 минут u235, Анимация почему-то работает, только если добавить строчку %matplotlib qt, а затем удалить её, если просто скопировать код и запустить, отображается просто координатная система без линии и анимации. Запускаю этот код Кликните здесь для просмотра всего текста
Всё работает, перезагружаю kernel, всё работает, анимация показывается, вставляю ваш код, анимация работает, перезагружаю kernel снова просто координатная плоскость, иначе говоря, если в новый файл вставить ваш код анимация не работает, почему?
0
|
1080 / 692 / 114
Регистрация: 12.10.2013
Сообщений: 4,587
|
|
09.01.2021, 23:51 | 7 |
Не знаю что такое anaconda.
Я настроил Visual Studio Code для Python 3.8 и коды работают. Первый код движение по кривой Безье. Второй по синусоиде с показом кривой. Плохо что одну и туже задачу можно рисовать 100500 способами .
1
|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 44
|
||||||
09.01.2021, 23:58 [ТС] | 8 | |||||
Да, как оказалось, та же проблема, если вставить этот код и затем вставить ваш, анимация работает, но если вставить код в новый файл, будет статичная картинка, пока не понятно как это исправить.
Кликните здесь для просмотра всего текста
0
|
837 / 555 / 155
Регистрация: 07.11.2019
Сообщений: 1,304
|
||||||
10.01.2021, 00:41 | 9 | |||||
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
Сообщений: 44
|
|
10.01.2021, 12:20 [ТС] | 10 |
0
|
837 / 555 / 155
Регистрация: 07.11.2019
Сообщений: 1,304
|
|
10.01.2021, 12:33 | 11 |
Так вы через Jupyter запускаете.. Там работать не будет. Запустите просто из комм.строки анаконды.
1
|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 44
|
|
10.01.2021, 12:34 [ТС] | 12 |
u235, Notebook, а почему другая анимация работает, а эта нет?
0
|
837 / 555 / 155
Регистрация: 07.11.2019
Сообщений: 1,304
|
|
10.01.2021, 12:48 | 13 |
Bronzor, откуда же я знаю.
![]()
1
|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 44
|
|||||||||||
10.01.2021, 13:59 [ТС] | 14 | ||||||||||
Оказывается два раза сверху не то скопировал, тоже самое всё, но эта анимация работает...
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
|
837 / 555 / 155
Регистрация: 07.11.2019
Сообщений: 1,304
|
||||||
10.01.2021, 15: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
Сообщений: 44
|
||||||
10.01.2021, 15:31 [ТС] | 16 | |||||
u235, вроде стало понятнее, а как переделать код в 3 контрольные точки? попробовал удалить координаты 3 точек, и последние три строки матрицы, но не заработало, видимо не всё так просто, также а как отобразить закрасить контрольные точки?
Нашёл вот такой идеальный код, мне бы анимировать точку и добавить возможность ввода конечной точки всё.
0
|
837 / 555 / 155
Регистрация: 07.11.2019
Сообщений: 1,304
|
||||||
10.01.2021, 15:49 | 17 | |||||
Bronzor, Для 3х контрольных точек нужна другая матрица Безье, 3x3, а не 5x5. Как ее считать я уже говорил.
Контрольные точки лучше хранить единой матрицей P, , а не в виде P0, P1... тогда достаточно вызвать что-то типа:
Работайте с матрицами и векторами как с единым целым, а не поэлементно. Почитайте хорошую книжку Роджерс Д., Адамс Дж. Математические основы машинной графики.
1
|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 44
|
||||||
10.01.2021, 16:20 [ТС] | 18 | |||||
u235, Спасибо за разъяснения, пока что такой результат, осталось добавить возможность, чтобы пользователь вводил координаты последней контрольной точки P3.
1
|
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 44
|
||||||
10.01.2021, 16:58 [ТС] | 19 | |||||
u235, Добавил ввод, может перемудрил и как-то иначе можно? Правильно ли написал комментарии?
5 Введите y координату: -1
1
|
837 / 555 / 155
Регистрация: 07.11.2019
Сообщений: 1,304
|
||||||
10.01.2021, 22:43 | 20 | |||||
Все нормально, только код можно еще сократить. В цикле for не считать coord заново, а просто брать скажем каждый 10ый элемент из X , Y
Добавлено через 1 минуту типа
1
|
10.01.2021, 22:43 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Сделать анимацию движения нескольких эллипсов
Как сделать эффект движения объекта относительно заднего фона
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |