4

以下に示すような簡単な例(SVG ソース)があります。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

ここで、最初の行は親ポリゴンを表し、2 行目は穴 (ご覧のとおり) を表します。しかし、どうすればこのホールプログラムの方法を見つけることができますか? 私はPythonを使用しています。たぶん、簡単な解決策のためのライブラリがありますか?

他のポリゴン内のポリゴン

4

2 に答える 2

2

パスを(x、y)ペアに変換し、この関数を2番目のポリゴンの各ポイントに適用します。

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

于 2012-04-05T13:33:07.737 に答える
1

それほど Pythonic な答えではありませんが、幾何学的アルゴリズム:

ポリゴン B はポリゴン A の内側にあり、B の各コーナーと B の各エッジは完全にポリゴン A の内側にあります。

角 (点) が多角形の内側にあるかどうかを調べるには、多角形からいわゆる「耳」をかみ砕くのが簡単な方法です。「耳」とは凸状の角のことで、噛みちぎるということは、この角を単純に取り除くことを意味します。噛むたびに、ポイントが耳の内側 (噛んだ三角形) にあるかどうかを確認します。(ループのないポリゴンごとに、少なくとも 2 つの耳 (凸状の角) を見つけることができるという数学的な証明があります)。

B のエッジが完全に A の内側にあるかどうかを確認するには、そのエッジがポリゴン A のいずれかのエッジを切断しているかどうかを確認する必要があります。

もちろん、両方のポリゴンが完全に凸面である場合は、エッジをまったくチェックする必要はありません。

これは、実行する必要がある基本的なジオメトリ チェックの詳細がなくても、簡単なアプローチです。しかし、多分それはあなたを助けます。

于 2012-04-05T13:27:29.847 に答える