将线条延伸到屏幕边缘

时间:2015-01-19 01:11:47

标签: c++ algorithm math geometry

我在(0,0,w,h)有一个边界框,在那里有一个点(x,y),以及指向某个随机方向的方向向量(dx,dy),我是什么尝试做的是从该点创建一条线,在该方向上到边界框的边缘。

查看下图,黑点是点,箭头是方向矢量,红线是我想要的结果线。

我现在正在做的是简单地通过向量将线延长一些随机大数,保证将其放在框外,然后使用线剪裁算法来剪切它。这完全有效,但感觉就像一个非常hacky的解决方案,有更好的方法吗?

Example

1 个答案:

答案 0 :(得分:1)

首先,如何找到一条垂直线的交叉点。

设(x0,y0)为方框内的点,(dx,dy)为斜率。并且说你试图找到与垂直线y = b的交点。

x0 + tdx和y0 + tdy是该行上的点。因此,线在y1处与垂直线相交,使得y1 = y0 + tdy = b(t> = 0)。因此求解t(t =(b-y0)/ dy)并使用相同的t得到x1 = x0 + tdx。

同样,您也可以找到带水平线的交叉点。

您应该找到线与两条边相交的四个点。在大多数情况下,其中两个将有负t,丢弃它们。在另一个中,选择一个最低的那个,这就是你的答案。

进一步优化:

根据dx和dy的符号,该线可以与两条边之一相交。例如,如果两者都是正数,那么它可能与顶部或右侧相交,依此类推。您只能计算那两条边的t,然后选择一条最低的边。