本文章由cartzhang编写,转载请注明出处。 所有权利保留。
文章链接:http://blog.csdn.net/cartzhang/article/details/50680237
作者:cartzhang

数据平滑处理

由于需要处理硬件的传给数据,硬件是其他商家的。
坑爹的是发送频率太低了,20HZ左右,也是服气了。好处有么,肯定是便宜。
这个用在VR游戏上,不做评论了。
既然这样,生活还得继续!!!
怎么办?

插值

第一考虑的就是插值。
插值,内插和外推插值。插值算法,有多种,5点,7点,二次插值等,不一一列举。
游戏的帧率在DK2上75fps,这帧率插值,需要至少有2秒数据,再加上硬件数据的抖动,个人觉得这不算是个好的方案。

缓动函数

在ITween中有个缓动曲线函数。
这个不错啊!我们来细说下。

1.先看看各种函数都长啥样?

截图:

2.网址介绍

相关网址啊:
http://easings.net/zh-cn#

说明网址上的各个图都是可以点开,动态的哦。

http://robertpenner.com/easing/easing_demo.html
这个也是可以看看每个曲线的样子。真是方便啊!!

微软msdn上带有代码和图例的
https://msdn.microsoft.com/zh-cn/library/ee308751.aspx

3.在看看所有曲线种类。

可以在ITween中找到EaseType.

    /// <summary>/// The type of easing to use based on Robert Penner's open source easing equations (http://www.robertpenner.com/easing_terms_of_use.html)./// </summary>public enum EaseType{easeInQuad,easeOutQuad,easeInOutQuad,easeInCubic,easeOutCubic,easeInOutCubic,easeInQuart,easeOutQuart,easeInOutQuart,easeInQuint,easeOutQuint,easeInOutQuint,easeInSine,easeOutSine,easeInOutSine,easeInExpo,easeOutExpo,easeInOutExpo,easeInCirc,easeOutCirc,easeInOutCirc,linear,spring,/* GFX47 MOD START *///bounce,easeInBounce,easeOutBounce,easeInOutBounce,/* GFX47 MOD END */easeInBack,easeOutBack,easeInOutBack,/* GFX47 MOD START *///elastic,easeInElastic,easeOutElastic,easeInOutElastic,/* GFX47 MOD END */punch}

根据需要各区所需啊!!不一定要全部都带上。

4. 函数代码:

ITween中这个代码比较长,代码中更多的是算法。
代码在ITween.cs中,就不一一贴上来。

缓动曲线代码

我需要的只有这些曲线,其他的不需要,就摘了出来,写成了静态函数,这样方便在需要时候直接调用。

