检测是否一个矩形可投入另一个RECT(Detect if one rect can be put i

2019-08-03 18:14发布

这个问题是测试不同,如果一个矩形是在另一个矩形。

已知的信息是二rects的边长。

如何计算,如果一个矩形可以投入另一个RECT?

Answer 1:

这是一个很好的问题! 当且仅当以下条件之一被满足确实与边的较小矩形pqp >= q )完全配合到与侧更大的矩形aba >= b ):

要么

见这以供参考。


所以,如果我们有变数abpq ,我们可以检查是否这种矩形安排将有可能通过评估:

(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))

编辑:感谢@amulware张贴在他的评论此备用版本:



Answer 2:

第一次检查一个会做的是当然的矩形对方是否在里面既轴线对准方位的配合。

如果不是,它适合唯一的选择是对角,但实际上可能是多角度的,它适合,难度,不只是猜测,但确实是计算可能的角度,如果存在的话。

现在,请注意,如果内部矩形确实适合斜,那么你可以将其旋转到2,如果其对角点触摸,无论上边都和外部矩形的下边缘,或左侧和右侧。 (在你的图或多或少第一)。

在这种情况下,你已经知道你在这一个维度内适应它(在本例中,y轴)。 然后,你必须计算内部矩形的边界宽度的其他尺寸,并检查相对于外箱的宽度。

有可能是一个更聪明的算法,在那里这一点,但我相信,我描述作品100%。 让我知道如果你能弄清楚数学这个自己(如果你认为这是一个很好的解决方案),如果没有,我会在它一展身手后。 我不知道如果我的算法可以完全不用三角函数实现...

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

下面是我做解决问题上面列出的数学(对不起,只能以图像形式,我希望我的笔迹是可读的。) 我会很高兴,如果有人可以检查我的数学。 我看不出什么毛病的任何措施的权利,但它始终是更好地让别人检查。 (当然:您自担风险使用此功能。)

如果有人发现什么不对的这种算法,请让我知道,我会尽快修复它。

此外,我将看看是否有人有一个更好的解决方案,涉及那么复杂的数学非常感兴趣。 也许基于向量的方法吗?



Answer 3:

好了,它看起来像ARS解决方案是真实的,还是我会尝试后我的解决方案,它很难,但它会让你建立一个长方形的混凝土嵌入到另一个(如果可能)。

让我们假设a>bp > q 。 解决方案是如果明显a > pb > q 。 该问题也可以解决,如果a<pb>q 。 看一看所附照片,在它你只需要不平等的最后的系统(如果你有兴趣,你可以看看它是如何衍生)

所有你需要的是确保不平等的最后系统之间躺在一个解决方案01 。 要做到这一点,你需要解决每一个不等式方程(像往常一样二次方程)。 如果没有解决(这是不可能的)不等式的解是整个实。 如果方程具有两个(可能等于)解决方案t_1t_2不平等的溶液是段[-infinity, t_1]联合使用[t_2, infinity] 。 之后你有两个不平等的解决方案,您应该相交他们。 现在我们应该记得, tcos的角度(介于0pi/2 ),因此不等式应有之间溶液01 。 在这种情况下第二矩形可以被嵌入到第一个。 如果你采取如t_1 (方程的根小),你可以建立矩形的concreate嵌入。



Answer 4:

你可以很容易剔除掉两个简单的情况:

  1. 如果第二的较大尺寸比第一的较大尺寸更小,并且如果相同的是对于较小尺寸的话,那么第二配合内侧。
  2. 如果第二的较大尺寸比第一的斜边时,则第二个将不适合在第一。

困难的部分是工作起来是否能以一个角度适合,如草图。 我不知道一个简单的公式 - 它可能需要一个插头和突突的解决方案。

可能是在一个很好的问题数学堆栈Exchange站点 。

补充:我不是100%肯定,如果这一点,但我认为,如果第二斜边比第一斜边小那么它会适合。

哎呀: -我收回这句话。 但是,如果第二斜边比的斜边较大的第一它适合。



Answer 5:

我不允许发表评论,因此将作为一个答案。

在amulware的回答:

X1 = H * COS(阿尔法)

X2 =(A2)* SIN(测试版)

而且似乎没有明显的方式来计算α或β值。



文章来源: Detect if one rect can be put into another rect
标签: math rect