为什么在一个浮点数和......中为什么alpha是一个0到1的浮点数在CSS rgba()中

时间:2011-02-15 23:06:24

标签: math

这里的问题。遗憾。

我试图在数学方面理解*规范化**。

toxiclibs库中,可以规范浮点数​​。为什么人们想要标准化一个浮点数......在3D中我得到一个3维平面的法线可以给出 up 。首先想到的是:它与表现有关。但后来我发现这个SO question解释了游戏UI如何使用它。这......我有点儿了。

可以公平地说,如果有最大值和最小值,可以将浮点数归一化吗?我能想到的两种情景:

  1. CSS颜色RGBA:RGB从0到255但理论上可以更高。而A是0.0到1.0。这是标准化的,因为它可以是完全透明或不透明的,因此它是正常的,因为有一个明确的0或1?

  2. 录制音乐(或观看波形)时,可以剪辑。这是因为有最大值和最小值,所以高于1的标准化值会被削减吗?我想,在这种情况下,normalize将是为了方便。

  3. 那么,为什么要规范浮动?是性能吗? Readabilty?还有别的东西(视觉参考== Kudos)?一直到11的Spinal Tap Amp是否与此有关?

4 个答案:

答案 0 :(得分:4)

“标准化”花车的简要说明

在科学记数法中,您可以将任意数字写为x.y * 10^z,其中x是一个非零数字。例如212 = 2.12 * 10^2x始终可以是单个数字,因为您可以继续除以10。同样,x始终可能为非零,因为在尝试写入值10时,您可以继续乘以0 。科学记数法中的0最终为0.0 * 10^0

More about scientific notation

继续使用浮点数...浮点数基本上是二进制的科学记数法。它们以x.y * 2^z的形式编写。 x仍然是一个非零数字,但在二进制文件中只留下一个选项:1!如果您在计算机中实现浮点存储,则不要浪费一点始终 1,因此您只存储y和{{1 }(和+/-)。

但是现在你如何存储z?事实证明,0的特殊值用于表示“z实际上是x”。然后您可以存储0。但您也可以存储0.0和各种“非正常”值。

我不明白toxiclib的规范化功能是什么 - 我无法找到文档。据我所知,非正规浮点数对于相同的精度浮点数没有等效的标准化表示(非正规单值可以表示为普通双精度,但不能表示为普通单精度)。也许这就是功能正在做的事情。但除非你处理一些非常低级的东西或高精度,否则你可能不在乎。

Eric Lippert有一个good explanation的漂浮物解剖结构。

答案 1 :(得分:3)

我知道这是一个过时的线程,但是FWIW(我是上面提到的有毒物品的作者) - 我通常更喜欢使用标准化值(即0.0 ... 1.0或-1.0 ...... + 1.0间隔)只是因为它在多个域中工作时使它们更加灵活。您只需使用相关的比例值或映射系数,只要使用该值就会应用该比例系数。这允许我将实际绝对范围定义保持在代码之外和/或对GUI元素使用更友好的数字范围。所以我倾向于将它们视为百分比,而且它有点像纳米级的MVC。

E.g。我可能有一些配置文件定义了3D角色的不同高度范围。我的工具并不关心绝对值是什么,但它可能有一些特殊情况可以说> 80%(0.8)。我的模型只使用标准化值。

配置A可能是:min:50 - max:200
配置B:最小值:20 - 最大值:100

如果我的高度值在内部仅表示在0.0 .. 1.0之间,那么我可以更好地使用它并计算实际绝对值(即该模型参数的“视图”)很容易:

float val = config.min + (config.max-config.min) * normVal;

现在,如果有其他参数(具有自己的范围)依赖于我的高度参数,则规范化状态可以很容易地将其应用于其域(并避免不必要的重新映射)......

答案 2 :(得分:2)

  

为什么人们想要规范化浮动

使尽可能多的位有意义。

如果浮点数始终在0.5和1.0之间,则最左边的位可以假设为1.精度加一点。

答案 3 :(得分:2)

没有一个规范化的概念。平面的法线与向量的归一化不同,这与标准化浮点数不同。