我一直在阅读一些LibreOffice代码,其中有code that converts from 100mm to twips。
其基本公式为:
twips = (n>=0) ? (n*72+63) / 127 : (n*72-63) / 127;
现在我知道一个缇是一个点的1/20,一个英寸是72点,而1英寸是2.54cm,但是我不知道上面的公式与这些比例的关系!
谁能对此有所启发?
最佳答案
汇总OP提供的内容:n
是100毫米的大小。
1英寸是2.54厘米是25.4毫米。inchs = n * 100 / 25.4
或inchs = n / (100 * 25.4)
或inchs = n / 2540
1英寸是72点。points = inchs * 72
1 twip
是1/20点。twips = points / 20
现在,一切都在一起:twips = n / 2540 * 72 / 20
或twips = n * 72 / 2540 / 20
或twips = 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;
关于c++ - 100mm至LibreOffice中的缇,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50153973/