-3

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

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

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

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

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

如何在 Tkinter Canvas 上的 python 中旋转多边形?

4

2 回答 2

2

您的帖子暗示难以理解如何使用复数旋转三角形。在阅读了您回复我的回答的评论后,我编辑了我的代码示例以演示一种从键盘输入获取角度的方法。我没有使用 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()
于 2011-06-26T03:33:57.927 回答
0

任何事物的旋转最好通过将每个点 (x,y) 表示为复数 x + iy 然后通过乘以复数 cos(angle) + i sin(angle) 来旋转每个点

于 2015-12-04T18:11:24.653 回答