将线性数据点映射到对数数据点

问题描述 投票:0回答:1

如何将线性数据点映射到对数数据点?

这与 将线性标度映射到对数标度(两个标度都具有变量 min/max)和 将线性标度转换为对数标度不同,因为 它们正在转换为指数标度,而不是对数标度(它们正在转换轴尺度为对数,但数据点为指数。我希望尺度保持不变,数据点为对数)。

此问题要求从红线映射到蓝线(Desmos)。

image

注意:这是一个自我回答的问题,因为链接的帖子没有达到我想要的效果,并且没有代码(如 Stack Overflow 上的预期)。

math scale logarithm
1个回答
0
投票

由于这是 Stack Overflow,而不是 https://math.stackexchange.com/,我期待一个编程解决方案。

我发现首先将其转换为 0 到 1 的比例更容易推理。

const val_lin = 450;

const min_lin = 100;
const max_lin = 1000;

const min_log = 10;
const max_log = 200;

// input: a value between lin_min and lin_max (both inclusive)
// output: a value between 0 and 1 where 0.5 corresponds to middle of the input range
function normalize_lin(lin_val, lin_min, lin_max) {
  return (lin_val - lin_min) / (lin_max - lin_min);
}

const val_lin_normalized = normalize_lin(val_lin, min_lin, max_lin);

function lin_to_log(lin_val_normalized, log_min, log_max) {
  const log_val_normalized = Math.log10(9 * lin_val_normalized + 1);

  return log_val_normalized * (log_max - log_min) + log_min;
}

const val_log = lin_to_log(val_lin_normalized, min_log, max_log);
console.log(`on a linear scale from ${min_lin} to ${max_lin}, ${val_lin} maps to ${val_log} on a logarithmic scale from ${min_log} to ${max_log}`);

© www.soinside.com 2019 - 2024. All rights reserved.