【发布时间】:2013-12-02 21:23:21
【问题描述】:
我制作了很多等值线图,我需要一个自定义函数来接受数据集中的值并返回相应的颜色。例如,从 1 到 10,000 对数分布的数据可能需要此函数:
var colors = ["#ffffcc","#c2e699","#78c679","#31a354","#006837"];
function val_to_index(val) {
var index = Math.floor(Math.log(val) / Math.log(10));
return colors[index];
}
当自动构建图例的文本时,我需要反向功能:
function index_to_val(index) {
return Math.pow(10, index);
}
var legend_labels = [0,1,2,3,4].map(index_to_val);
当它是像对数/指数这样简单的东西时,编写这两个函数并不麻烦。但是当它更复杂时,它变得非常乏味。例如:
// divisions of 50,100,500,1000,5000,etc
function val_to_index(v) {
var lg = Math.log(v) / Math.log(10);
var remainder = lg % 1 > (Math.log(5) / Math.log(10)) ? 1 : 0;
var index = return Math.floor(lg) * 2 - 3 + remainder;
return colors[index];
}
function index_to_val(index) {
index += 3;
return Math.pow(10, Math.floor(index/2)) * Math.pow(5, index%2);
}
在中学代数中,我们学会了通过反转 x 和 y 变量并求解 y 来自动反转函数(当然,这仅适用于某些函数)。我的问题是:计算机科学中是否有等效的操作?
【问题讨论】:
标签: javascript function theory