我如何确定一个矩形是否可以被另一个矩形覆盖?

时间:2019-07-15 14:08:46

标签: python algorithm geometry

鉴于两个矩形的边长,我必须编写代码来检查第二个矩形是否可以完全覆盖第一个矩形。只能旋转第二个矩形以查看它是否可以覆盖第一个矩形。

A和B是我们要覆盖的第一个矩形的边的长度,而C和D是将覆盖第一个矩形的第二个矩形的边的长度。

我尝试了两个代码,但仍然无法正常工作。首先是幼稚的解决方案,但我不知道它是否正确。

A, B, C, D = map(int, input().split())
if (C >= A and D >= B) or (C >= B and D >= A):
    print("covered")

然后,我用我的数学技能发现第二个矩形的边(l1l2)应该是l1 >= A*sin(a) + B*cos(a)l2 >= A*cos(a) + B*sin(a)a090º的夹角。所以我的第二个代码是:

A, B, C, D = map(int, input().split())

import math
a = 0

while a <= 90 and value == False:
    ai = math.radians(a)
    t1 = math.ceil(A*math.cos(ai) + B*math.sin(ai))
    t2 = math.ceil(A*math.sin(ai) + B*math.cos(ai))
    if (C >= t1 and D >= t2) :
        value = True
    a = a + 1

它在我做过的一些测试中有效,但是我的代码没有得到正确的答案。那么,我该怎么解决这个问题呢?我的想法正确吗?

如果我在语法,语法或数学上犯了其他错误,请随时纠正我。

3 个答案:

答案 0 :(得分:2)

我认为您只需要检查三种情况:

  • 当一组边与另一个矩形的第一对边平行时
  • 旋转90度到第一种情况
  • 尝试沿另一个矩形的对角线调整一个矩形

您不需要检查任何随机角度。如果在任何一般情况下都发生重叠,则必须在上述三种情况之一中这样做。

第三个情况将是一个极限情况:考虑一个正方形的矩形棒。

答案 1 :(得分:0)

代码中不清楚矩形的边长到底是什么。

但是不应进行任何涉及角度的计算:当且仅当A时,B才能完全覆盖A.length <= B.lenght and A.width <= B.width

(对不起,我无法发表评论)

答案 2 :(得分:0)

您的第一个代码部分将验证第二个矩形最初是否可以适合第一个矩形,这很好。您可以找到其他方法here

  

“只能旋转第二个矩形以查看是否可以覆盖第一个矩形。”

如果这是一个约束,则可以查看此topic来旋转第二个矩形。

随着here的发展,我认为一种很好的方法可以反复验证第二个矩形是否在旋转时适合第一个矩形,以检查”内部矩形的两个相对角是否在外矩形。”

我知道这不是一个精确的答案,但我希望它会有所帮助。