在tkinter python中尝试使用复数旋转三角形

在tkinter python中尝试使用复数旋转三角形,python,rotation,tkinter,complex-numbers,Python,Rotation,Tkinter,Complex Numbers,第一种方法是我的,另外两种是从这里来的 所以我调用了rotate方法,它调用了第二个方法,第二个方法调用了第一个方法。第一个从传递的角度获取xy坐标,然后使用它们平移三角形 self.x和self.y是三角形画布上的坐标,即三角形下线的中间 我想还有另一种方法,更简单 顺便说一句,我找到了这个,但它并没有真正的帮助 你的帖子暗示你很难理解如何使用复数旋转三角形。 在阅读了您对我的回答的回复后,我编辑了我的代码示例,以演示一种从键盘输入获取角度的方法。 我没有使用Tkinter的经验,所以也许有

第一种方法是我的,另外两种是从这里来的

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

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

我想还有另一种方法,更简单

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


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

输入按键事件处理程序时,使用text.get()检索的输入小部件的文本不包括最新的按键字符

输入的角度以度为单位,可以为负值

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()
从Tkinter导入*
将tkSimpleDialog作为tks导入
导入cmath、数学
root=Tk()
c=画布(根,宽度=200,高度=200)
c、 包()
#按键事件
def键(事件):
text.focus_force()
ch=event.char
#手柄退格
如果ch='\x08':
如果len(text.get())>1:
entry_text=text.get()[:-1]
如果条目_text='1'-':条目_text='0'
其他:
条目\u text='0'
其他:
entry_text=text.get()+ch
#我们想要一个整数
尝试:
角度\度=整数(输入\文本)
cangle=cmath.exp(角度*1j*数学pi/180)
偏移量=复数(中心[0],中心[1])
newxy=[]
对于三角形中的x、y:
v=cangle*(复数(x,y)-偏移量)+偏移量
newxy.append(v.real)
newxy.append(v.imag)
c、 坐标(多边形_项,*newxy)
除值错误外:
打印“非整数”
text=条目(根)
text.bind(“,键)
text.pack()
text.focus_force()
#三角形
三角形=[(50,50),(150,50),(150,150)]
多边形\项=c.创建\多边形(三角形)
中心=100100
mainloop()

任何东西的旋转最好是将每个点(x,y)表示为复数x+iy,然后用复数cos(angle)+i sin(angle)乘以每个点进行旋转。

这就是我找到代码的地方(并对其进行了编辑)。我需要的是用户给定角度的旋转,而不是鼠标的旋转。我不清楚你的问题是什么。我希望你和我一起尝试找出代码中的错误