2012-03-14 21 views
0

具体例:ヨーロッパ諸国の地図と「欧州連合の国を表すパス」へのポインタリストを取得し、単一の「ヨーロッパを表すパス連合"。「ベジェ曲線を含む隣接ポリライン」の結合

赤、緑、青の3つの入力パスがあるとします。

  1. レッドは直線のみ
  2. グリーンライン・セグメントで構成されたセグメントとベジエで作られて
  3. ブルーベジエのみ

で作られて...その後、私は、出力を作成する必要があります3つのオブジェクトの和集合であるポリライン - ベジエ - を使用します。

さらに、私は入力データにいくつかのエラーマージンに対処する必要があります - c.f.その下の画像には、入力形状間に非常に小さな「ギャップ」があります。イメージでは、下の図(赤色)が望ましい出力です。

enter image description here

これは簡単に恐ろしく間違って行くと、それを動作させるために失敗し、私の週を取ることができます。私は「十分」であるかもしれない、比較的単純なアプローチを見つけようとしているが、私は現在にこだわっ:

  1. どのようにしても、労働組合のベジエに始めるのですか?
  2. 「ギャップ」/エラーマージンを扱うのスマートな方法は何だ - 私は単に私のフロート座標を丸めを行うには狡猾な何かがあります確信している - が、私はそれを見ることはできません:(

最後に...ターゲットプラットフォームはiPhoneなので、私はAppleのQuartz/QuartzCore/CoreAnimation /などのすべてにアクセスしています。ユーティリティメソッド - ただし、アップルの公式は、 A intersect Path B? "は多くのケースで非常に壊れている/間違っている - したがって信頼性が低い:(

答えて

0

IDEAはこれを達成する方法について考えていますが、これについてどうすればいいのかわかりません:

おそらく... "内部の線"を計算して削除して、 「組合を記述するパス」として正しい。

私の例のBlueオブジェクトではかなり間違っている可能性がありますが、交差点がひどく間違った曲線になる可能性がありますが、十分に良いかもしれません。

ことは、これを行うには、私は多分、考えていた:

  • 任意のラインセグメント別の船体に重なっ外皮で... "です

    1. は、形状のそれぞれの凸包を取ります『内部」各ハル線分を作成(またはそのセグメントによって無効化された)元の形状の点へ
    2. ...リーディングバック...それらの点は』組合内部

  • +0

    凸船体は、この問題のコンテキストで意味をなさない:-(

    申し訳ありませんが、この電話ではるかに入力することはできません。 –

    0

    まず、多角形の結合を行う方法を知る必要があります。私はあなたがそれを知っていると仮定します。そうでなければ、まずそれを学ばなくてはなりません。

    これで、曲線を切り抜き、多角形ユニオンを見つけて、オリジナルの湾曲した部分をユニオンにフィットさせることができます。直線交点から曲線交点まで交点をわずかに調整する必要がありますが、調整は小さく、簡単な反復近似アルゴリズムで見つけることができます。

    エラーに対処するには、共用体の前に擬似的な量だけポリゴンをオフセットし、カーブピースを合わせる前に負の量で結果をオフセットします。

    +0

    をポリゴンを相殺?その仕事は?たぶん、あなたは、各ラインをオフセット」を意味しない方法セグメントの中心から原点までの線分に沿ってセグメント化する?最初の近似としてスケーリングする - 純粋に凸状のポリゴンを持つ場合 - 凹面のポリゴンで失敗する – Adam

    +0

    オフセットは基本的にはディスクとのミンコフスキーの和ですが、操作は、 "ポリゴンオフセット"を参照してください。これは、通常は次のように実装されています:セグメント自体に垂直な方向に各セグメントを移動し、すべて同じ距離で移動し、交点を再計算します。動作しません。 –

    +0

    "ポリゴンオフセット" - ほとんどのヒットは、私が期待しているように(すべてのポイントに適用される単一の翻訳)、OpenGL用ですが、トラックを行った "内向き/外向きポリゴンオフセット" – Adam

    関連する問題