美文网首页
浅谈Unity3D中数据的归一化(-32767 ~ 32768

浅谈Unity3D中数据的归一化(-32767 ~ 32768

作者: 望山跑死鹿 | 来源:发表于2018-12-19 15:06 被阅读0次

    0、概念:归一化:

        1)把数据变成(0,1)或者(1,100)之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。

        2)把有量纲表达式变成无量纲表达式,便于不同单位或量级的指标能够进行比较和加权。归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。

    1、问题:从某硬件读取数据,值范围是 -32767 - 32768,但我需要的是0~1之间。

         1)先创建三个摇杆,值范围设置成 0 ~ 1,只是为了数据能看的更直观,不做其他用途。

         2)创建三个变量

          3)在Update中赋值,值来源于硬件,他的范围是 -32767 ~ 32768

          4)运行后,可以在面板中看到定义的三个公共变量,这是原始数据。

    看得出来,硬件是汽车的踏板,分别为离合刹车和油门,我们暂且不管滑杆和下面的数值,只观察我们定义的变量,这组数据确实是 -32767 - 32768

          5)现在创建3个滑杆,值设置为 最小0,最大1 默认0,如下图所示

          6)我们在脚本中,引入UI的命名空间,然后创建三个滑杆

          7)将脚本挂在摄像机或其他活动物体上面

          8)将三个滑杆赋值给脚本,上列7个变量中,Input 为硬件的原始值,下面的三个是归一化后的值,而且也是滑杆的value

          9)关于归一化,有一个公式,范围是0-1:

               (1)Min-Max Normalization               value  =  ( originalValue - X_min) / (X_max - X_min)

                   我们直接套用

                       gas(滑杆的Value) = (gasInput(硬件的原始值) +32767) / (32767 +32768);

                    brake(滑杆的Value) = (brakeInput(硬件的原始值) +32767) / (32767 +32768);

                   clutch(滑杆的Value) = (clutchInput(硬件的原始值) +32767) / (32767 +32768);

                       看起来和公式不太一样,那是因为我简化了写法

                       原来的写法:值 =( 硬件原始值  -  最小值 )   /  (最大值 - 最小值)

                       我们的最小值是-32767,最大值是32768,减去负数 那就是加正的(负负得正),所以就直接 +

          10)现在将计算出的value,赋值给滑杆,下面是完整代码,有了公式,思路就变得简单了

    2、问题比较简单,在此记录一下,我也曾尝试过 Mathf.Clamp,但是我只能得到 最大数和最小数,并不能取中间。

    3、不论是什么硬件,都会有数值传递,,那么如果数值不规律或者不是我们想要的,数据标准化或者归一化都是很有必要的。

    相关文章

      网友评论

          本文标题:浅谈Unity3D中数据的归一化(-32767 ~ 32768

          本文链接:https://www.haomeiwen.com/subject/dgkjkqtx.html