如何确定一个多边形是否在另一个内?

问题描述:

我有一个简单的例子(SVG source)看起来像你可以看到下面。所述路径 ID为 “rect2816” 在d描述属性:如何确定一个多边形是否在另一个内?

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

+0

一种可能性是,看是否第二多边形的每个顶点是所述第一多边形内,并且没有第二多边形的边交叉的第一个。 – 2012-04-05 13:13:46

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

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

+1

要将任意路径转换为多边形,请参阅http://phrogz.net/svg/convert_path_to_polygon.xhtml – Phrogz 2012-04-05 14:50:13

与其说是Python化的答案,但几何-algorithmical:

多边形B是多边形A当且仅当B的每个角和B的每一个边缘的内侧完全是多边形A.内部

要找出一个角落(点)是否在多边形内,一个简单的方法是从多边形上咬掉所谓的“耳朵”。一个“耳朵”是一个凸角,咬掉它就意味着简单地去掉这个角落。每次咬人时,检查点是否在耳内(你咬掉的三角形)。 (有数学证明,对于每个裸露多边形,至少可以找到两个这样的耳朵(凸角)。)

要找出B的边缘是否完全位于A的内部,意味着您必须找出边缘是否正在切割多边形A的边。

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

这是一个直接的方法,没有基本的几何检查的细节,你将不得不执行。但也许它可以帮助你。

+0

** mihai **给了我Pythonic执行你的建议。谢谢! – 2012-04-05 14:09:27