Я пытаюсь вычислить значение x или значение y для точки на основе пересечения между линейной линией и краем окна. Высота и ширина окна 640 480. Я полагаю, что у меня правильная теория, но результаты получаются совсем не так, как ожидалось.
Код ниже - это 4 if
утверждения, которые представляют различные способы рисования линии. Например, если x3 > oX and y3 > oY
, то это означает, что направление линии идет вниз вправо. Причина, по которой я не использую операторы 2 if и рисую линию по всему экрану, заключается в том, что я пытаюсь показать путь линейного движущегося объекта от x3, y3 до пересечения экрана. Я определяю окончательную точку, используя формулу y=mx+c
и вычисляя c
, переставляя и используя x3 и y3, что эквивалентно x2 и y2 при математической речи. Затем я предполагаю, что конечная точка (px, py) будет пересекать либо верх, либо низ, в зависимости от того, в каком направлении движется линия, делая py = 480
или py = 0
. Я проверяю, правильно ли я принял пересечение с помощью оператора if, чтобы убедиться, что значение px
не выходит за границы экрана. Если значение находится за пределами экрана, я могу предположить, что значение px
равно 0 или 640, а затем рассчитать значение py
, используя формулу py = -m * px + c
.
Проблема заключается в том, что я не могу кажется, получить точные значения, которые находятся в пределах окна 480x640. Я не верю, что моя математическая теория ошибочна, но если бы кто-то мог объяснить мне это, было бы здорово. Заявления if ниже. Большое спасибо!
m = ((y3-oY)/(x3-oX))
if x3 > oX and y3 > oY:
c = y3 + m*x3
py = 480
px = (c - py)/m
if px > 640:
px = 640
py = -m * px + c
elif x3 < oX and y3 > oY:
c = y3 + m*x3
py = 480
px = (c - py)/m
if px < 0:
px = 0
py = -m * px + c
elif x3 > oX and y3 < oY:
c = y3 + m*x3
py = 0
px = (c - py)/m
if px > 640:
px = 640
py = -m * px + c
elif x3 < oX and y3 < oY:
c = y3 + m*x3
py = 0
px = (c - py)/m
if px > 0:
px = 0
py = -m * px + c