LibreOffice 100毫米到缇

时间:2018-05-03 11:28:11

标签: c++ libreoffice

我一直在阅读一些LibreOffice代码,并且有code that converts from 100mm to twips

它的基本公式是:

twips = (n>=0) ? (n*72+63) / 127 : (n*72-63) / 127;

现在我知道一个缇是1点20分,一英寸是72点,1英寸是2.54厘米,但我无法弄清楚上述公式如何与这些比率相关!

任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:3)

汇总OP提供的内容:

n的大小为100毫米。

1英寸是2.54厘米是25.4毫米。

inchs = n * 100 / 25.4inchs = n / (100 * 25.4)inchs = n / 2540

1英寸是72分。

points = inchs * 72

1 twip是1/20点。

twips = points / 20

现在,一切都在一起:

twips = n / 2540 * 72 / 20twips = n * 72 / 2540 / 20twips = n * 72 / 127

如果在int算术中完成,则会有截断而不是数学舍入。这可以通过将127的一半(127 / 2 = 63)添加到n * 72

来解决

twips = (n * 72 + 63) / 127

这不能正确处理负数。对于这些,必须减去63:

twips = n >= 0 ? (n * 72 + 63) / 127) : (n * 72 - 63) / 127;

我们在这里。

正如Ron已经指出的那样,?:运算符是ternary if-then-else operator

更容易阅读(但可能不太优化)的替代方案是:

if (n >= 0) twips = (n * 72 + 63) / 127);
else twips = (n * 72 - 63) / 127;