如何确定多边形是否在其他多边形内?

时间:2012-04-05 13:03:14

标签: python svg polygon

我有一个简单的例子(SVG source),你可以在下面看到。 d 属性中描述的ID为“ rect2816 ”的路径

m 140.53571,188.625 0,148.1875 273.9375,0 0,-148.1875 -273.9375,0 z 
m 132.25,42.03125 c 3.64586,0.0236 7.47296,0.12361 11.5,0.28125 36.65941,1.43507 57.84375,15.88072 57.84375,32.84375 0,7.41614 -1.94981,21.58652 -13.28125,24.09375 -14.58711,3.2276 -40.46224,-5.35276 -53.125,6.625 -26.65285,25.21104 -48.00843,-19.04537 -57.875,-32.84375 -12.16196,-17.00847 0.24962,-31.35357 54.9375,-31 z

这里,第一行描述父多边形,第二行描述洞(如您所见)。但是我怎样才能找到这个洞程序呢?我正在使用Python。也许有一些库可以轻松解决?

A polygon inside other polygon

2 个答案:

答案 0 :(得分:2)

将路径转换为(x,y)对,并为第二个多边形的每个点应用此函数。

http://www.ariel.com.au/a/python-point-int-poly.html

答案 1 :(得分:1)

不是Pythonic的答案,而是几何算法:

如果B的每个角和B的每个边完全在多边形A内,则多边形B在多边形A的内部。

要查找角(一个点)是否在多边形内部,一个简单的方法是从多边形中咬掉所谓的“耳朵”。 “耳朵”是一个凸角,咬掉它意味着只需移除这个角。每次咬人行为,检查点是否在耳内(你咬掉的三角形)。 (有数学证明,对于每个无环多边形,你至少可以找到两个这样的耳朵(凸角)。)

要查找B的边是否完全在A内,意味着您必须找出边是否正在切割多边形A的任何边。

当然,如果两个多边形都是完全凸起的,则根本不需要检查边缘。

这是一种直接的方法,没有您必须执行的基本几何检查的细节。但也许它可以帮助你。