0

いくつかの地形を表す地図があります。この地図を島、海、大洋、大陸などの「地域」に分割する方法を考え出しました。地図を分割する方法は完全に恣意的なもので、政治的な国境に分割する場合があります。

各「領域」では、この「領域」の一部であるすべてのピクセルと、各ピクセルの座標について知っています。ラベルを付けるテキストのサイズと位置を動的に変更したいと思います。

まず、テキストのサイズを取得するのはかなり簡単に思えます (総面積 * 0.5 のようなものです)。絶対中心座標を取得できますが、これは質量の中心にあるとは限りません。したがって、ここにテキストを配置すると、「領域」から完全に外れる可能性があります (U 字型領域の場合)。

曲線の最大量を考慮して、可能な限り最大サイズのテキストに合わせてパスを曲線にすることをお勧めします。したがって、U 字形では、領域の境界内に収まるのに十分な大きさのテキスト サイズで、可能な限り多くの U 字形を (最大曲線量未満にとどめて) 描画します。

これに役立つ提案やリンクはありますか? 私は C++ と SFML2.1 を使用していますが、いくつかの理論が得られてうれしいです。

4

2 に答える 2

0

問題は直線的な方法で解決できるようには見えません。しかし、再帰は可能です-ここで私の(アドホックに書かれた)アルゴリズム:

可能な限り小さい (テキストを読みやすくするためにできるだけ小さい) 四角形と最大 (形状の最大/最小 x/y 座標) の 2 つの四角形を計算します。

結果の長方形を最大の長方形の x/2、y/2 として計算します

結果の長方形をマップ上に配置できるかどうかを確認します (最初にすべての角をマップ上に配置できるかどうかを確認し、次に残りの四角形のポイントを確認します - ポイントのグリッドを使用して最適化できます。つまり、5px を 1 つずつ配置します)。マップがない場合

セットを配置できる場合は、最小の四角形を結果の四角形に置き換えます。それ以外の場合は、最大の休符を結果の四角形に置き換えます

最小 != 最大である限り繰り返します - そして、それはあなたの結果です

重心の計算は非常に簡単ですが、あまり役に立ちません-U字型のものを想像してみてください-重心は形状の外側にあります-とにかく:

形状の総ピクセル数を計算し、形状の質量を均等に分割する垂直線を見つけます。これを水平線で同じように行います-重心のx、yを取得します(わかりました、似たようなもの-必要な物理的な意味で計算するために確認する (ピクセルの質量 * 質量の中心からの距離)

于 2013-09-08T09:47:29.090 に答える