给定 window 框架内的两个点(x0,y0 和 x1,y1)- 您将使用什么方法将一条线延伸到 window 的边缘?

Given two points inside a window frame (x0,y0 and x1,y1) - What method would you used to extend a line to the edges of the window?

为了介绍计算机图形纸,我正在努力将由使用相同梯度的两个点定义的线延伸到 window 的边缘。很难解释,所以这张图片可能会有所帮助。

虚线是直线(x0,y0 to x1,y1)未定义的部分。

我们尝试了一些方法,使用直线的隐式方程 (ax+bx+c = 0) 并找到与 window 框架的所有四个边的交点。

非常感谢任何帮助!

您的第一项工作是检查 (x0, y0)(x1, y1) 是否不同。

非垂直线的隐式方程实际上是y = mx + c其中梯度m(y1 - y0) / (x1 - x0)cy轴上的截距,可以通过应用c = y1 - mx1c = y0 - mx0.

找到

获得 mc 的值后,您可以应用线方程在给定 x 点集(或反之亦然),以便将线绘制到所需的长度。

竖线的特点是x0等于x1。在这种情况下,您的情节只是一条在 x0.

处穿过 x 轴的线

另请注意,该线只会截取 2 条边(除非该线与其中一条边共线)。

你可以想出线性方程的范式:

n = (y1-y0, x0-x1)

(n为一点到另一点旋转90°的方向)

直线上点p的方程:

p * n = (x0, y0) * n

(p - (x0, y0)) * n = 0

*表示上面的标量积,下面没有。

所以要解的方程是

(px - x0) * (y1 - y0) + (py - y0) * (x0 - x1) = 0

所有坐标但pxpy(点的x和y坐标)给出,pxpy之一由你想相交的一面。但是,如果您要求解此方程(horizontal/vertical 行),请当心除以 0。

当你有隐式方程时

ax + by + c = 0

和window边坐标Left,Top,Right,Bottom(Left和Top可能为零),然后你可以将这些坐标代入方程并检查计算点是否超过window的边框。

例如,要获得与右边缘的交点,请替换为 Right x 坐标

a * Right + b * y + c = 0
if b = 0 then
   no intersection (vertical)  
else
   y =  (a * Right + c ) / b    
check whether Top <= y <= Bottom