Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/55: Рейтинг темы: голосов - 55, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 245

Как сделать анимацию движения объекта по кривой (алгоритм Безье)

08.01.2021, 17:01. Показов 12068. Ответов 25

Студворк — интернет-сервис помощи студентам
Смог написать программу для рисования кривой используя алгоритм Безье (anaconda), можете пожалуйста помочь, что нужно добавить, чтобы получилась анимация движения, например круга по этой кривой. Просят использовать ffmpeg, celluloid, matplotlib для анимации и Tkinter или что-то похожее для графического интерфейса, читал про библиотеки, но пока туго с пониманием того, как добиться нужного результата, надеюсь на вашу помощь.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import numpy as np               
import matplotlib.pyplot as plt  
 
img = np.ones((600,600,3))
 
def DrawBezier(x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5):
    
    x = x0
    y = y0
    t = 0
    ts = 0.001
 
    while t <= 1.0:
        
        B0 = (1-t)*(1-t)*(1-t)*(1-t)*(1-t)
        B1 = 5*t*(1-t)*(1-t)*(1-t)*(1-t)
        B2 = 10*t*t*(1-t)*(1-t)*(1-t)
        B3 = 10*t*t*t*(1-t)*(1-t)
        B4 = 5*t*t*t*t*(1-t)
        B5 = t*t*t*t*t
        
        x = int(x0*B0 + x1*B1 + x2*B2 + x3*B3 + x4*B4 + x5*B5)
        y = int(y0*B0 + y1*B1 + y2*B2 + y3*B3 + y4*B4 + y5*B5)
        
        img[y,x] = (1,0,0)
        t=t+ts 
        
    return
   
DrawBezier(180,290,140,335,50,170,10,15,360,240,140,67)
    
%matplotlib notebook
plt.figure(figsize=(10,8), dpi = 100, facecolor='w')
plt.imshow(img)
plt.gca().invert_yaxis()
plt.show()
Название: jr.JPG
Просмотров: 237

Размер: 10.2 Кб

Хочется, чтобы было вот так:
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.01.2021, 17:01
Ответы с готовыми решениями:

Как сделать анимацию движения объекта по кругу?
Нужна помощь!:-#Importing required libraries %matplotlib notebook import matplotlib.pyplot as plt import numpy as np from celluloid...

Как сделать анимацию движения по трассе
Всем привет! Очень нужна консультацию по такому вопросу: нужно сделать анимацию движения, скажем, точки, по гоночной трассе. Сейчас поясню...

Как сделать анимацию движения велосипеда?
Не понимаю как сделать анимацию движения велосипеда. Вот мой проект(без анимации):

25
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 245
11.01.2021, 13:12  [ТС]
Студворк — интернет-сервис помощи студентам
u235, А есть комментарии по поводу комментариев?
0
5534 / 2887 / 573
Регистрация: 07.11.2019
Сообщений: 4,813
11.01.2021, 13:19
Bronzor, нет, вроде бы все так, все по делу.
1
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
11.01.2021, 16:15
Цитата Сообщение от Bronzor Посмотреть сообщение
А есть комментарии по поводу комментариев?
Если честно код визуально сильно бреинфаковый и что-то очень длинный для такой ерунды. Если бы писал такое с нуля то было один цикл for который рисует кривую отрезками.

И вот такие коменты
Цитата Сообщение от Bronzor Посмотреть сообщение
(матрица степеней вектора времени)
Звучит круто…но хз что это. Как у времени может быть вектор…возникает образ Доктора Стрейнджа который управлял временем.

Что это?
Цитата Сообщение от Bronzor Посмотреть сообщение
# Базисная матрица Безье (коэффициенты при t^2,t^1,t^0)
Неплохо бы сначала задать где рисуем и отделить это визуально. А уже потом что рисуем.
Кстати почему нет таких в коментах.
## --------------
И таких ##========


Почему одни точки задают а другие прописаны в коде? За что их так?
Неплохо бы вообще таскать точки мышкой и убрать это эхо консольной эпохи типа введите координаты аля урок ЭВМ на бейске в школе 30 лет назад =).
Цитата Сообщение от Bronzor Посмотреть сообщение
print('Введите х координату:')
x_end = input()
Что за псевдонаучные Тау? Откуда это вообще и зачем? В кривых Безье параметр t.

