Math 具有最大线段长度的直线和矩形的交点

Math 具有最大线段长度的直线和矩形的交点,math,graphics,Math,Graphics,我有一个用斜率m表示的向量。然后是矩形(假设轴对齐),由左上角和右下角表示。 当然,可能有许多斜率为m且与给定矩形相交的直线。问题是找出矩形内截距长度最大的直线。i、 例如,如果直线与P1和P2处的矩形相交,则问题在于找到P1P2长度最大的直线方程 我是这样进行的。设直线为:y=m*x+c。然后求出矩形每边的交点,求出每对点之间距离函数的最大值。但它只会给我线段的长度,而且似乎有很多转角的情况需要处理 请任何人提出一个更好的方法来做这件事 提前谢谢。考虑一下,就像你想缩放一个三角形以适应矩形一样

我有一个用斜率m表示的向量。然后是矩形(假设轴对齐),由左上角和右下角表示。 当然,可能有许多斜率为m且与给定矩形相交的直线。问题是找出矩形内截距长度最大的直线。i、 例如,如果直线与P1和P2处的矩形相交,则问题在于找到P1P2长度最大的直线方程

我是这样进行的。设直线为:y=m*x+c。然后求出矩形每边的交点,求出每对点之间距离函数的最大值。但它只会给我线段的长度,而且似乎有很多转角的情况需要处理

请任何人提出一个更好的方法来做这件事


提前谢谢。

考虑一下,就像你想缩放一个三角形以适应矩形一样。考虑一个宽度为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的斜率,这很简单。

这似乎类似于我的一个问题:概念是相同的,但我有一个角度,以度为单位,因此如果矩形是45°的正方形,最大长度等于对角线(三角形的斜边)。我怎样才能改变这个公式,使它也适用于我的情况?