本发明属于交互游戏技术领域,尤其涉及一种基于手机陀螺仪传感器的计算抛物线运动速度和方向的方法,应用于双屏互动游戏中。
背景技术:
如何能有效的利用用户手机的上摇动方向和摇动力量来控制大屏上物体的做抛物线运动的速度和方向,是在双屏互动游戏中提高用户体验的非常关键的一项指标。
现有的基于陀螺仪传感器,一方面由于陀螺仪本身不提供计算抛物线运行的速度和方向的功能,只是提供各个角度的基本信息,因此存在不稳定的数值。另一方面实时计算的抛物线的速度,所展现的交互动画不太友好,因为人在用手机做摇动时,手机有来来回回或一上一下的动作,如果实时计算抛物线,会有几个问题:1摇动的路径并没有按照游戏应用的奖品页面布局的位置做对应;2.游戏应用中的被控制物原本设计是向前投,被控制物是向前飞,如果按照实时反应手机的摇动,就不是一直往前飞,而是来回飞,不符合游戏应用的交互。
技术实现要素:
为解决上述技术问题,本申请提供一种基于手机陀螺仪传感器的计算抛物线运动速度和方向的方法,其基于陀螺仪传感器有效计算抛物线速度和方向,并能以友好交互动画来体现。
本发明的技术方案如下:
步骤1,获取基础数据:用户摇动手机时,通过监听手机的deviceorientation事件来获取相关的数据。
步骤2,使用四元数法计算手机从a点移动到b点的x,y,z轴旋转角度,获得单位四元数q。
步骤3,将四元数q进行一个x轴上的四元数90度(θ)变形,即四元数与qw相乘获得与世界坐标匹配后的四元数qw,其中,qw表示游戏应用中的“世界”坐标方向。
步骤4,将步骤3中的结果qw与z轴上的变化的四元数(qs)相乘,获得与手机屏幕平行方向匹配的四元数qs,qs表示当前屏幕方向。
步骤5,根据四元数qs利用q*qs*qw计算出最终四元数矩阵r。
步骤6,实时获取手机摇动时的多个四元数矩阵r,设定时间内取一次数据,并将多个四元数矩阵r值保存。
效果较好的,16.67毫秒取一次数据,可在游戏应用中,取手机摇动6秒时间内的四元数矩阵r值。
效果较好的,设置缓冲区并使用正太分布阈值滤波用来减低噪音:当四元数矩阵r值中的x,y,z没有超过阈值时,过滤掉。
步骤7,计算出的速度样本和方向;
方向计算:以四元数矩阵r值中的z值,作为抛物线的方向;
速度计算:实时模拟四元数矩阵r值中速度,会出现交互动画不太美好,所以采用速度相近法,即提前预设一些速度样本,并放置于平面坐标中;以四元数矩阵r值中的x,y值映射为平面坐标,并得出b,使用余弦向量法计算出最最相近的预设的速度样本。
步骤8,根据上一步计算出的速度样本和方向,模拟抛物线的运动。
有益效果:
本发明基于手机陀螺仪传感器计算抛物线速度和方向的方法,能够以友好的交互动画来体现。
附图说明
图1是本发明的基于手机陀螺仪传感器的计算抛物线运动速度和方向的方法中世界坐标系示意图。
图2是本发明的基于手机陀螺仪传感器的计算抛物线运动速度和方向的方法平面坐标系视图。
具体实施方式
基于手机陀螺仪传感器的计算抛物线运动速度和方向的方法,其包括以下内容:
1.获取基础数据:
用户摇动手机时,通过监听手机的deviceorientation事件来获取相关的数据,数据包括alpha,beta,gamma。alpha代表手机水平放置时,绕z轴旋转的角度,数值为0度到360度;beta代表手机水平放置时,绕x轴旋转的角度,数值为-180度到180度;gamma代表手机水平放置时,绕y轴旋转的角度,数值为-180度到180度,(x,y,z)为世界坐标系,如图1所示。
现有技术中,手机端的h5默认有封装好的deviceorientation事件,提供给h5端的javascript来调用,游戏应用的手机端h5程序,通过该接口来监听该事件。当手机摇动时,由手机端h5默认有封装好的deviceorientation事件,来触发并传递手机摇动所产生的数据,如alpha,beta,gamma。
2.使用四元数算法转换:使用四元数法计算手机从a点移动到b点的x,y,z轴旋转角度,该算法与传统的欧拉角算法相比,避免了数值模糊和万向节锁定的缺陷,并更容易计算。使用如方程式(1)将设备方向角alpha(α)、beta(β)、gamma(γ)转换为一个单位四元数q,其中,alpha简称α,beta简称β,gamma简称γ。
3.将步骤2得出的四元数和游戏应用中的“世界”坐标匹配:将上一步获得的四元数q进行一个x轴上的四元数90度(θ)变形(转换到弧度制),即四元数与qw相乘获得与世界坐标匹配后的四元数qw,qw游戏应用中的“世界”坐标方向,如方程式(2)。
此处“世界”坐标中的世界,就是指人所感知的现实世界,是将手机端的坐标体系,变换为人的坐标体系。
4.四元数和屏幕方向匹配:如方程式(3),将步骤3中的结果qw与z轴上的变化的四元数(qs)相乘获得与屏幕方向匹配的四元数qs。qs表示当前屏幕方向,从0度开始绕z轴旋转的角度(θ),θ值根据监听手机的orientationchange事件获得。
5.计算出最终四元数矩阵r,根据上一步获得最终的四元数,w,x,y,z。
6.当手机不停摇动时,实时获取多个四元数矩阵r,设定时间内取一次数据,并将多个四元数矩阵r值保存。
作为一种实施例,约16.67毫秒取一次数据,并将多个四元数矩阵r值保存。在游戏应用中,取手机摇动6秒时间内的四元数矩阵r值。
作为一种实施例,可在游戏应用中,取手机摇动6秒时间内的四元数矩阵r值。
7.设置缓冲区并使用正太分布阈值滤波用来减低噪音:当四元数矩阵r值中的x,y,z没有超过阈值时,过滤掉。
8.方向计算:以四元数矩阵r值中的z值,作为抛物线的方向。速度计算:实时模拟四元数矩阵r值中速度,会出现交互动画不太美好,所以采用速度相近法,即提前预设一些速度样本,并放置于平面坐标中;以四元数矩阵r值中的x,y值映射为平面坐标,并得出b,使用余弦向量法计算出最相近的预设的速度样本。
如图2所示,b是四元数矩阵r值中的x,y值映射为平面坐标,a是提前预设一些速度样本值,平面使用余弦向量法计算出最相近的预设的速度样本。
9.根据上一步计算出的速度样本和方向,模拟抛物线的运动。
不同的速度样本对应不同的动画变化速率,这个是提前设置好的,找到类似的样本,来执行该动画变化速率。