我在哪个像素绘制这些频率线?
At which pixel do I draw these frequencies lines?
我需要在 C++ GUI 上绘图显示一些 "lines" 识别频率 "bands"。比如这些:
由于我的工作频率范围在 20 赫兹和 20 赫兹之间,频率是对数的,我的 C++ 显示宽度是 270 像素,我应该在哪个像素绘制 100 赫兹、1 赫兹和 10 赫兹线?
我无法进行数学缩放。
您需要求方程
的系数a
和b
x = a + b * Log(f)
对于两个边界情况 f=20, x=0
和 f=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;
看起来是一样的结果。
我需要在 C++ GUI 上绘图显示一些 "lines" 识别频率 "bands"。比如这些:
由于我的工作频率范围在 20 赫兹和 20 赫兹之间,频率是对数的,我的 C++ 显示宽度是 270 像素,我应该在哪个像素绘制 100 赫兹、1 赫兹和 10 赫兹线?
我无法进行数学缩放。
您需要求方程
的系数a
和b
x = a + b * Log(f)
对于两个边界情况 f=20, x=0
和 f=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;
看起来是一样的结果。