Попытка обозначить точку на графике пользовательским вводом - PullRequest
0 голосов
/ 11 мая 2018

У меня проблемы с CS-проектом на Python, и всякий раз, когда я думаю, что приближаюсь к решению проблемы, это не работает.

Что мой учитель просит от нас, так это отобразить координаты средней точки линии, близкой к средней точке реального окна (не в оболочке).Пока это мой код:

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)

всякий раз, когда я проверяю его, средняя точка уходит в случайное положение, или я вообще не вижу его.Я не могу поместить координаты близко к фактической средней точке каждый раз.Это точные слова учителя: «У этой программы будет помечена средняя точка, слегка смещенная относительно фактического положения средней точки линии».

Пожалуйста, помогите мне!Спасибо!

1 Ответ

0 голосов
/ 14 мая 2018

Я бы сказал, что проблема в простой математической ошибке:

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()
...