贝塞尔细节实现

实现思路:

  1.  

首先要说一下曲线的路径,我这里所用的方法是通过一段段连接的贝塞尔曲线拼接而成,紧接着就要获取曲线上的点了,直接套用二阶贝塞尔曲线公式求得,这里贴一下曲线的原理和公式(具体细节请各位自行谷歌),如下:

二阶曲线由两个数据点(P0 和 P2),一个控制点(P1)来描述曲线状态,从而计算动点B:

这里为了实现匀速运动,需要一个求t的公式算法来达到匀速的目的,这里需要使用牛顿切线法求出近似解,同时通过牛顿切线法得到某一个点的导数,比如我的球在沿着曲线运动时,可以正常的旋转一定的角度。

关于t的推导公式,我这里借鉴了一位大神的帖子,迭代算法公式为:

L(t)函数的推导公式如下:

这样,当贝塞尔曲线的长度间距无限小时,得出的t值,也是相对于比较精确的。
来源链接:https://blog.csdn.net/linuxheik/article/details/79454663399
(大神已经贴了完整的代码,可以直接参考)

有了这个,就好办了,拿到点以后,看似复杂的曲线,现在就可以看成是一条“直线”了,在直线上实现一个物体的加速度、减速度、匀速等运动,应该算很easy了。

注意:连接之后,每个连接点处,会重复一个额外的点,在代码上,需要考虑删去一个多余的重复点,简单点说,就是:去重。否则球运动到此时会多顿一下。


路径的生成,

我还特地做了一个贝塞尔曲线工具编辑器,如图:

请点击,传送门:
https://forum.cocos.com/t/topic/73416

 

来源于

实现思路:

  1.  

首先要说一下曲线的路径,我这里所用的方法是通过一段段连接的贝塞尔曲线拼接而成,紧接着就要获取曲线上的点了,直接套用二阶贝塞尔曲线公式求得,这里贴一下曲线的原理和公式(具体细节请各位自行谷歌),如下:

二阶曲线由两个数据点(P0 和 P2),一个控制点(P1)来描述曲线状态,从而计算动点B:

这里为了实现匀速运动,需要一个求t的公式算法来达到匀速的目的,这里需要使用牛顿切线法求出近似解,同时通过牛顿切线法得到某一个点的导数,比如我的球在沿着曲线运动时,可以正常的旋转一定的角度。

关于t的推导公式,我这里借鉴了一位大神的帖子,迭代算法公式为:

L(t)函数的推导公式如下:

这样,当贝塞尔曲线的长度间距无限小时,得出的t值,也是相对于比较精确的。
来源链接:https://blog.csdn.net/linuxheik/article/details/79454663399
(大神已经贴了完整的代码,可以直接参考)

有了这个,就好办了,拿到点以后,看似复杂的曲线,现在就可以看成是一条“直线”了,在直线上实现一个物体的加速度、减速度、匀速等运动,应该算很easy了。

注意:连接之后,每个连接点处,会重复一个额外的点,在代码上,需要考虑删去一个多余的重复点,简单点说,就是:去重。否则球运动到此时会多顿一下。


路径的生成,

我还特地做了一个贝塞尔曲线工具编辑器,如图:

请点击,传送门:
https://forum.cocos.com/t/topic/73416

来源于https://forum.cocos.org/t/zuma/73642

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值