/**************************************************************************
Copyright:@cartzhang
Author: cartzhang
Date:
Description:
**************************************************************************/
using UnityEngine;
using System.Collections;public enum EaseType:int
{easeInQuad,//easeOutQuad,easeInOutQuad,easeInCubic,//easeOutCubic,easeInOutCubic,easeInQuart,//easeOutQuart,easeInOutQuart,easeInQuint,//easeOutQuint,easeInOutQuint,//easeInSine,//easeOutSine,//easeInOutSine,easeInExpo,//easeOutExpo,easeInOutExpo,//easeInCirc,//easeOutCirc,easeInOutCirc,//linear,//spring,///* GFX47 MOD START */////bounce,//easeInBounce,//easeOutBounce,//easeInOutBounce,///* GFX47 MOD END *///easeInBack,//easeOutBack,//easeInOutBack,///* GFX47 MOD START */////elastic,//easeInElastic,//easeOutElastic,//easeInOutElastic,///* GFX47 MOD END *///punch
}public class DataAlgorithm
{#region Easing Curvespublic static float linear(float start, float end, float value){return Mathf.Lerp(start, end, value);}public static float clerp(float start, float end, float value){float min = 0.0f;float max = 360.0f;float half = Mathf.Abs((max - min) / 2.0f);float retval = 0.0f;float diff = 0.0f;if ((end - start) < -half){diff = ((max - start) + end) * value;retval = start + diff;}else if ((end - start) > half){diff = -((max - end) + start) * value;retval = start + diff;}else retval = start + (end - start) * value;return retval;}public static float spring(float start, float end, float value){value = Mathf.Clamp01(value);value = (Mathf.Sin(value * Mathf.PI * (0.2f + 2.5f * value * value * value)) * Mathf.Pow(1f - value, 2.2f) + value) * (1f + (1.2f * (1f - value)));return start + (end - start) * value;}public static float easeInQuad(float start, float end, float value){end -= start;return end * value * value + start;}public static float easeOutQuad(float start, float end, float value){end -= start;return -end * value * (value - 2) + start;}public static float easeInOutQuad(float start, float end, float value){value /= .5f;end -= start;if (value < 1) return end / 2 * value * value + start;value--;return -end / 2 * (value * (value - 2) - 1) + start;}public static float easeInCubic(float start, float end, float value){end -= start;return end * value * value * value + start;}public static float easeOutCubic(float start, float end, float value){value--;end -= start;return end * (value * value * value + 1) + start;}public static float easeInOutCubic(float start, float end, float value){value /= .5f;end -= start;if (value < 1) return end / 2 * value * value * value + start;value -= 2;return end / 2 * (value * value * value + 2) + start;}public static float easeInQuart(float start, float end, float value){end -= start;return end * value * value * value * value + start;}public static float easeOutQuart(float start, float end, float value){value--;end -= start;return -end * (value * value * value * value - 1) + start;}public static float easeInOutQuart(float start, float end, float value){value /= .5f;end -= start;if (value < 1) return end / 2 * value * value * value * value + start;value -= 2;return -end / 2 * (value * value * value * value - 2) + start;}public static float easeInQuint(float start, float end, float value){end -= start;return end * value * value * value * value * value + start;}public static float easeOutQuint(float start, float end, float value){value--;end -= start;return end * (value * value * value * value * value + 1) + start;}public static float easeInOutQuint(float start, float end, float value){value /= .5f;end -= start;if (value < 1) return end / 2 * value * value * value * value * value + start;value -= 2;return end / 2 * (value * value * value * value * value + 2) + start;}public static float easeInSine(float start, float end, float value){end -= start;return -end * Mathf.Cos(value / 1 * (Mathf.PI / 2)) + end + start;}public static float easeOutSine(float start, float end, float value){end -= start;return end * Mathf.Sin(value / 1 * (Mathf.PI / 2)) + start;}public static float easeInOutSine(float start, float end, float value){end -= start;return -end / 2 * (Mathf.Cos(Mathf.PI * value / 1) - 1) + start;}public static float easeInExpo(float start, float end, float value){end -= start;return end * Mathf.Pow(2, 10 * (value / 1 - 1)) + start;}public static float easeOutExpo(float start, float end, float value){end -= start;return end * (-Mathf.Pow(2, -10 * value / 1) + 1) + start;}public static float easeInOutExpo(float start, float end, float value){value /= .5f;end -= start;if (value < 1) return end / 2 * Mathf.Pow(2, 10 * (value - 1)) + start;value--;return end / 2 * (-Mathf.Pow(2, -10 * value) + 2) + start;}public static float easeInCirc(float start, float end, float value){end -= start;return -end * (Mathf.Sqrt(1 - value * value) - 1) + start;}public static float easeOutCirc(float start, float end, float value){value--;end -= start;return end * Mathf.Sqrt(1 - value * value) + start;}public static float easeInOutCirc(float start, float end, float value){value /= .5f;end -= start;if (value < 1) return -end / 2 * (Mathf.Sqrt(1 - value * value) - 1) + start;value -= 2;return end / 2 * (Mathf.Sqrt(1 - value * value) + 1) + start;}/* GFX47 MOD START */public static float easeInBounce(float start, float end, float value){end -= start;float d = 1f;return end - easeOutBounce(0, end, d - value) + start;}/* GFX47 MOD END *//* GFX47 MOD START *///public static float bounce(float start, float end, float value){public static float easeOutBounce(float start, float end, float value){value /= 1f;end -= start;if (value < (1 / 2.75f)){return end * (7.5625f * value * value) + start;}else if (value < (2 / 2.75f)){value -= (1.5f / 2.75f);return end * (7.5625f * (value) * value + .75f) + start;}else if (value < (2.5 / 2.75)){value -= (2.25f / 2.75f);return end * (7.5625f * (value) * value + .9375f) + start;}else{value -= (2.625f / 2.75f);return end * (7.5625f * (value) * value + .984375f) + start;}}/* GFX47 MOD END *//* GFX47 MOD START */public static float easeInOutBounce(float start, float end, float value){end -= start;float d = 1f;if (value < d / 2) return easeInBounce(0, end, value * 2) * 0.5f + start;else return easeOutBounce(0, end, value * 2 - d) * 0.5f + end * 0.5f + start;}/* GFX47 MOD END */public static float easeInBack(float start, float end, float value){end -= start;value /= 1;float s = 1.70158f;return end * (value) * value * ((s + 1) * value - s) + start;}public static float easeOutBack(float start, float end, float value){float s = 1.70158f;end -= start;value = (value / 1) - 1;return end * ((value) * value * ((s + 1) * value + s) + 1) + start;}public static float easeInOutBack(float start, float end, float value){float s = 1.70158f;end -= start;value /= .5f;if ((value) < 1){s *= (1.525f);return end / 2 * (value * value * (((s) + 1) * value - s)) + start;}value -= 2;s *= (1.525f);return end / 2 * ((value) * value * (((s) + 1) * value + s) + 2) + start;}public static float punch(float amplitude, float value){float s = 9;if (value == 0){return 0;}if (value == 1){return 0;}float period = 1 * 0.3f;s = period / (2 * Mathf.PI) * Mathf.Asin(0);return (amplitude * Mathf.Pow(2, -10 * value) * Mathf.Sin((value * 1 - s) * (2 * Mathf.PI) / period));}/* GFX47 MOD START */public static float easeInElastic(float start, float end, float value){end -= start;float d = 1f;float p = d * .3f;float s = 0;float a = 0;if (value == 0) return start;if ((value /= d) == 1) return start + end;if (a == 0f || a < Mathf.Abs(end)){a = end;s = p / 4;}else{s = p / (2 * Mathf.PI) * Mathf.Asin(end / a);}return -(a * Mathf.Pow(2, 10 * (value -= 1)) * Mathf.Sin((value * d - s) * (2 * Mathf.PI) / p)) + start;}/* GFX47 MOD END *//* GFX47 MOD START *///public static float elastic(float start, float end, float value){public static float easeOutElastic(float start, float end, float value){/* GFX47 MOD END *///Thank you to rafael.marteleto for fixing this as a port over from Pedro's UnityTweenend -= start;float d = 1f;float p = d * .3f;float s = 0;float a = 0;if (value == 0) return start;if ((value /= d) == 1) return start + end;if (a == 0f || a < Mathf.Abs(end)){a = end;s = p / 4;}else{s = p / (2 * Mathf.PI) * Mathf.Asin(end / a);}return (a * Mathf.Pow(2, -10 * value) * Mathf.Sin((value * d - s) * (2 * Mathf.PI) / p) + end + start);}/* GFX47 MOD START */public static float easeInOutElastic(float start, float end, float value){end -= start;float d = 1f;float p = d * .3f;float s = 0;float a = 0;if (value == 0) return start;if ((value /= d / 2) == 2) return start + end;if (a == 0f || a < Mathf.Abs(end)){a = end;s = p / 4;}else{s = p / (2 * Mathf.PI) * Mathf.Asin(end / a);}if (value < 1) return -0.5f * (a * Mathf.Pow(2, 10 * (value -= 1)) * Mathf.Sin((value * d - s) * (2 * Mathf.PI) / p)) + start;return a * Mathf.Pow(2, -10 * (value -= 1)) * Mathf.Sin((value * d - s) * (2 * Mathf.PI) / p) * 0.5f + end + start;}/* GFX47 MOD END */#endregion}

总结:

这个使用还是非常方便的。对于数据的处理和抖动,目前来看还是比较有用的。

这么实用有好用 的东西,当然要记录下来,仅供参考。


若有问题,请随时联系!!
非常感谢!!!!

转载于:https://www.cnblogs.com/qitian1/p/6461921.html

Untiy中的数据平滑处理相关推荐

  1. Kinect2.0骨骼跟踪与数据平滑

    Kinect v1和Kinect v2传感器的配置比较:   Kinect v1 Kinect v2           颜色(Color) 分辨率(Resolution) 640×480 1920× ...

  2. 数据挖掘如何分箱以及如何对每个箱子中的数据进行平滑处理

    参考:https://www.cnblogs.com/serena45/p/5559122.html 分箱的方法:有4种:等深分箱法.等宽分箱法.最小熵法和用户自定义区间法. 数据平滑方法:有3种按平 ...

  3. 等宽分箱_数据分析师-数据挖掘如何分箱以及对箱子中的数据进行平滑处理

    题干: 假定用于分析的数据包含属性age.数据元组中age的值如下(按递增序):13,15,16,16,19,20,20,21,22,22, 25,25,25,30,33,33,35,35,36,40 ...

  4. 从tensorflow的summary中提取数据,并进行平滑操作与显示

    在训练神经网络时,我们通常用summary记录训练的过程信息,并用tensorboard可视化显示. 在完成训练后,有时我们需要使用保存在summary中的数据进行分析,那么如何从summary中提取 ...

  5. MATLAB中数据平滑处理

    参考链接:http://bbs.pinggu.org/thread-3777396-1-1.html smoothts函数 调用格式: output = smoothts(input) output ...

  6. oracle tns 代理配置_OGG实现Oracle到MySQL数据平滑迁移

    技术分享 | 使用OGG实现Oracle到MySQL数据平滑迁移 - 爱可生开源社区​opensource.actionsky.com 一.OGG概述 OGG全称为Oracle GoldenGate, ...

  7. [综述类] 一文道尽深度学习中的数据增强方法(上)

    今天带来一次有关于深度学习中的数据增强方法的分享. 00 什么是数据增强 在深度学习项目中,寻找数据花费了相当多的时间.但在很多实际的项目中,我们难以找到充足的数据来完成任务. 为了要保证完美地完成项 ...

  8. 三维数据平滑处理_你该如何正确的处理思看科技三维扫描仪得到的数据?

    其他行业至少在三维扫描领域没有说过,无论设备的精度有多高,被扫描产品的3D数据都会不可避免地引入数据误差,尤其是靠近锐利边缘和边界的测量数据.可能会导致点周围的曲面补丁偏离原始曲面,因此通常需要通过以 ...

  9. Java平滑处理什么意思_为何要进行数据平滑处理?

    平滑处理,可使分类器的学习更加准确,我们会首先把label给.这一步很容易会被忽略,导致模型的结果总是达不到一定标准. 使用最有逼格的 log1p, 也就是 log(x+1),避免了复值的问题. PS ...

  10. 【转载】使用 gnuplot 在网页中显示数据

    来源:http://www.ibm.com/developerworks/cn/aix/library/au-gnuplot/ 简介 gnuplot 是一个用于生成趋势图和其他图形的工具.它通常用于收 ...

最新文章

  1. UA MATH571B 试验设计I 试验设计简介
  2. linux 编译 freescale arm 的gdb server
  3. 记一次排查线上程序内存的忽高忽低,又是大集合惹祸了
  4. powermock模拟对象_使用PowerMock测试对象的内部状态
  5. update core.php 更新_PHP: 更新日志 - Manual
  6. BZOJ 2527 Meteors | 整体二分
  7. MyBatis整合Spring的实现(11)
  8. 原始图像扩展_Resize Sense for Mac(图像处理软件)
  9. 如何在 Mac 上管理用于锁定备忘录的密码?
  10. Dell Inspiron 3443 BIOS升级问题解决
  11. 哈理工OJ 1983 Math(前缀和)
  12. 基于jqUI的日期选择(‘yy-mm-dd’)
  13. Ubuntu 字符终端
  14. 苹果App Store商店中国区如何改为美国区
  15. 利用IV分析仪测量二极管的伏安特性
  16. 如何成为一个优秀的互联网营销人员?(互联网销售/网络营销职位从菜鸟到大神应该学习的内容)
  17. Django_使用class写views
  18. Negroni和Gorilla/mux 解析 Golang
  19. js正则表达式匹配汉字
  20. TKDE2022 | 知识图谱质量控制综述

热门文章

  1. 在苹果Mac中将 WEBP 图片转成 JPG、PNG 格式的 2 种方法
  2. 如何在Mac上批量转换和调整图像大小
  3. NUXT.JS原理简述
  4. recyclerview简单实现单选多选反选全选
  5. 台湾半导体封测商南茂股东大会通过紫光24亿元入股案
  6. JavaScript常见封装方法
  7. JavaScript中的[]和{}
  8. 《统一沟通-微软-实战》-7-配置-2-呼叫寄存
  9. Request 获取网址各片段
  10. 打开游戏要运行19.8亿次 if 语句?黑客嘲讽RockStar游戏代码太烂了