-3

最初の方法は私のもので、他の2つはここからです http://effbot.org/zone/tkinter-complex-canvas.htm

だから私は最初のものを呼び出す2番目のものを呼び出す回転メソッドを呼び出します。最初のものは、渡された角度から xy 座標を取得し、それらを使用して三角形を変換します。

self.x と self.y は、三角形のキャンバス上の座標であり、三角形の下線の中央です。

これを行うには、もっと簡単な別の方法があると思います。

そして、私はこれを見つけましたが、実際には役に立ちません

Tkinter Canvas で Python でポリゴンを回転するにはどうすればよいですか?

4

2 に答える 2

2

あなたの投稿は、複素数を使用して三角形を回転させる方法を理解するのが難しいことを暗示していました. 私の回答への返信であなたのコメントを読んだ後、コードサンプルを編集して、キーボード入力から角度を取得する方法を示しました。私は Tkinter の経験がないので、おそらく誰かがより最先端のアプローチを手伝ってくれるでしょう。Tkinterから収集: イベントとバインディング、およびTkinter エントリ ウィジェット

keypress イベント ハンドラに入ると、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 に答える