【发布时间】:2013-03-08 01:52:22
【问题描述】:
好吧,我的性能有点瓶颈。
基本上,我有一个由屏幕 div(“屏幕”)和图表 div(“图表”)组成的图表,当此图表完成渲染时,它会检查它需要在图表上设置的比例,以便让图表适合屏幕。问题是我想出的任何比例都必须是 1.2 的指数。换句话说,您需要能够通过将 1.2 乘以某个数字的幂来得到新刻度的数字。
这个函数是计算我需要的比例的。
fitScale = function (width, height)
{
var scale = 1,
gWidth = graph.element.offsetWidth,
gHeight = graph.element.offsetHeight;
while (gWidth > width * scale && gHeight > height * scale)
scale *= 1.2;
while (gWidth < width * scale || gHeight < height * scale)
scale /= 1.2;
return 900 / scale;
}
问题是这很糟糕......
它所做的是获取图表大小 (width, height) 和屏幕大小 (gWidth, gHeight) 并循环通过新的比例,直到达到正确的数字。
首先它使比例变大,直到图表的至少一维乘以比例大于屏幕的一维。
然后它会循环返回以确保图表 * 比例的两个维度至少比屏幕小一点。
我想只用一次数学计算来执行这个操作。也许通过计算一个合适的拟合然后向下舍入,但我不知道如何向下舍入到 1.2 的指数
-修复-
这是最终的工作版本...
fitScale = function (width, height)
{
var wScale = graph.element.offsetWidth / width,
hScale = graph.element.offsetHeight / height,
snugg = wScale < hScale ? wScale : hScale,
exp = Math.log(snugg) / Math.log(1 / 1.2),
scale = Math.pow(1 / 1.2, Math.ceil(exp));
return 900 / scale;
}
【问题讨论】:
-
这就是为什么上帝创造了对数而 Brendan Eich 创造了
log函数。 -
是的,但我将如何使用它们?
-
好吧,看起来不错。我知道一定有办法。为什么更多的人不知道如何做到这一点?
-
那么如何使用对数函数来找到我的体重秤?
标签: javascript performance math loops exponent