我有一个由斜率m表示的向量。然后是矩形(假设轴对齐),由左上角和右下角表示。 当然,可能存在许多具有斜率m并且与给定矩形相交的线。问题是在所有这些行中找出矩形内部的行截距长度最大的行。即,如果线在P1和P2处与矩形相交,则问题是找到P1P2长度最大的线方程。
我这样做了。设线为:y = m * x + c。然后找出矩形每边的交点,找出每对点之间距离函数的最大值。但它只会给我一个线段的长度,似乎有很多角落要处理。
有人可以建议一个更好的方法来做到这一点。
提前致谢。
答案 0 :(得分:0)
想想它就像你想要缩放三角形以适应矩形。考虑一个基本宽度为1的三角形。
我们知道dy / dx = m,所以具有相同斜率的三角形的高度为m。
现在取出矩形并计算出适合矩形内三角形的最大比例。对于积极的m:
min(rectWidth, rectHeight/m)
这是我们必须使用的比例来拟合矩形内的三角形。现在用pytagoras定理很容易得到交点的长度
scale = min(rectWidth, abs(m/rectHeight)) // m could be negative so we take abs
length = sqrt(scale*scale + scale*m*scale*m)
请注意,对于此长度的线,可能存在许多可能的解决方案,我们可以肯定,对于正m(向上的三角形),它将适合矩形的左下角,而对于负m(三角形朝下) )它将适合右上角。
因此,假设您的矩形由4个值minX,minY,maxX,maxY
组成如果m为正,则该线在minX minY处相交,并在
处退出矩形[minX + scale, minY + (m * scale)]
如果m为负,则该线在maxX maxY处相交并退出
处的矩形[maX - scale, maxY + (m * scale)] (noting that m is negative)
现在你需要处理的是斜率为0,这是微不足道的。