第一种方法是我的,其他两种来自这里 http://effbot.org/zone/tkinter-complex-canvas.htm
所以我调用调用第一个调用第二个的旋转方法。第一个从传递的角度获取 xy 坐标,然后与它们一起平移三角形。
self.x 和 self.y 是三角形画布上的坐标,三角形下边线的中间
我想还有另一种方法可以做到这一点,更简单。
我找到了这个顺便说一句,但它并没有真正帮助
第一种方法是我的,其他两种来自这里 http://effbot.org/zone/tkinter-complex-canvas.htm
所以我调用调用第一个调用第二个的旋转方法。第一个从传递的角度获取 xy 坐标,然后与它们一起平移三角形。
self.x 和 self.y 是三角形画布上的坐标,三角形下边线的中间
我想还有另一种方法可以做到这一点,更简单。
我找到了这个顺便说一句,但它并没有真正帮助
您的帖子暗示难以理解如何使用复数旋转三角形。在阅读了您回复我的回答的评论后,我编辑了我的代码示例以演示一种从键盘输入获取角度的方法。我没有使用 Tkinter 的经验,所以也许有人可以提供更先进的方法。从Tkinter 收集:事件和绑定以及Tkinter 条目小部件
当您输入按键事件处理程序时,使用 text.get() 检索的 Entry 小部件的文本不包括最新的按键字符。
输入的角度以度为单位,可以是负数。
from Tkinter import *
import tkSimpleDialog as tks
import cmath,math
root = Tk()
c = Canvas(root,width=200, height=200)
c.pack()
# keypress event
def key(event):
text.focus_force()
ch=event.char
# handle backspace
if ch=='\x08':
if len(text.get())>1 :
entry_text=text.get()[:-1]
if entry_text=='-': entry_text='0'
else:
entry_text='0'
else:
entry_text=text.get()+ch
# we want an integer
try:
angle_degrees=int(entry_text)
cangle = cmath.exp(angle_degrees*1j*math.pi/180)
offset = complex(center[0], center[1])
newxy = []
for x, y in triangle:
v = cangle * (complex(x, y) - offset) + offset
newxy.append(v.real)
newxy.append(v.imag)
c.coords(polygon_item, *newxy)
except ValueError:
print "not integer"
text = Entry(root)
text.bind("<Key>", key)
text.pack()
text.focus_force()
# a triangle
triangle = [(50, 50), (150, 50), (150, 150)]
polygon_item = c.create_polygon(triangle)
center = 100, 100
mainloop()
任何事物的旋转最好通过将每个点 (x,y) 表示为复数 x + iy 然后通过乘以复数 cos(angle) + i sin(angle) 来旋转每个点