0

Java 2D を使用して、いくつかのベジエ曲線 ( CubicCurve2D) をつなぎ合わせて「ブロブ」を作成しました。私が今直面している問題は、次の方法です。

  1. ブロブを特定の色で効率的に塗りつぶします。
  2. 特定の点がブロブ内にあるかどうかを効率的に判断します。

「内部性」を決定するための多数の方法を提供し、ビアを埋めることができるCubicCurve2D実装に気付きました(これはのメソッドを使用してこれを行うと信じています)。 ShapecontainsGraphics2DShapefill(Shape)ShapegetPathIterator

Shapeこれを考えると、私は自分のメソッドが基になるsgetPathIterator(AffineTransform)を単純にリンクするコンポジットを作成できることを望んでいました。PathIteratorただし、これは、NoSuchElementException私の形状に複数の が含まれていると生成されますCubicCurve2D。これを達成できたとしても、 aCubicCurve2Dは常に凸面で満たされ、「ブロブ」は凹面と凸面の曲線で構成されているため、期待どおりに機能するとは確信していません。「含む」問題は、ポイントがブロブ内に正当に存在する可能性がありますが、個々の曲線内には存在しない可能性があるため、さらに困難です。

  • 私はこの問題に正しい方法で取り組んでいますか (実装しようとしていますShapeか?)、または私が知らない慣用的な方法はありますか? 幾何学的形状を合成する問題はかなり一般的だと思っていたでしょう。
  • この問題を解決する方法について何か提案はありますか?

前もって感謝します。

4

2 に答える 2

1

解決策を形にすることは、これに取り組むための正しい方法です。シェイプに組み立てようとしている曲線のコレクションがある場合は、GeneralPath を使用することをお勧めします。必要に応じて、曲線または直線セグメントを追加するだけです。インターフェイスを見て、さまざまな追加メソッドを確認してください。また、最後の点を開始点に結合することで、形状を「完成」できることにも注意してください。

パスが閉じられると、使用できる contains() のさまざまなバージョンがいくつかあります。時間をかけてそれぞれの説明を読んでください。速度と精度の点でトレードオフがあり、アプリケーションによって異なります。 .

また、パスから形状を取得し、塗りつぶしたり、変形したりすることも簡単です。

于 2010-06-21T16:12:36.773 に答える