发明名称 基于前次偏差的控制点平滑化方法
摘要 本发明公开了一种基于前次偏差的控制点平滑化方法。基于前次预测的偏差来动态调整控制点的位置,实现远程控制点的平滑化处理。本发明是对Dead-reckoning方法进行改进,Dead-reckoning方法利用了对象的速度、加速度参数进行动态预测,而本发明不仅应用了对象的速度、加速度,并且利用了以往的偏差进行微量的调整,提高了控制点运动的预测精度。弥补网络抖动带来的不良结果,展示给用户平滑的远程控制点移动轨迹,达到较好的感知效果。
申请公布号 CN1866242A 申请公布日期 2006.11.22
申请号 CN200610052098.0 申请日期 2006.06.23
申请人 浙江大学 发明人 陈纯;卜佳俊;杨建旭;姜波
分类号 G06F17/00(2006.01);G06F9/46(2006.01) 主分类号 G06F17/00(2006.01)
代理机构 杭州求是专利事务所有限公司 代理人 林怀禹
主权项 1.一种基于前次偏差的控制点平滑化方法,其特征在于:1)记录最近N秒钟之内的远程控制点在每个毫秒的移动位置;2)当网络抖动发生时,为了预测控制点的移动位置,首先计算控制点在X方向和Y方向的当前速度,用aveVelocityX和aveVelocityY来表示;近似速度是通过离当前最近的Tlast时刻的位置坐标(Xlast,Ylast)以及M毫秒前Tflag时刻接收到的位置坐标(Xflag,Yflag)来计算的;<math> <mfenced open='{' close=''> <mtable> <mtr> <mtd> <msub> <mi>aveVelocity</mi> <mi>X</mi> </msub> <mrow> <mo>=</mo> <mrow> <mo>(</mo> <msub> <mi>X</mi> <mi>last</mi> </msub> <mo>-</mo> <msub> <mi>X</mi> <mi>flag</mi> </msub> <mo>)</mo> </mrow> <mo>/</mo> <mrow> <mo>(</mo> <msub> <mi>T</mi> <mi>last</mi> </msub> <mo>-</mo> <msub> <mi>T</mi> <mi>flag</mi> </msub> <mo>)</mo> </mrow> </mrow> </mtd> </mtr> <mtr> <mtd> <msub> <mi>aveVelocity</mi> <mi>Y</mi> </msub> <mrow> <mo>=</mo> <mrow> <mo>(</mo> <msub> <mi>Y</mi> <mi>last</mi> </msub> <mo>-</mo> <msub> <mi>Y</mi> <mi>flag</mi> </msub> <mo>)</mo> </mrow> <mo>/</mo> <mrow> <mo>(</mo> <msub> <mi>T</mi> <mi>last</mi> </msub> <mo>-</mo> <msub> <mi>T</mi> <mi>flag</mi> </msub> <mo>)</mo> </mrow> </mrow> </mtd> </mtr> </mtable> </mfenced> </math> 3)计算控制点在X方向和Y方向的当前加速度,用aveAccelerationX和aveAccelerationY来表示;近似加速度是通过离当前最近的Tlast时刻(Xlast,Ylast)位置的速度以及Tflag时刻(Xflag,Yflag)位置的另一个速度来计算的;<math> <mfenced open='{' close=''> <mtable> <mtr> <mtd> <msub> <mi>aveAcceleration</mi> <mi>X</mi> </msub> <mrow> <mo>=</mo> <mrow> <mo>(</mo> <msub> <mi>Velocity</mi> <mi>Xlast</mi> </msub> <mo>-</mo> <msub> <mi>Velocity</mi> <mi>Xflag</mi> </msub> <mo>)</mo> </mrow> <mo>/</mo> <mrow> <mo>(</mo> <msub> <mi>T</mi> <mi>last</mi> </msub> <mo>-</mo> <msub> <mi>T</mi> <mi>flag</mi> </msub> <mo>)</mo> </mrow> </mrow> </mtd> </mtr> <mtr> <mtd> <msub> <mi>aveAcceleration</mi> <mi>Y</mi> </msub> <mrow> <mo>=</mo> <mrow> <mo>(</mo> <msub> <mi>Velocity</mi> <mi>Ylast</mi> </msub> <mo>-</mo> <msub> <mi>Velocity</mi> <mi>Yflag</mi> </msub> <mo>)</mo> </mrow> <mo>/</mo> <mrow> <mo>(</mo> <msub> <mi>T</mi> <mi>last</mi> </msub> <mo>-</mo> <msub> <mi>T</mi> <mi>flag</mi> </msub> <mo>)</mo> </mrow> </mrow> </mtd> </mtr> </mtable> </mfenced> </math> 4)计算控制点在X方向和Y方向的校正量,分别用Δx和Δy来表示,Δx和Δy与如下因素相关:(1)前一次抖动结束时(X,Y)的预测值;(2)前一次抖动结束时接收到的相对应的(X,Y)的真实值;(3)当前抖动延时;(4)前一次抖动延时。如果系统是第一次预测,Δx和ΔY的值为0;计算Δx和Δy的公式为:<math> <mfenced open='{' close=''> <mtable> <mtr> <mtd> <mi>&Delta;x</mi> <mo>=</mo> <mrow> <mo>(</mo> <msub> <mi>X</mi> <mi>true</mi> </msub> <mo>-</mo> <msub> <mi>X</mi> <mi>last</mi> </msub> <mo>)</mo> </mrow> <mo>*</mo> <mi>JitterLapse</mi> <mo>*</mo> <mi>C</mi> <mo>/</mo> <mi>JitterPeriod</mi> </mtd> </mtr> <mtr> <mtd> <mi>&Delta;y</mi> <mo>=</mo> <mrow> <mo>(</mo> <msub> <mi>Y</mi> <mi>true</mi> </msub> <mo>-</mo> <msub> <mi>Y</mi> <mi>last</mi> </msub> <mo>)</mo> </mrow> <mo>*</mo> <mi>JitterLapse</mi> <mo>*</mo> <mi>C</mi> <mo>/</mo> <mi>JitterPeriod</mi> </mtd> </mtr> </mtable> </mfenced> </math> 其中,Xlast是前一次网络抖动过程中预测的最后一个X的坐标;Xtrue是前一次网络抖动过程中被抖动延时阻塞的最后一个X真实坐标;Ylast是前一次网络抖动过程中预测的最后一个Y的坐标;Ytrue是前一次网络抖动过程中被抖动延时阻塞的最后一个Y真实坐标;JitterLapse是当前抖动延时;JitterPeriod前一次抖动延时;5)将控制点的当前位置记做(Xcurrent,Ycurrent),而控制点的下一个位置记做(Xnext,Ynext),当网络抖动发生的时候,(Xnext,Ynext)通过以下公式来计算:<math> <mfenced open='{' close=''> <mtable> <mtr> <mtd> <msub> <mi>X</mi> <mi>next</mi> </msub> <mo>=</mo> <msub> <mi>X</mi> <mi>current</mi> </msub> <mo>+</mo> <mi></mi> <msub> <mi>aveVelocity</mi> <mi>X</mi> </msub> <mo>*</mo> <mi>T</mi> <mo>+</mo> <msub> <mi>aveAcceleration</mi> <mi>X</mi> </msub> <msup> <mrow> <mo>*</mo> <mi>T</mi> </mrow> <mn>2</mn> </msup> <mo>+</mo> <mi>&Delta;x</mi> </mtd> </mtr> <mtr> <mtd> <msub> <mi>Y</mi> <mi>next</mi> </msub> <mo>=</mo> <msub> <mi>Y</mi> <mi>current</mi> </msub> <mo>+</mo> <msub> <mi>aveVelocity</mi> <mi>Y</mi> </msub> <mo>*</mo> <mi>T</mi> <mo>+</mo> <msub> <mi>aveAcceleration</mi> <mi>Y</mi> </msub> <mo>*</mo> <msup> <mi>T</mi> <mn>2</mn> </msup> <mo>+</mo> <mi>&Delta;y</mi> </mtd> </mtr> </mtable> </mfenced> </math> 其中:T是当前抖动延时,等同于JitterLapse;6)将远程控制点按照预测的位置(Xnext,Ynext)绘制在用户的屏幕上;7)擦除前一个预测的控制点,绘制最新预测的控制点,依此类推,直到将抖动过程中所有预测的控制点绘制完成。
地址 310027浙江省杭州市西湖区浙大路38号