尝试按用户inpu标记图形中的点

2024-05-15 19:01:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python中的CS项目上遇到了问题,每当我认为我快要解决问题时,它就不起作用了。你知道吗

我的老师要求我们在实际窗口上(而不是在shell中)显示靠近中点的直线的中点坐标。这是我目前的代码:

win = GraphWin("Exercise 8 Page 119", 400,400)
for i in range(1):
    p1 = win.getMouse()
    p1.draw(win)
    p1.setFill("black")
    p2 = win.getMouse()
    p2.draw(win)
    p2.setFill("black")
    line = Line(Point(p1.getX(),p1.getY()), Point(p2.getX(), p2.getY()))
    line.draw(win)

    # midpoint
    midpoint = line.getCenter()
    midpoint.draw(win)
    midpoint.setFill("cyan")


    import math
    # midpoint math
    yMid = p2.getY()+p1.getY()/2
    xMid = p2.getX()+p1.getX()/2
   # midpoint text
    midpointLabel = Text(Point(xMid+0.5, yMid+0.5), "midpoint is: " + "(" + str(xMid) + "," + str(yMid) + ")")
    midpointLabel.draw(win)

每当我测试它的中点去某个地方随机,或我看不到它在所有。我好像不能每次都把坐标放在接近实际中点的地方。这些都是老师的准确的话“这个程序将有中点标记,稍微偏离实际位置的中点线。”

请帮帮我!谢谢!你知道吗


Tags: line老师winpointblackp2drawp1
1条回答
网友
1楼 · 发布于 2024-05-15 19:01:37

我认为这个问题是一个简单的数学错误:

yMid = p2.getY()+p1.getY()/2
xMid = p2.getX()+p1.getX()/2

应该是:

yMid = (p2.getY() + p1.getY()) / 2
xMid = (p2.getX() + p1.getX()) / 2

完整代码:

from graphics import *

win = GraphWin("Exercise 8 Page 119", 400, 400)

p1 = win.getMouse()
p1.setFill("black")
p1.draw(win)

p2 = win.getMouse()
p2.setFill("black")
p2.draw(win)

line = Line(p1, p2)
line.draw(win)

# midpoint
midpoint = line.getCenter()
midpoint.setFill("cyan")
midpoint.draw(win)

# midpoint math
yMid = (p2.getY() + p1.getY()) / 2
xMid = (p2.getX() + p1.getX()) / 2
# midpoint text
midpointLabel = Text(Point(xMid + 0.5, yMid + 0.5), "midpoint is: ({}, {})".format(xMid, yMid))
midpointLabel.draw(win)

win.getMouse()
win.close()

相关问题 更多 >