与Python相交的矩形
给定两个矩形r1和r2,我试着测试它们是否相交。 为什么以下两个函数不产生相同的输出 职能1:与Python相交的矩形,python,math,logic,conditional,intersection,Python,Math,Logic,Conditional,Intersection,给定两个矩形r1和r2,我试着测试它们是否相交。 为什么以下两个函数不产生相同的输出 职能1: def separate_helper(r1, r2): r1_left, r1_top, r1_right, r1_bottom = r1 r2_left, r2_top, r2_right, r2_bottom = r2 if r1_right < r2_left: separate = True elif r1_left > r2_right:
def separate_helper(r1, r2):
r1_left, r1_top, r1_right, r1_bottom = r1
r2_left, r2_top, r2_right, r2_bottom = r2
if r1_right < r2_left:
separate = True
elif r1_left > r2_right:
separate = True
elif r1_top > r2_bottom:
separate = True
elif r1_bottom < r2_top:
separate = True
elif contains(r1, r2):
separate = False
else:
separate = False
return separate
看看你的第一个版本:
elif contains(r1, r2):
separate = False
else:
separate = False
假设您通过了所有正确的交叉点案例,无论r1
是否包含r2
都将返回False
但在你的第二个版本中:
... or \
not contains(r1, r2)
这将返回False
isr1
不包含r2
,否则返回True
所以,他们在“矩形1包含矩形2”的情况下做了不同的事情
作为一个附带问题:为什么包含
r2
的r1
返回与包含r1
的r2
不同的结果?失败是什么意思?崩溃或只是不说它们相交?@DiegoNolan如果运行提供的代码,您将看到末尾的等式返回False
,但不应该返回。@DiegoNolan断言失败。有关详细信息,请参阅更新的问题。我想他只是想检查矩形的边是否相交。@Phoexo:我想你是在评论我的边问题。如果您是对的,那么根本没有理由检查包含的内容。如果你错了,他需要在两个方向上检查包含的内容。不管怎样,我不明白他为什么要检查一个方向而不是另一个。谢谢你的解释。完整代码包含两个方向。我故意省略它,以显示一个最小的失败测试用例。@mre:没问题;我只是想确保你没有忽略什么,更重要的是,我没有误解你的逻辑。(这就是为什么这只是一个附带问题。)
from qc import forall, lists, integers
from intersect import separate_helper, separate_helper2
@forall(tries=100, r1=lists(items=integers(), size=(4, 4)), r2=lists(items=integers(), size=(4, 4)))
def test_separate(r1, r2):
assert separate_helper(r1, r2) == separate_helper2(r1, r2)
elif contains(r1, r2):
separate = False
else:
separate = False
... or \
not contains(r1, r2)