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 * 更大/更小,那么 S2 大小的值是多少,这将是在以 r 的比率缩放后单词的新大小?

4

1 回答 1

0

好的,我已经弄清楚了这一点。此函数计算比例:

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 回答