我正在尝试根据直线和窗口边缘之间的交点计算点的x值或y值。窗口的高度和宽度为640,480。我相信我的理论是正确的,但得出的结果与预期的相差很大。
下面的代码是4条if
语句,它们代表绘制线条的不同方式。例如,如果x3 > oX and y3 > oY
,则表示直线的方向右移。我不使用2 if语句并在整个屏幕上画线的原因是因为我试图显示线性移动对象从x3,y3到屏幕相交的路径。我通过使用y=mx+c
公式并通过重新排列并使用x3和y3来计算c
来得出最后一点,这在数学上讲时等于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