2017-03-23 5 views
0

曲線の数(線分および円弧を含む)、正確な境界およびすべての内側ループを見つける方法を教えてください。曲線のセットから正確な境界および内部ループを計算する方法

この図は、内部ループ(緑色で描画)と境界(赤色で描画)を見つける方法の意味を単に示しています。

CGALのようなライブラリは良い選択肢ではありません。軽量で使いやすいものが必要です。

任意のアイデア、コードスニペット、追加情報、サードパーティコードは感謝します。

ところで、利用できるACISにはいくつかのAPIがありますか?私はこのライブラリでいくつかの経験があるので。

inner loops (drawing in green) and boundary (drawing in red)

答えて

0

私は決定的な答えを持っていないが、私はグラフのようにそれを解決することを考えています。各線/円弧のみ、そのエンドポイント(グラフの頂点)によって接続されるように、各交点であなた線/円弧を分割し

  1. スタート。

  2. 両端に接続されていないライン/アークを削除します。彼らは内部ループ/境界に寄与しません。

  3. グラフを作成するには、各線/円弧の接続点を頂点として使用し、各線/円弧を加重エッジとして使用します。エッジの重みはプリミティブの長さでなければなりません。

境界は二回(それを閉じるために、開始/終了を除く)同じ頂点を訪れることなく、可能な限り長いパスです。

内側のループについては、ややこしいかもしれません。私は、あなたのエッジを追跡し、あなたがトラバースする各頂点で常に「右」に向けることを考えています。

希望する

+0

説明したグラフから、各egdeが両方向に2つのエッジを設定するように有向グラフを作成します。この[回答](https://stackoverflow.com/questions/25059141/finding-faces-in-a-geometric-directed-graph/25088967#25088967)を確認してください。おかげさまで – Ante

+0

この考え方は私の最初のバージョンの実装に多少似ていますが、これはうまくいくでしょうが効果的ではありません--- 1200行の線分と400の円弧は非常に長い時間がかかるでしょう。 \tスライスカーブに時間がかかることがあり、Googleのコードにbalabanアルゴリズムの実装が見つかりました。これは役に立ちます。しかし、全体の実行時間はまだ長いです。 \t他の最適化のアイデアですか? –

関連する問題