Вот этот извращенский метод задания цвета,
Цитата Сообщение от Bronzor Посмотреть сообщение
color = '#0000FF'
пофиксить бы на понятные простым смертным типа RGB 244,233,234.
1
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 245
11.01.2021, 20:46  [ТС]
Excalibur921,
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Если честно код визуально сильно бреинфаковый и что-то очень длинный для такой ерунды. Если бы писал такое с нуля то было один цикл for который рисует кривую отрезками.
Иначе пока никак, я и имеющий код плохо понимаю и сам не смогу ещё раз написать, было всего 7 практических задания по python, на первом уроке рассказали про input, print, циклы, условные ветвления и всё, после этого сразу заставили писать алгоритм Брезенхема для рисования линий, кругов, кривые Безье, перемещение, поворачивание, масштабирование объектов, теперь уже просят анимацию, графический интерфейс на tkinter, ничего непонятно, только требуют...

Цитата Сообщение от Excalibur921 Посмотреть сообщение
Звучит круто…но хз что это. Как у времени может быть вектор…возникает образ Доктора Стрейнджа который управлял временем.
Сам до конца не понял, всё обрывисто и непонятно как соединить имеющеюся информацию в единое целое. Знаю, что контрольные точки задают направление кривой (вектор движения), в параметрической форме кубическая кривая Безье имеет параметр t различной степени и всё...

Цитата Сообщение от Excalibur921 Посмотреть сообщение
Неплохо бы сначала задать где рисуем и отделить это визуально. А уже потом что рисуем.
Кстати почему нет таких в коментах.
## --------------
И таких ##========
Да стоит разделять главные куски это пожалуй сделаю.

Цитата Сообщение от Excalibur921 Посмотреть сообщение
Почему одни точки задают а другие прописаны в коде? За что их так?
Неплохо бы вообще таскать точки мышкой и убрать это эхо консольной эпохи типа введите координаты аля урок ЭВМ на бейске в школе 30 лет назад =).
Да, выглядит топорно)) В идеале хотелось бы полноценный графический интерфейс, выбор количества точек, их перемещение, задание точных координат, анимация рисование, добавление реальных объектов (картинка, круг, квадрат) , но через 3 дня уже сдавать работу, а я и так в непонимании что происходит и нужно начать с базовых уроков, если бы кто-то помог и закомментировал было бы супер, но я и так очень благодарен, что мне помогли.

Цитата Сообщение от Excalibur921 Посмотреть сообщение
Что за псевдонаучные Тау? Откуда это вообще и зачем? В кривых Безье параметр t.
Не только параметр t, но ещё и контрольные точки, по условию моего задания, координаты последней точки кривой нужно писать с помощью input()

Цитата Сообщение от Excalibur921 Посмотреть сообщение
Вот этот извращенский метод задания цвета,
Согласен, но это меньшее из бед, пока что можно оставить.
0
2 / 2 / 0
Регистрация: 13.10.2018
Сообщений: 245
14.01.2021, 16:30  [ТС]
u235,
Можно пожалуйста комментарий, а то не совсем ясно, что это значит.
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Звучит круто…но хз что это. Как у времени может быть вектор…возникает образ Доктора Стрейнджа который управлял временем.
Что это?
Добавлено через 2 часа 18 минут
u235, Также имеется вопрос, а что нужно изменить, чтобы координаты можно было задавать прямо в окне?
То есть появляется всплывающее окно, например, справа пишем координаты последней точки и слева появляется анимация?
0
5534 / 2887 / 573
Регистрация: 07.11.2019
Сообщений: 4,813
14.01.2021, 20:24
Bronzor, как вычислить значение полинома заданного коэффициентами? Скалярно умножить вектор коэффициентов на вектор степеней. Пример: p(t)=2t^2-3t+1. Вектор коэффициентов [1, -3, 2], вектор степеней [t**0, t**1, t**2]. Такой вектор степеней t - строка из матрицы Вандермонда. Кстати, можно было бы использовать np.vander().
Для задания координат в окне надо импортировать что-то типа tkinter или Qt хотя бы для того чтобы отрисовать это окно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.01.2021, 20:24

Алгоритм вычисления максимального радиуса для сопряжения кривой Безье и отрезка
Здравствуйте! Пытаюсь вычислить максимальный радиус гладкого сопряжения кубической кривой Безье (P0, P1, P2, P3) и отрезка (P3,P4) - на...

Как сделать анимацию передвижения объекта в QT
Как сделать анимацию передвижения виджета слева на право.

Directx. Как сделать анимацию объекта
Нашел пример программы при помощи которой можно открыть 3д модель в формате .x. Так же имеется файл анимаций .ifp. Как можно заставить...

Алгоритм движения касательной по кривой
Никак не могу реализовать алгоритм движения касательной по кривой (у меня есть разные кривые sin, cos) если есть идеи пожалуйста...

Алгоритм движения касательной по кривой
у меня не получается перевести с Canvas в Chart(((((((( помогите кто знает как это сделать(можно и на любой другой функции пример...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru