Форум сайта python.su
-3
Функция вращения изображения по
окружности. Помогите пожалуйста
Офлайн
63
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()
Отредактировано 4kpt (Ноя. 21, 2012 22:49:15)
Офлайн
857
4kptnewx = 50*math.cos(angle*math.pi/180.0) # Не забываем переходить от градусов в радианы
>>> import math >>> math.radians(60) 1.0471975511965976 >>> math.degrees(_) 59.99999999999999 >>>
Офлайн
63
py.user.next
Можно и так…
Я показывал явно, что я беру и куда подставляю.
Офлайн
-3
что то я не понимаю..Что бы продолжить вращения что и где нужно изменить?
Офлайн
19
Модератор: Тема перемещена в центр помощи
Офлайн