algorithm - 如何计算边界矩形的宽度,以适应特定比例的文本包装?

标签 algorithm text

如果我有以下文字:

“你好,这是一段文字,将显示在屏幕的一个矩形区域中”

我知道文本的总宽度。

我试图根据给定的比率找到一个边界宽度来包裹文本。

算法是什么?

例如,我想始终尝试按宽度和高度包裹文本,其中边界矩形的比例为 16:9。对于给定的任何长度的文本,这都需要发生。

最佳答案

下面是伪代码的实现方式

function calcWidth(string text, int rows, float ratio)

    let H be int with value /* how many pixels high is a row? */
    let total_width be int with value 0
    for each character c in string text
        let total_width be total_width + pixel_width(c)
    end for

    let W = total_width / length(text)

    /* RATIO = (H * row) / (W * col) */
    /* means col = (H * row) / (W * RATIO) */

    let cols be int with value (H * rows) / (W * ratio)

    return cols
end function

我可能还会在那里检查,如果 5 行 Not Acceptable ,但 6 行更糟,我知道 5 比 6 好,所以在这种情况下我会返回 5。

让我们回顾一下我们所知道的

对于等宽字体:

    H * rows
   ---------- = RATIO
    W * cols

现在,我们知道每一行的 cols 都不相同,因为我们可能没有等宽。但是,我们可以将 cols 近似为字母总数除以行数。

        H * rows
    -------------- = RATIO
    W * len / rows

      H * rows^2
    -------------- = RATIO
       W * len

现在你知道除了行之外的所有这些变量,所以求解行

   rows = roundUp ( SQRT (  (RATIO * W * len) / h ) )

现在我们从上面知道cols大约是

   cols = (H * rows) / (W * ratio)

有了这两个,你应该对你的盒子有一个不错的猜测。

您可能必须渲染它才能看到,并且可能会向上或向下额外增加一两行,具体取决于误差的大小和范围。

关于algorithm - 如何计算边界矩形的宽度,以适应特定比例的文本包装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5054444/

相关文章:

algorithm - 证明归并排序时间在增加

android - 如何为 Android 加载 FTGLES(或任何其他文本渲染)

python - python中的大TXT文件解析问题

python - 比较两个文本文件,替换第一个文件中包含第二个文件中行的字符串的行

algorithm - 计算离散对数

解决分配或与约束匹配的算法

algorithm - 根据属性权重查找对象

c# - 在 C# 中查找数组中的对象模式

php - 用php读取一个纯文本文件

php - 使用 ajax 创建在线实时文本编辑器