我在哪个像素绘制这些频率线?

At which pixel do I draw these frequencies lines?

我需要在 C++ GUI 上绘图显示一些 "lines" 识别频率 "bands"。比如这些:

由于我的工作频率范围在 20 赫兹和 20 赫兹之间,频率是对数的,我的 C++ 显示宽度是 270 像素,我应该在哪个像素绘制 100 赫兹、1 赫兹和 10 赫兹线?

我无法进行数学缩放。

您需要求方程

的系数ab
 x = a + b * Log(f)

对于两个边界情况 f=20, x=0f=20000, x=269

紧随 MBo

0   = a + b * Log(20)
270 = a + b * Log(20000)

减去

270 = b * (Log(20000) - Log(20))
270 = b * Log(20000/20)
270 = b * Log(1000)
b = 270 / Log(1000)

如果您使用的是以 10 为底的对数,Log(1000) = 3 那么 b = 270/3 = 90。

第一个替换

0 = a + 270 * Log(20) / Log(1000)
a = - 270 * Log(20) / Log(1000)

再次以 10 为底的对数

a = - 90 * Log(20) = -117

因此,使用以 10 为底的对数,您可以在

处画线
x_100   = -90 * Log(20) + 90 * Log(100)    = -117 + 180 =  63
x_1000  = -90 * Log(20) + 90 * Log(1000)   = -117 + 270 = 153
x_10000 = -90 * Log(20) + 90 * Log(10000)  = -117 + 360 = 243

使用您的公式

double OldMin = log(20); 
double OldMax = log(20000); 
double NewMin = 0.0; 
double NewMax = 270.0; 
double OldRange = (OldMax - OldMin); 
double NewRange = (NewMax - NewMin); 
double OldValue = log(1000);

double NewValue = (((OldValue - OldMin) * NewRange) / OldRange) + NewMin;

看起来是一样的结果。