0

ワードクラウドの生成に取り組んでいます。

私の単語は (0, 0, w, h) の長方形に表示されます。w は最大幅、h は最大高さです。

ワード クラウドを生成するためのアルゴリズムは既にありますが、単語が四角形の境界の外に出たり、未使用のスペースが多すぎたりすることがあります。ワード クラウドの実際の境界は (0, 0, maxX, maxY) です。

スケーリングの私の考えは次のようになります。

if (maxX > w) then
    if (maxY > h) then
        if (maxX / w) > (maxY / h) then
            scale(w / maxX)
        else
            scale(h / maxY)
        end if
    else
        scale(w / maxX)
    end if
else if (maxY > h) then
    scale(h / maxY)
else if ((maxX < w) and (maxY < h)) then
    if (maxX / w) > (maxY / h) then
        scale(w / maxX)
    else
        scale(h / maxY)
    end if
end if

(x1, y1, x2, y2) の長方形に単語があるとします。scale(1.5) を呼び出すと、長方形の新しい位置は (1.5 * x1, 1.5 * y1, 1.5 * x2, 1.5 * y2) になります。これは非常に素晴らしくシンプルですが、これには問題があります。

単語のサイズは以前は S1 で、座標 (x1、y1、x2、y2) にありました。r でスケーリングする場合、新しい座標は (r * x1、r * y1、r * x2、r * y2) になります。質問: 単語が r * 大きい/小さいことがわかっている場合、r の割合でスケーリングした後の単語の新しいサイズである S2 サイズの値は?

4

1 に答える 1

0

OK、私はこれを理解しました。この関数はスケールを計算します。

public static void scale(double rate)
{
    for (int keyIndex = 0; keyIndex < keys.length; keyIndex++)
    {
        hashMap.get(keys[keyIndex]).setSize((int)(Math.sqrt(Math.pow(hashMap.get(keys[keyIndex]).getSize(), 2) * (rate * rate))));
    }
}

もちろん、それに応じて単語の位置を更新する必要があります。

于 2013-01-27T15:21:49.167 に答える