2011-06-25 120 views
-3

第一種方法是我的旋轉與複數三角形,其他兩個是從這裏 http://effbot.org/zone/tkinter-complex-canvas.htm試圖在Tkinter的蟒蛇

,所以我打電話調用,調用的第一個,第二個的旋轉方法。第一個從傳遞的角度獲取xy座標,然後與它們一起工作來翻譯三角形。

self.x和self.y是三角形的畫布上的座標,三角形

的下線我想中間有另一種方式來做到這一點,要簡單得多。

和我順便說一句發現這一點,但它並沒有真正幫助

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

+0

目前尚不清楚你的問題是什麼。 –

+0

我想讓你嘗試在我的代碼中發現這個錯誤 – fps6

回答

2

您的文章暗​​示困難瞭解如何旋轉使用複數的三角形。 在閱讀您的評論以回覆我的回答之後,我編輯了我的代碼示例以演示從鍵盤輸入獲取角度的方法。 我沒有Tkinter的經驗,所以也許有人可以幫助採用更先進的方法。 從Tkinter: Events and BindingsThe Tkinter Entry Widget

蒐集當你輸入按鍵事件處理,輸入構件的文本,用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() 
+0

這就是我找到代碼(並編輯它)的地方。我需要與用戶給出的角度旋轉,而不是與鼠標旋轉 – fps6

+0

謝謝你好先生,完美的作品。 – fps6

0

roitation最好通過表達每一個點(X,Y),其爲複數做X + IY然後通過由情結編號COS(角度)+ I SIN(角)

乘以旋轉每個點