8

私は何日もインターネットを精査してきましたが、よくある質問と思われるものに対する良い答え(または少なくとも私にとって意味のあるもの)を見つけることができませんでした。任意のポリゴンをどのようにスケーリングしますか?特に、凹多角形。凹面(確実に)および自己交差(可能であれば)ポリゴンを処理できるアルゴリズムが必要です。単純な凸多角形を処理するために私が使用している明白で単純なアルゴリズムは、多角形の重心を計算し、その重心を原点に変換し、すべての頂点をスケーリングし、多角形を元の位置に戻すことです。

重心がポリゴンの外側にあることが多いため、このアプローチは多くの(またはすべての)凹ポリゴンでは機能しません。したがって、スケーリング操作でも変換が発生し、最終結果なしでポリゴンを「インプレース」でスケーリングできる必要があります。翻訳されています。

凹多角形をスケーリングする方法を知っている人はいますか?あるいは、スケーリング操作の参照フレームとして使用できる「視覚的中心」を見つける方法はありますか?

明確にするために、私は2D空間で作業しており、「ビジュアルセンター」を参照フレームとして使用してポリゴンをスケーリングしたいと思います。それで、質問をする別の方法は、凹面および/または自己交差するポリゴンの視覚的中心をどのように見つけるかということです。

ありがとう!

4

3 に答える 3

6

あなたの問題が何であるかわかりません。

あなたはアフィン空間で作業していて、ポリゴンをスケーリングするためのアフィン変換を探していますか?

私が正しければ、変換行列を書くだけです。

そして、マトリックスでポリゴンを変換します

アフィン変換行列を検索できます。

それが役に立てば幸い


編集

同じ「中心」を維持したい場合は、中心G=ポリゴンの重心でパラメータラムダの相似変換を行うことができます。

それは検証します:
ここに画像の説明を入力してください

Gは相似変換の中心なので動かない。

以下の関係は引き続き検証されるため、重心になります。(関係にラムダを掛けるだけです)

あなたの場合、Gは簡単に決定できます:G(x、y):(ポイントのx値の平均、ポイントのy値の平均)

そしてそれはあなたが必要とすることをするべきです

于 2011-07-26T13:31:56.410 に答える
3

おそらく、Craigは「ポリゴンオフセット」アルゴリズムを探しています。このアルゴリズムでは、ポリゴンの各エッジが特定の値でオフセットされます。たとえば、時計回りに方向付けられたポリゴンの場合、エッジを左にオフセットすると、ポリゴンのサイズが大きくなります。これがCraigが探しているものである場合、これはここまでに質問され、回答されています-ポリゴンを膨張/収縮(オフセット、バッファリング)するためのアルゴリズム

既製の(オープンソースのフリーウェア)ソリューションをお探しの場合は、Delphi、C ++、C#で記述されたクリッピングライブラリ( Clipper )も作成しました。これには、かなり単純なポリゴンオフセット機能が含まれています。

于 2011-07-26T18:08:45.457 に答える
1

良い答えが見つからない理由は、要件が不正確だからです。まず、「インプレース」の意味を明示的に定義します。何が一定に保たれていますか?

それを理解したら、定数点を原点に変換し、通常どおりポリゴンを拡大縮小して、逆に変換します。

于 2011-07-26T13:38:41.640 に答える