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:1u ,

也就是 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 1u ;


再回到贝塞尔曲线中 ,

上图是 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 方法绘制三阶贝塞尔曲线示例 )

Android 高级UI解密 :花式玩转贝塞尔曲线(波浪轨迹变换动画)