【Android UI】贝塞尔曲线 ⑥ ( 贝塞尔曲线递归算法原理 | 贝塞尔曲线递归算法实现 )

网友投稿 230 2022-09-03

【Android UI】贝塞尔曲线 ⑥ ( 贝塞尔曲线递归算法原理 | 贝塞尔曲线递归算法实现 )

文章目录

​​一、贝塞尔曲线递归算法​​​​二、贝塞尔曲线递归算法实现​​

贝塞尔曲线参考 : ​​:

根据上述 贝塞尔曲线递推公式 , 可以得到一个递归算法 , 算法核心公式如下 :

二、贝塞尔曲线递归算法实现

递归算法中最终的一阶贝塞尔曲线上的点计算公式如下 :

根据上述计算公式 , 得到如下代码 :

(1 - u) * mControlPoints.get(j).x + u * mControlPoints.get(j + 1).x

完整的贝塞尔曲线上的点坐标算法如下 :

BezierX 方法用于计算 贝塞尔曲线上的 X 轴坐标点 ;BezierY 方法用于计算 贝塞尔曲线上的 Y 轴坐标点 ;

// 贝塞尔曲线控制点集合 private ArrayList mControlPoints = new ArrayList<>(); /** * 贝塞尔曲线递归算法, 本方法计算 X 轴坐标值 * @param i 贝塞尔曲线阶数 * @param j 贝塞尔曲线控制点 * @param u 比例 / 时间 , 取值范围 0.0 ~ 1.0 * @return */ private float BezierX(int i, int j, float u) { if (i == 1) { // 递归退出条件 : 贝塞尔曲线阶数 降为一阶 // 一阶贝塞尔曲线点坐标 计算如下 : return (1 - u) * mControlPoints.get(j).x + u * mControlPoints.get(j + 1).x; } return (1 - u) * BezierX(i - 1, j, u) + u * BezierX(i - 1, j + 1, u); } /** * 贝塞尔曲线递归算法, 本方法计算 Y 轴坐标值 * @param i 贝塞尔曲线阶数 * @param j 贝塞尔曲线控制点 * @param u 比例 / 时间 , 取值范围 0.0 ~ 1.0 * @return */ private float BezierY(int i, int j, float u) { if (i == 1) { // 递归退出条件 : 贝塞尔曲线阶数 降为一阶 return (1 - u) * mControlPoints.get(j).y + u * mControlPoints.get(j + 1).y; } return (1 - u) * BezierY(i - 1, j, u) + u * BezierY(i - 1, j + 1, u); }

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Qt开发经验小技巧231-235
下一篇:芬琳漆用一块“黑板墙”刷爆暑期,沉浸式体验营销玩出新花样!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~