【Android UI】贝塞尔曲线 ⑤ ( 德卡斯特里奥算法 | 贝塞尔曲线递推公式 )
贝塞尔曲线参考 : https://github.com/venshine/BezierMaker
一、德卡斯特里奥算法
贝塞尔曲线的 三阶 / 四阶 / 五阶 曲线的绘制 , 都是依赖于其低阶贝塞尔曲线实现的 ,
三阶贝塞尔曲线 是由 二阶贝塞尔曲线 实现的 ,
四阶贝塞尔曲线 是由 三阶贝塞尔曲线 实现的 ;
德卡斯特里奥算法 可以实现 贝塞尔曲线 降阶的效果 ;
下面开始介绍 德卡斯特里奥算法 ;
在 向量 A B AB AB 上 选择 C C C 点 ,
C C C 点将 A B AB AB 向量切割成比例为 u : 1 − u u : 1- u u:1−u ,
也就是 A A A 到 C C C 的距离 ∣ A C ∣ |AC| ∣AC∣ , 与 A A A 到 B B B 的距离 ∣ A B ∣ |AB| ∣AB∣ , 其比值为 u u u , 写成公式就是如下形式 :
∣ A C ∣ : ∣ A B ∣ = u |AC| : |AB| = u ∣AC∣:∣AB∣=u
A A A 到 B B B 的距离 ∣ A B ∣ |AB| ∣AB∣ 全长为 1 1 1 ,
A A A 到 C C C 的距离 ∣ A C ∣ |AC| ∣AC∣ 比例占到全长的 u u u , u u u 的取值范围是 0 0 0 ~ 1 1 1 之间的浮点值 ,
C C C 到 B B B 的距离 ∣ C B ∣ |CB| ∣CB∣ 比例占到全长的 1 − u 1-u 1−u ;
再回到贝塞尔曲线中 ,
上图是 P 0 P_0 P0 到 P 2 P_2 P2 的 二阶 贝塞尔曲线 , P 0 P_0 P0 是起始点 , P 2 P_2 P2 是终止点 , P 1 P_1 P1 是控制点 ;
首先 通过 一阶等式 , 在 P 0 P_0 P0 到 P 1 P_1 P1 之间确定出 P 0 1 P_0^1 P01 点 , P 0 P_0 P0 到 P 0 1 P_0^1 P01 点占 整个 P 0 P_0 P0 到 P 1 P_1 P1 的比例为 u u u ;
然后 通过 一阶等式 , 在 P 1 P_1 P1 到 P 2 P_2 P2 之间确定出 P 1 1 P_1^1 P11 点 , P 1 P_1 P1 到 P 1 1 P_1^1 P11 点占 整个 P 1 P_1 P1 到 P 2 P_2 P2 的比例为 u u u ;
最后 通过 一阶等式 , 在 P 0 1 P_0^1 P01 到 P 1 1 P_1^1 P11 之间确定出 P 0 2 P_0^2 P02 点 , P 0 1 P_0^1 P01 到 P 0 2 P_0^2 P02 点占 整个 P 0 1 P_0^1 P01 到 P 1 1 P_1^1 P11 的比例为 u u u ;
最终得到如下等式 :
P 0 P 0 1 P 0 1 P 1 = P 1 P 1 1 P 1 1 P 2 = P 0 1 P 0 2 P 0 2 P 1 1 = u \cfrac{P_0P_0^1}{P_0^1P_1} = \cfrac{P_1P_1^1}{P_1^1P_2} = \cfrac{P_0^1P_0^2}{P_0^2P_1^1} = u P01P1P0P01=P11P2P1P11=P02P11P01P02=u
当 u u u 从 0 0 0 ~ 1 1 1 进行变化时 , P 0 2 P_0^2 P02 点形成的曲线就是 二阶贝塞尔曲线 ;
( 网上找的图片 , 图片中的 t t t 也就是上面说的比例 u u u )
二阶贝塞尔曲线中的 P 0 2 P_0^2 P02 点 ,
由 起始点 P 0 P_0 P0 到 控制点 P 1 P_1 P1 组成的向量 , 和 由 控制点 P 1 P_1 P1 到 终止点 P 2 P_2 P2 组成的向量 ,
这两个向量 根据比例 u u u 决定的 一阶贝塞尔曲线 P 0 1 P_0^1 P01 到 P 1 1 P_1^1 P11 向量 根据比例 u u u 确定的 ,
也就是 P 0 2 P_0^2 P02 点 由 一阶贝塞尔曲线 P 0 1 P_0^1 P01 到 P 1 1 P_1^1 P11 向量 确定 ;
上述操作 , 将 二阶贝塞尔曲线 , 降阶成了 一阶贝塞尔曲线 ;
二、贝塞尔曲线递推公式
由上面的结论进行类推 :
二阶贝塞尔曲线 ( 起止点 + 1 1 1 个控制点 ) 由 2 2 2 条 一阶贝塞尔曲线 确定 ,
三阶贝塞尔曲线 ( 起止点 + 2 2 2 个控制点 ) 由 2 2 2 条 二阶贝塞尔曲线 确定 ,
四阶贝塞尔曲线 ( 起止点 + 3 3 3 个控制点 ) 由 2 2 2 条 三阶贝塞尔曲线 确定 ,
⋮ \vdots ⋮
n n n阶贝塞尔曲线 ( 起止点 + n − 1 n-1 n−1 个控制点 ) 由 2 2 2 条 n − 1 n-1 n−1 阶贝塞尔曲线 确定 ;
贝塞尔曲线递推公式如下 :
P i k = { P i , k = 0 ( 1 − t ) P i k − 1 + t P i + 1 k − 1 , k = 1 , 2 , ⋯ , n ; i = 0 , 1 , ⋯ , n − k P_i^k =
文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。
原文链接:hanshuliang.blog.csdn.net/article/details/126038577
- 点赞
- 收藏
- 关注作者
评论(0)