任意の形状のGraphicsPathを定義されたスペース(ほとんどの場合、長方形または円)に「フィット」させる必要があります。C#のGraphicsPathポリゴンフィッティング
現在、Matrixオブジェクトを使用してGraphicsPathを拡大/縮小してもスケーリングはうまく動作しますが、スケールファクタが問題になります。
私が思い付くことができる最高の技術では、地域にGraphicsPathに変換地域に四角形や円を変換し、実行している:
rgnShape.Intersect(rgnCircle);
してからかどうかのチェック:
rgnShape.IsEmpty()
しかし、これは、形状が大きすぎてフィットすることができないということを伝え、形状をより小さなものにし、再度試してみる必要があります。
ポリゴンGraphicsPathに合わせてスケーリング係数を簡単に計算して、円に完全に収まるようにする簡単な方法はありますか?結果は、サークル内に完全に収まる最大のポリゴンでなければなりません。
これはおおよそあなたが探しているものですか:http://ja.wikipedia.org/wiki/Smallest_circle_problem? –
あなたは '倍率** ** **'と言います。これは、XとYのスケーリングが異なる可能性があることを意味しますか?そうでない場合、キャレットの例は明確ではありません。キャレットを左右のポイントが直径の円の左右の端に接触するまでキャレットを拡大すると(その比率を変更することなく)、「トップポイント」の位置は内側にあり、キャレットのアスペクト比 – smirkingman
で定義されているように、エッジまたは外側にあるSimon - それは私が見た最初の本当に有望なリードです。唯一の問題は、ポイントではなくグラフィックパスがあることです。ですから、端点が円内にある大きな曲線があれば、線はそれを通り抜けます。ただし、.Flattenを実行し、平坦化された点を使用して「最小円形アルゴリズム」を実行することは可能です。しかし、1000ポイントから始めると、.Flattenは10kポイントを返します。複雑なアルゴリズムを実行するにはかなりの数があります。 – Flipster