質問

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

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

凹面のポリゴンをスケーリングする方法を知っている人はいますか?または、スケーリング操作の基準フレームとして使用できる「ビジュアルセンター」を見つける方法はありますか?

明確にするために、私は2Dスペースで働いており、「Visual Center」を参照のフレームとして使用してポリゴンをスケーリングしたいと思います。それで、おそらく質問をする別の方法は、どうすれば凹面の視覚的中心や自己インターセクトのポリゴンを見つけることができるでしょうか?

ありがとう!

役に立ちましたか?

解決

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

それを理解したら、一定のポイントを起源に変換し、通常どおりポリゴンをスケーリングし、翻訳します。

他のヒント

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

あなたはアフィン空間で働いており、あなたのポリゴンを拡大するためのアフィン変換を探していますか?

私が正しい場合は、変換マトリックスを書くだけです:

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

アフィン変換マトリックスを探すことができます。

それが役に立てば幸い


編集

同じ「中心」を保持したい場合は、ポリゴンの中心g = barycenterを使用してパラメーターlambdaの同質を行うことができます。

検証します:
enter image description here

Gは同性愛の中心であるため、Gは移動しません。

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

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

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

おそらく、クレイグは「ポリゴンオフセット」アルゴリズムを探しています。ポリゴンの各エッジが特定の値によってオフセットされます。たとえば、時計回りのポリゴンを考えると、左に向かってエッジを相殺すると、ポリゴンのサイズが増加します。これがクレイグが探しているものである場合、これはここで尋ねられ、答えられました - 膨張/デフレート(オフセット、バッファリング)ポリゴンのためのアルゴリズム.

既製の(OpenSource Freeware)ソリューションを探している場合は、クリッピングライブラリも作成しました(クリッパー)Delphi、C ++、およびC#で書かれており、これにはかなり単純なポリゴン相殺関数が含まれています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top