试图在tkinter python中旋转一个带有复数的三角形

时间:2011-06-25 23:35:13

标签: python rotation tkinter complex-numbers

第一种方法是我的,另外两种来自这里 http://effbot.org/zone/tkinter-complex-canvas.htm

所以我调用rotate方法调用第二个调用第一个方法。第一个从传递的角度获取xy坐标,然后使用它们来转换三角形。

self.x和self.y是三角形画布上的坐标,三角形下线的中间

我想还有另一种方法可以做到这一点,简单得多。

我已经找到了这个顺便说一句,但它并没有真正帮助

How do I rotate a polygon in python on a Tkinter Canvas?

2 个答案:

答案 0 :(得分:2)

您的帖子暗示难以理解如何使用复数旋转三角形。 在回答我的回答阅读你的评论后,我编辑了我的代码示例,以演示从键盘输入获取角度的方法。 我对Tkinter没有经验,所以也许有人可以帮助我采用更先进的方法。 从Tkinter: Events and BindingsThe Tkinter Entry Widget

收集

当您输入按键事件处理程序时,使用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()

答案 1 :(得分:0)

通过将每个点(x,y)表示为复数x + iy,最好通过乘以comples数cos(角度)+ i sin(角度)

来旋转每个点。