检查点击是否在图形形状内(圆圈)

时间:2016-03-22 04:58:06

标签: python python-3.x window zelle-graphics

我正在使用图形模块参考" graphics.py"

如何编写一个函数,如果用户在一个圆圈内单击它应该返回True,否则它应该返回False。

我不太确定如何开始。我想测试用户的点击是否在一个形状内。

2 个答案:

答案 0 :(得分:1)

使用getMouse()。这会暂停用户单击,然后在窗口中返回鼠标的位置(作为Point)。 checkMouse()将返回鼠标的位置而无需单击。

例如:

win = GraphWin('Example Window', 100, 100)
mousePos = win.getMouse()

现在用它来确定用户是否点击了一个圆圈:

def isClicked(circle, mousePos):
    distance = sqrt(((mousePos.x - circle.x) ** 2) + ((mousePos.y - circle.y) ** 2))
    return distance < circle.radius

这将是你的功能。

将使用该函数的代码示例:

from graphics import *
from math import sqrt

def isClicked(circle, mousePos):
    distance = sqrt(((point.x - circle.x) ** 2) + 
                    ((point.y - circle.y) ** 2))
    return distance < circle.radius

def main():
    win = GraphWin('Example Window', 100, 100)
    circle = Circle(Point(50,50), 25)
    circle.setFill('blue')
    circle.draw(win)
    mousePos = win.getMouse()
    if isClicked(circle, mousePos):
        print "You clicked in the circle!"
    else:
        print "You clicked outside the circle!"

main()

答案 1 :(得分:0)

  

还有另一种方法,不使用&#34;来自数学导入排序&#34;?

从字面上理解你的请求,并修复Dardar Fishcake的例子中的错误,我们可以这样做:

from graphics import *

def isClicked(circle, point):
    center = circle.getCenter()

    distance = ((point.getX() - center.getX()) ** 2 + (point.getY() - center.getY()) ** 2) ** 0.5

    return distance < circle.radius

def main():
    win = GraphWin('Example', 100, 100)

    circle = Circle(Point(50, 50), 25)
    circle.setFill('blue')
    circle.draw(win)

    while True:
        mousePos = win.getMouse()

        if isClicked(circle, mousePos):
            print("You clicked in the circle!")
            break
        else:
            print("You clicked outside the circle!")

    win.close()

main()

我们将x ** 0.5替换为sqrt(x)。此外,示例逻辑略有变化 - 这一点将继续接受点击,直到您点击圈子为止。