Math 检测一个rect是否可以放入另一个rect

Math 检测一个rect是否可以放入另一个rect,math,rect,Math,Rect,这个问题不同于测试一个rect是否在另一个rect中 已知信息是两个矩形的边长 如何计算一个矩形是否可以放入另一个矩形 您可以很容易地剔除这两个简单的情况: 如果第二个较大的尺寸小于第一个较大的尺寸,并且对于较小的尺寸也是如此,则第二个尺寸适合内部 如果第二个的较大尺寸大于第一个的斜边,则第二个将不适合第一个 最困难的部分是确定它是否能以一个像草图中那样的角度嵌入。我不知道一个简单的公式——它可能需要一个简单的解决方案 这可能是一个很好的问题 补充道:我不能100%确定这是否正确,但我认为如果第

这个问题不同于测试一个rect是否在另一个rect中

已知信息是两个矩形的边长

如何计算一个矩形是否可以放入另一个矩形


您可以很容易地剔除这两个简单的情况:

  • 如果第二个较大的尺寸小于第一个较大的尺寸,并且对于较小的尺寸也是如此,则第二个尺寸适合内部
  • 如果第二个的较大尺寸大于第一个的斜边,则第二个将不适合第一个
  • 最困难的部分是确定它是否能以一个像草图中那样的角度嵌入。我不知道一个简单的公式——它可能需要一个简单的解决方案

    这可能是一个很好的问题

    补充道:我不能100%确定这是否正确,但我认为如果第二个斜边小于第一个斜边,那么它就合适了


    哎呀:不,我把它收回去。但是,如果第二个矩形的斜边大于第一个矩形的斜边,它就不合适了。

    首先要检查的当然是,矩形是否在两个轴对齐的方向上都适合另一个

    如果不是,唯一的选择是对角拟合,但实际上可能有许多角度适合它,困难不仅是猜测,而且确实是计算一个可能的角度,如果存在的话

    现在,请注意,如果内部矩形确实是对角拟合的,则可以旋转它,直到其相对的角接触到外部矩形的上边缘和下边缘,或者左右两侧。(在您的图表中,或多或少是第一个。)

    在这种情况下,您已经知道已将其安装在该一维中(在示例中为y轴)。然后,您必须计算其他维度中内部矩形的边界宽度,并对照外部框的宽度进行检查

    也许有一种更聪明的算法可以实现这一点,但我100%确信我所描述的方法是有效的。让我知道你是否能自己计算出这个问题的数学答案(如果你认为这是一个好的解决方案),如果不能,我可能会在以后尝试。我想知道我的算法是否可以在没有触发器的情况下完全实现

    编辑: 好吧,现在,我无法抗拒

    以下是我为解决上述问题所做的数学计算: (对不起,只有图像形式,我希望我的笔迹可读。) 如果有人能检查我的数学,我会很高兴的。我现在看不出任何步骤有什么问题,但最好让其他人检查一下。 (当然,使用本产品的风险自负。)

    如果有人发现这个算法有什么问题,请告诉我,我会尽快修复它


    另外,我很想知道是否有人有更好的解决方案,包括不太复杂的数学。也许是基于向量的方法?

    这是一个很好的问题!当且仅当满足其中一个条件时,具有边
    p
    q
    p>=q
    )的较小矩形才完全适合具有边
    a
    b
    a>=b
    )的较大矩形:

    请参阅以供参考


    因此,如果我们有变量
    a
    b
    p
    q
    ,我们可以通过评估来检查这种矩形排列是否可行:

    (p <= a && q <= b) || (p > a &&
                            b >= (2*p*q*a + (p*p-q*q)*sqrt(p*p+q*q-a*a)) / (p*p+q*q))
    
    (p=(2*p*q*a+(p*p-q*q)*sqrt(p*p+q*q-a*a))/(p*p+q*q))
    

    编辑:感谢@amulware在其评论中发布此备选版本:


    好吧,看起来A.R.S.的解决方案是正确的,但我还是会尝试发布我的解决方案,这更难,但它可以让你将一个矩形嵌入到另一个矩形中(如果可能的话)

    让我们假设
    a>b
    p>q
    。如果
    a>p
    b>q
    ,解决方案是显而易见的。如果
    aq
    ,问题也可以解决。看看附件中的照片,在里面你只需要最后一个不等式系统(如果你感兴趣,你可以看看它是如何推导出来的)

    你所需要的就是确保最后一个不等式系统有一个介于
    0
    1
    之间的解。要做到这一点,您需要将每个不等式作为方程(通常为二次方程)求解。如果没有解(这是不可能的),不等式的解就是整条实线。如果方程有两个(可能相等)解
    t_1
    t_2
    ,则不等式的解是分段
    [-无穷大,t_1]
    [t_2,无穷大]
    联合。在得到这两个不等式的解之后,你应该将它们相交。现在我们应该记住,
    t
    是一个角度的
    cos
    (介于
    0
    pi/2
    之间),所以不等式应该在
    0
    1
    之间有解。在这种情况下,第二个矩形可以嵌入到第一个矩形中。如果你采用例如
    t_1
    (方程的较小根),你可以构建一个矩形的concreate嵌入


    下图中的那个太大了:我对下面的公式感到惊讶和愚蠢+1是非常有用的公式。然而,如果知道这是真的,那就太好了。在发现我确实可以访问引用的文章后,我想引用它第二页的部分内容(图片形式):(后面是几页证明)。这个公式比上面的公式更简洁。(请随意使用公式和/或图像,因为它们不是我自己制作的。)@amulware谢谢,我在答案中添加了这一点。在某些情况下,代码不起作用。这里有一个固定版本:
    q@Victor是对的,第二个条件必须包括
    q