当前位置:  开发笔记 > IOS > 正文

如何在触摸时跟踪手指移动以绘制平滑曲线?

如何解决《如何在触摸时跟踪手指移动以绘制平滑曲线?》经验,为你挑选了1个好方法。

喜欢我想要的是如果我在iphone屏幕上快速移动我的手指,那么我想要一些使用石英2d或opengl es做出适当曲线的东西.

我想画一条曲线风格的路径......我曾经看过GLPaint(OpenglES)的例子,但考虑到你的手指移动速度快,它不会帮助我很多.....

像制作一条平滑的曲线......任何人都有某种例子请告诉我

谢谢

编辑:从以下答案移开:

谢谢大家.......

但我曾尝试过两个控制点的bezier曲线算法,但问题首先是如何计算控制点是否没有预定义点....

正如我所提到的,我的手指运动速度很快......所以大部分时间我都是直线而不是曲线,因为接触点数量较少......

现在,作为标记所说的分段时尚,ihad试着考虑前四个触摸点并将它们渲染到屏幕上,然后删除第一个点然后再去寻找接下来的四个点.第1步:1,2,3,4步骤2:2,3,4,5就像在那种方法中我得到重叠,这实际上不是问题,但没有得到平滑的曲线.... ....

但为了快速移动手指我必须找到别的东西?????



1> Naaff..:

根据您正在查看的样本点数量,我建议采用两种方法:

简单插值

您可以按设定的间隔简单地对手指位置进行采样,然后使用像Catmull-Rom样条曲线那样插入采样点.这比听起来容易,因为您可以轻松地将Catmull-Rom样条曲线转换为一系列立方贝塞尔曲线.

这是如何做.假设你有连续四个采样点P0,P1,P2并且P3,连接三次Bezier曲线P1P2由以下控制点定义:

B0 = P1
B1 = P1 + (P2 - P0)/6
B3 = P2 + (P1 - P3)/6
B4 = P2

只要您的采样点不太密集且非常容易,这应该可以正常工作.唯一的问题可能是样本的开始和结束,因为第一个和最后一个采样点没有在开放曲线中插值.一个常见的解决方法是将第一个和最后一个采样点加倍,以便您有足够的点来使曲线通过每个原始样本.

要了解Catmull-Rom曲线的外观,您可以试用这个演示Catmull-Rom样条的Java小程序.

为您的样品拟合曲线

更先进(也更困难)的方法是对样本点进行最小二乘近似.如果你想尝试这个,程序看起来像如下:

    收集样本点

    定义NURBS曲线(包括其结矢量)

    建立样本和曲线的线性方程组

    在最小二乘意义上解决系统问题

假设您可以选择一个合理的NURBS结矢量,这将为您提供一个NURBS曲线,该曲线非常接近您的采样点,从而最小化样本与曲线之间的平方距离.如果需要,甚至可以将NURBS曲线分解为一系列贝塞尔曲线.

如果您决定探索这种方法,那么Gerald Farin的书"CAGD曲线和曲面"或类似的参考文献将会非常有用.在Farin的第5版中,第9.2节专门讨论了这个问题.第7.8节显示了如何使用贝塞尔曲线进行此操作,但您可能需要一条高度曲线才能获得良好的拟合.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有