处理蟒蛇3的圆形坐标的Tinkinker周长

时间:2017-03-26 13:35:48

标签: python python-3.x math tkinter tkinter-canvas

我制作了一个小外星人项目来帮助学习tkinter中的图形,我遇到了一个问题。我试图让外星人的眼球留在眼睛里但仍然四处移动,但这需要我检测眼圈的边缘,这是一个圆圈。不确定coord如何在tkinter中工作(除了基础知识)所以任何帮助都会受到赞赏。谢谢!

from tkinter import *
from threading import Timer
import random
import time
global canvas, root

root = Tk()
root.title("Alien")
root.attributes("-topmost", 1)

canvas = Canvas(root, height=300, width =400)
canvas.pack()
Blinking = False

class Alien:
    def __init__(self):
        global canvas, root
        self.body = canvas.create_oval(100,150,300,250, fill = "green")
        self.eye = canvas.create_oval(170,70,230,130, fill = "white")
        self.eyeball = canvas.create_oval(190,90,210,110, fill = "black")
        self.mouth = canvas.create_oval(150,220,250,240, fill = "red")
        self.neck = canvas.create_line(200,150,200,130)
        self.hat = canvas.create_polygon(180,75,220,75,200,20, fill = "blue")
        self.words = canvas.create_text(200,800, text = "I'm an alien!", anchor="nw")
        root.update()

    def openMouth(self):
        global canvas, root
        canvas.itemconfig(self.mouth, fill = "black")
        root.update()
    def closeMouth(self):
        global canvas, root
        canvas.itemconfig(self.mouth, fill = "red")
        root.update()

    def burp(self, event):
        self.openMouth()
        canvas.itemconfig(self.words, text = "BURRRRP!")
        time.sleep(0.5)
        self.closeMouth()
    def moveEye(self,event):
        global root, canvas
        canvas.move(alien.eyeball , random.randint(-1,1) , random.randint(-1,1))
        root.update()

    def blink(self,event):
        canvas.itemconfig(self.eye, fill = "green")
        canvas.itemconfig(self.eyeball, state=HIDDEN)
        Blinking = True
        root.update()
    def unblink(self,event):
        canvas.itemconfig(self.eye, fill = "white")
        canvas.itemconfig(self.eyeball, state=NORMAL)
        Blinking = False
        root.update()



alien = Alien()
alien.openMouth()
time.sleep(1)
alien.closeMouth()
canvas.bind_all("<Button-1>", alien.burp)
canvas.bind_all("<KeyPress-a>", alien.blink)

Timer(2, alien.moveEye).start()
while not Blinking:
    alien.moveEye(event)
    if alien.moveEye.event.x > 190:
        canvas.move(alien.eyeball, -1 , 0)

1 个答案:

答案 0 :(得分:0)

半径为r的小圆位于半径为R的大圆内,如果

 (BigCenter.X - SmallCenter.x)^2 + (BigCenter.Y - SmallCenter.Y)^2 < (R - r)^2

^2表示平方值