喜欢我想要的是如果我在iphone屏幕上快速移动我的手指,那么我想要一些使用石英2d或opengl es做出适当曲线的东西.
我想画一条曲线风格的路径......我曾经看过GLPaint(OpenglES)的例子,但考虑到你的手指移动速度快,它不会帮助我很多.....
像制作一条平滑的曲线......任何人都有某种例子请告诉我
谢谢
谢谢大家.......
但我曾尝试过两个控制点的bezier曲线算法,但问题首先是如何计算控制点是否没有预定义点....
正如我所提到的,我的手指运动速度很快......所以大部分时间我都是直线而不是曲线,因为接触点数量较少......
现在,作为标记所说的分段时尚,ihad试着考虑前四个触摸点并将它们渲染到屏幕上,然后删除第一个点然后再去寻找接下来的四个点.第1步:1,2,3,4步骤2:2,3,4,5就像在那种方法中我得到重叠,这实际上不是问题,但没有得到平滑的曲线.... ....
但为了快速移动手指我必须找到别的东西?????
根据您正在查看的样本点数量,我建议采用两种方法:
简单插值
您可以按设定的间隔简单地对手指位置进行采样,然后使用像Catmull-Rom样条曲线那样插入采样点.这比听起来容易,因为您可以轻松地将Catmull-Rom样条曲线转换为一系列立方贝塞尔曲线.
这是如何做.假设你有连续四个采样点P0
,P1
,P2
并且P3
,连接三次Bezier曲线P1
到P2
由以下控制点定义:
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节显示了如何使用贝塞尔曲线进行此操作,但您可能需要一条高度曲线才能获得良好的拟合.