Android UI贝塞尔曲线 ⑤ ( 德卡斯特里奥算法 | 贝塞尔曲线递推公式 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 \\cfracP_0P_0^1P_0^1P_1 = \\cfracP_1P_1^1P_1^1P_2 = \\cfracP_0^1P_0^2P_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 PAndroid UI贝塞尔曲线 ① ( 一阶贝塞尔曲线 | 二阶贝塞尔曲线 )
Android UI贝塞尔曲线 ③ ( 贝塞尔曲线关键点坐标记录 | 二阶贝塞尔曲线示例 )
Android UI贝塞尔曲线 ⑥ ( 贝塞尔曲线递归算法原理 | 贝塞尔曲线递归算法实现 )
Android UI贝塞尔曲线 ② ( 二阶贝塞尔曲线公式 | 三阶贝塞尔曲线及公式 | 高阶贝塞尔曲线 )
Android UI贝塞尔曲线 ④ ( 使用 android.graphics.Path 提供的 cubicTo 方法绘制三阶贝塞尔曲线示例 )