1

固定サイズの文字と、単語全体を次の行に折り返すテキストがある場合、正方形に最も近いフィッティング中心の正方形を計算するための最適なアルゴリズムは、スペースを最小限に抑え、ユーザーにとって見栄えがよくなりますか?

画面は次のように定義されています

#define max_width 1024
#define max_height 768
#define char_width 10
#define char_height 16

生成された折り返しテキストの文字数を計算する関数

void calculate_wrapped_text_size( const char *text, int box_width_in_px, int &width_in_chars, &height_in_chars )
{
 ...
}

したがって、入力が Line1 text longtext longtext anytext \nLine2 <... ...> として与えられると、指定された幅に合わせて折り返されたテキストが計算されます

void find_optimal_size( const char *text, int &optimal_width_in_px, int &optimal_height_in_px )
{
 ...
}

ユーザーにとって最適な幅と高さの最適なサイズを計算する標準的な方法はありますか? 最小面積のボックスを見つけてから、側面の最小差のサイズまで反復する方法を考えましたか?

4

1 に答える 1

0

あなたが考えた「最小面積ボックス」は確かにただの 1 行であり、これはあなたが望むものではありません。

最初に、ライン ラップ アルゴリズムを自分で作成する必要があるかどうかを確認します。これは、ほとんどの GUI ツールキットが、ネイティブまたはクロスプラットフォーム (可能) であるためです。

これを自分で行う必要がある場合は、次のようにします。許可する最大線幅を計算します。表示ウィンドウの幅に基づいて、またはそのウィンドウ内の他のウィジェットのレイアウトに基づいて。

次に、各行について、単語がその最大幅を超えるまで書き込みます。その単語は、次の行を必要とする最初の単語です。

考慮しなければならない詳細があります: まず、文字がすべて同じ幅であるかどうか (単語幅の計算がはるかに簡単になります) と、どの文字を単語境界と見なすか (スペース、タブ、「-」) .

たとえば、ウィンドウが狭すぎて特定の単語が行の最初の単語であっても収まらない場合はどうすればよいかなどです。アルゴリズムに特別なケースを追加する必要があります。単語が行の最初の単語である場合、その単語は単語でラップされない可能性があります。代わりに、文字でラップされる必要があります。つまり、できるだけ多くの文字を行に書き込み、次の行に残ります。

于 2013-06-15T20:56:24.417 に答える