Найти - Пользователи
Полная версия: Анимация
Начало » Центр помощи » Анимация
1
Vadimoto
Функция вращения изображения по
окружности. Помогите пожалуйста
4kpt
Vadimoto.
Применяем параметрическое уравнение: x = x0 + r*cos(угол), y = y0 +r*sin(угол) для 0<= угол <= pi, т.е. каждая последующая точка определяется углом, на который мы проворачиваем рисунок. Угол Вы задаете сами.

Но есть один нюанс: изменение х связано с изменением у, но не линейно. Учитывая, что функция move требует размер приращения по отдельным координатам его нужно предварительно высчитать. Для рассчетов будем использовать то-же параметрическое уравнение, но корректрируем результат по последнему значению, т.е.
угол 0 – запомнили х(0) и у(0)
угол 10 – рассчитываем х(10) и у(10)
(чтобы узнать размер приращения необходимо от х(0) отнять х(10), а от у(10) отнять у(0))
угол 20 – расчитываем х(20) и у(20)
(чтобы узнать следующее приращение необходимо от х(10) отнять х(20), а от у(20) отнять у(10))
и т.п.
Код привожу ниже. Код рисует только дугу от 180 до 90 градусов. Остальную часть кода попробуй сделать самостоятельно…
from Tkinter import *
import math
import time
root = Tk()
tuk = PhotoImage(file = "001.gif")
cnv = Canvas(root, height = 400, width = 400)
cnv.pack()
S = cnv.create_image(150, 200, image = tuk, tag = "tuk")
root.focus_force()
def move_tuk(event = None):
    angle = 0
    lastx = 50
    lasty = 0
    for t in range(9):
        time.sleep(0.1)
        angle += 10                                 # С каждым шагом увеличиваем угол на 10
        newx = 50*math.cos(angle*math.pi/180.0)     # Не забываем переходить от градусов в радианы
        newy = 50*math.sin(angle*math.pi/180.0)     # Не забываем переходить от градусов в радианы
        deltax = lastx - newx                       # От предыдущего значения Х отнимаем новое - ищем приращение
        deltay = newy - lasty                       # От нового значения У отнимаем предыдущее - ищем приращение
        lastx = newx                                # Перезаписываем новую позицию виджета по Х, чтобы искать приращение от нее
        lasty = newy                                # Перезаписываем новую позицию виджета по У, чтобы искать приращение от нее
        cnv.move(S, deltax, -deltay)                # Непосредственно перемещаем...
        cnv.update_idletasks()
cnv.after(100, move_tuk)
root.mainloop()
py.user.next
4kpt
newx = 50*math.cos(angle*math.pi/180.0)     # Не забываем переходить от градусов в радианы
>>> import math
>>> math.radians(60)
1.0471975511965976
>>> math.degrees(_)
59.99999999999999
>>>
4kpt
py.user.next
Можно и так…
Я показывал явно, что я беру и куда подставляю.
Vadimoto
что то я не понимаю..Что бы продолжить вращения что и где нужно изменить?
cutwater
Модератор: Тема перемещена в центр помощи
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB