此问题与测试一个矩形是否在另一个矩形中不同。
已知信息是两个部分的长度。
如何计算是否可以将一个矩形放入另一个矩形?
答案 0 :(得分:7)
这是一个很好的问题!当且仅当满足这些条件的一个时,边长为p
且q
(p >= q
)的较小矩形完全适合较大< / em>带有边a
和b
(a >= b
)的矩形:
或
请参阅this以供参考。
因此,如果我们有变量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))
编辑:感谢@amulware在评论中发布此备用版本:
答案 1 :(得分:4)
第一次检查当然是矩形是否在轴对齐方向中适合另一个。
如果没有,它唯一的选择就是对角线,但实际上它可能有很多适合的角度,难度不仅仅是猜测,而是确实计算一个可能的角度(如果存在的话)。
现在,请注意,如果内部矩形确实对角线适合,那么如果其相对的角部接触外部矩形的顶部和底部边缘,或者左侧和右侧,则可以旋转它直到两个。 (在你的图表中或多或少是第一个。)
在这种情况下,您已经知道在一个维度(在示例中,y轴)内部适合它。然后,您必须计算另一个维度中内部矩形的边界宽度,并根据外部框的宽度进行检查。
可能有一个更智能的算法,但我100%肯定我描述的工作。让我知道你是否可以自己弄清楚数学(如果你认为这是一个很好的解决方案),如果没有,我可能会稍后再去。我想知道我的算法是否可以在没有trig函数的情况下完全实现...
修改强> 好了,我无法抗拒......
以下是我为解决上述问题所做的数学计算: (对不起,只有图像形式,我希望我的笔迹可读。) 如果有人能检查我的数学,我会很高兴。我现在没有看到任何步骤有任何问题,但是让其他人检查总是更好。 (当然:使用此风险需要您自担风险。)
如果有人发现此算法有任何问题,请告诉我,我会尽快解决。
此外,我非常有兴趣看看是否有人有更好的解决方案,涉及更简单的数学。也许是基于矢量的方法?
答案 2 :(得分:2)
好吧,它看起来像A.R.S.解决方案是真的,我仍然会尝试发布我的解决方案,它更难,但它会让你建立一个矩形到另一个矩形的具体嵌入(如果可能的话)。
让我们假设a>b
和p > q
。如果a > p
和b > q
,解决方案很明显。如果a<p
和b>q
,问题也可以解决。看一下附图,你只需要最后一个不等式系统(如果你感兴趣的话,你可以看看它是如何得出的)
您所需要的只是确保最后一个不等式系统在0
和1
之间有一个解决方案。要做到这一点,你需要将每个不等式解为等式(如通常的二次方程)。如果没有解决方案(这是不可能的),不平等的解决方案就是完整的实线。如果方程有两个(可能相等的)解t_1
和t_2
,则不等式的解是段[-infinity, t_1]
与[t_2, infinity]
联合。在得到两个不等式的解后,你应该将它们相交。现在我们应该记住,t
是一个角度cos
(0
和pi/2
之间),因此不等式应该在0
和{{1}之间有解决方案}。在那种情况下,第二个矩形可以嵌入第一个矩形中。如果你拿,例如1
(较小的方程根)可以构建一个矩形的混合嵌入。
答案 3 :(得分:1)
你可以很容易地清除这两个简单的案例:
困难的部分是确定它是否可以适合角度,例如在草图中。我不知道一个简单的公式 - 它可能需要一个插件和突突解决方案。
Mathematics Stack Exchange site可能是一个很好的问题。
已添加:我不是100%确定是否这样,但我认为如果第二个的斜边小于第一个斜边那么它就适合。
哎呀:不 - 我会收回的。但如果第二个的斜边大于第一个的斜边,那么它就不会。
答案 4 :(得分:0)
我不允许发表评论,所以请回答。
在amulware的答案中:
x1 = h * cos(alpha)
x2 =(a2)* sin(beta)
并且似乎没有明显的方法来计算alpha或beta的值。