Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与Python相交的矩形_Python_Math_Logic_Conditional_Intersection - Fatal编程技术网

与Python相交的矩形

与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:

给定两个矩形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:
    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
is
r1
不包含
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)