我正在使用Kinect和Unity。
通过Kinect,我们可以检测手势,并在手势激活时在屏幕上绘制一条线,该线会跟随手的移动轨迹。每次更新时,最新(也是最后)的位置将作为线的一个点存储。然而,这些线经常看起来很不平滑。
下面是一个通用的图片,展示了我想要实现的效果:
红线表示原始线,紫线表示新平滑线。如果用户突然停下并转向,我们希望它不要完全这样做,而是进行快速转向或循环。
我当前的解决方案是使用三次贝塞尔曲线,并且仅使用彼此相距X距离的点(Y个点之间使用三次贝塞尔曲线)。然而,其中有两个问题:
1)它经常无法保持到用户绘制的向外距离的曲线,例如,如果用户突然停止一条直线并倒转方向,则该线不会延伸到用户反转方向的点。
2)选择的“好”点也有可能是“坏”的随机跳跃点。
因此,我考虑了其他解决方案。其中包括限制点之间的最大角度(0度为直线)。但是,如果点的角度超出限制,则在尽可能按照绘制的线路行进的情况下降低角度背后的数学似乎很复杂。但也许不是这样。无论如何,我不确定该怎么做,正在寻求帮助。
请记住,这需要实时完成,因为用户正在绘制线条。