我有一个应用程序监视多个数据点,并且我正在根据线性百分比绿色、黄色和红色之间的褪色执行着色。然而,这并不能准确地形象化问题,因为数字越高,问题就越严重。范围是 0 -> 30000,我怎样才能生成我认为的对数百分比值而不是线性百分比值?
我假设通过“对数百分比”,您希望以对数为基础将数据映射到范围 [0, 100]。你可以尝试这样的事情:
double Scale(int val)
{
if (val <= 1)
return 0; // log is undefined for 0, log(1) = 0
return 100 * Math.Log(val) / Math.Log(30000);
}
使用以下形式的函数。
f(x) = s bx / 30000 + t
我们知道 0 应该映射到 0%,30000 应该映射到 100%。
f(0) = 0
f(30000) = 100
这意味着以下方程组。
s + t = 0
s b + t = 100
解决方案(关于b)如下。
s = 100 / (b - 1)
t = -100 / (b - 1)
选择一个特定的 b > 1 值(假设 b = 10)。然后你会得到以下解决方案。
s = 100 / 9
t = -100 / 9
也就是说,函数f(x)如下。
f(x) = (100 10x / 30000 - 100) / 9
您可以在此处查看此函数的图:Wolfram Alpha
在 C# 中,这将如下所示。
double x = ...;
double b = 10.0;
double s = 100.0 / (b - 1);
double t = -100.0 / (b - 1);
double f = s * Math.Pow(b, x / 30000.0) + t;
改进bmm6o的答案:
public static double Scale(long value, long maxInputValue, long maxOutputValue)
{
if (value <= 1)
return 0; // log is undefined for 0, log(1) = 0
return maxOutputValue * Math.Log(value) / Math.Log(maxInputValue);
}
如果您正在寻找线性和对数之间的东西,以下内容可能会有所帮助:
public static double Scale(long value, long maxInputValue, long maxOutputValue, double scaleFactor)
{
if (value <= 1)
return 0; // log is undefined for 0, log(1) = 0
return maxOutputValue * Math.Pow(Math.Log(value), scaleFactor) / Math.Pow(Math.Log(maxInputValue), scaleFactor);
}
挤出机及其分类 挤出机是用于挤出加工的设备。 食品挤压机可设计用于执行多个单元 同时进行操作,包括混合或均化, 剪切、淀粉糊化、蛋白质变性、 组织化、酶失活、热烹饪、 巴氏灭菌、脱水、成型和粉碎 (阿赫塔尔等人,2015)[2]。挤出机主要由五部分组成 部件: (i) 预调节系统; (ii) 饲喂系统; (iii) 螺杆或蜗杆; (iv) 桶; (v) 模具和 切割机构。它们可能因螺丝而异, 机筒和模具配置。其中每一项的选择 项目将取决于所使用的原材料和最终的 所需的产品(Riaz,2000)[27]。 (i) 预调节:通过蒸汽或 水并手动混合。此法适用于潮湿时 含量约20%至30%,且停留时间长 材料被使用。预处理有利于均匀颗粒 水合作用,减少在挤出机内的保留时间 由于减少了磨损,提高了吞吐量 机筒和螺杆组件增加了使用寿命 设备并减少 t