пытается повернуть треугольник с комплексными числами в tkinter python - PullRequest
0 голосов
/ 26 июня 2011

первый метод мой, остальные два отсюда http://effbot.org/zone/tkinter-complex-canvas.htm

, поэтому я вызываю метод rotate, который вызывает второй метод, который вызывает первый.первый получает координаты xy от переданного угла, а затем работает с ними, чтобы перевести треугольник.

self.x и self.y - это координаты на холсте треугольника, серединанижняя линия треугольника

я думаю, есть другой способ сделать это, намного проще.

и я нашел это, кстати, но это не очень помогает

Как повернуть многоугольник в python на холсте Tkinter?

Ответы [ 2 ]

2 голосов
/ 26 июня 2011

Ваш пост подразумевает трудности с пониманием, как вращать треугольники, используя комплексные числа.После прочтения вашего комментария в ответ на мой ответ я отредактировал пример кода, чтобы продемонстрировать способ получения угла ввода с клавиатуры.У меня нет опыта работы с Tkinter, поэтому, возможно, кто-то может помочь с более современным подходом.Получено из Tkinter: события и привязки и Виджет ввода Tkinter

При вводе обработчика события нажатия клавиши текст виджета Entry, полученный с помощью 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 голосов
/ 04 декабря 2015

вращение чего-либо лучше всего делать, выражая каждую точку (x, y) как комплексное число x + iy. Затем поверните каждую точку, умножив ее на общее число cos (угол) + i sin (угол)

...