Polygon.contains和Polygon.within有什么区别?

15

文档字符串表示:

Polygon.contains 如果几何体包含另一个,则返回True,否则返回False

Polygon.within 如果几何体在另一个内部,则返回True,否则返回False

它们有何不同?


除了下面的答案之外,还要记住,根据你当前正在做什么,有时从一个几何图形检查会更方便。例如,如果正在使用a,则会调用其中一个,而如果正在使用b,则会调用其反函数。 - songololo
2个回答

28

它们是互为反义词的关系:A 包含 B,而 BA 中。

   >>> A.contains(B)
   True
   >>> B.within(A)
   True

   +----------------------------------+
   |                                  |
   |         +----------+             |
   |         |          |             |
   |         |          |             |
   |         |          |             |
   |         |          |             |
   |         |          |             |
   |         |    B     |             |
   |         |          |             |
   |         +----------+             |
   |                                  |
   |                                  |
   |   A                              |
   |                                  |
   +----------------------------------+

如果A与B重叠会发生什么? 为什么有两个函数?一个不够吗? - Sounak
我认为两者都不是真的,因为两种形状都不完全包含另一种。如果你的意思是A和B本质上是相同的形状,则两者都是错误的。从contains手册中(重点在于):“如果对象的内部包含另一个对象的边界和内部,并且它们的边界根本不接触,则返回True。” - chepner
1
一个就足够了--你可以将within(self, obj)定义为简单的return obj.contains(self)--但根据上下文,使用其中之一可能更易读。 - chepner
poly = Polygon(((0, 0), (0, 2), (2, 2), (2, 0))) po = Point((1,1))print poly.contains(po) True print poly.within(po) False - Sounak
这里有些不同。 - Sounak
po.within(poly) 应该是 true,不过你需要交换调用者和参数。 - chepner

0
a = Polygon([(0, 0), (100, 0), (100, 100), (0, 100)])
b = Polygon([(0, 0), (50, 0), (50, 50), (0, 50)])
print(a.within(b), b.within(a))
print(a.contains(b), b.contains(a))

输出

False True
True False

简述: containswithin的相反条件。
   +----------------------------------+
   |                                  |
   |         +----------+             |
   |         |          |             |
   |         |          |             |
   |         |          |             |
   |         |          |             |
   |         |          |             |
   |         |    B     |             |
   |         |          |             |
   |         +----------+             |
   |                                  |
   |                                  |
   |   A                              |
   |                                  |
   +----------------------------------+

在上述情况下:
  • A 包含 B
  • B 在 A 中

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接