前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android UI】贝塞尔曲线 ⑤ ( 德卡斯特里奥算法 | 贝塞尔曲线递推公式 )

【Android UI】贝塞尔曲线 ⑤ ( 德卡斯特里奥算法 | 贝塞尔曲线递推公式 )

作者头像
韩曙亮
发布2023-03-30 16:10:26
5470
发布2023-03-30 16:10:26
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

贝塞尔曲线参考 : https://github.com/venshine/BezierMaker

一、德卡斯特里奥算法


贝塞尔曲线的 三阶 / 四阶 / 五阶 曲线的绘制 , 都是依赖于其低阶贝塞尔曲线实现的 ,

三阶贝塞尔曲线 是由 二阶贝塞尔曲线 实现的 ,

四阶贝塞尔曲线 是由 三阶贝塞尔曲线 实现的 ;

德卡斯特里奥算法 可以实现 贝塞尔曲线 降阶的效果 ;

下面开始介绍 德卡斯特里奥算法 ;

在 向量

AB

上 选择

C

点 ,

C

点将

AB

向量切割成比例为

u : 1- u

,

也就是

A

C

的距离

|AC|

, 与

A

B

的距离

|AB|

, 其比值为

u

, 写成公式就是如下形式 :

|AC| : |AB| = u
在这里插入图片描述
在这里插入图片描述
A

B

的距离

|AB|

全长为

1

,

A

C

的距离

|AC|

比例占到全长的

u

,

u

的取值范围是

0

~

1

之间的浮点值 ,

C

B

的距离

|CB|

比例占到全长的

1-u

;

在这里插入图片描述
在这里插入图片描述

再回到贝塞尔曲线中 ,

在这里插入图片描述
在这里插入图片描述

上图是

P_0

P_2

的 二阶 贝塞尔曲线 ,

P_0

是起始点 ,

P_2

是终止点 ,

P_1

是控制点 ;

首先 通过 一阶等式 , 在

P_0

P_1

之间确定出

P_0^1

点 ,

P_0

P_0^1

点占 整个

P_0

P_1

的比例为

u

;

然后 通过 一阶等式 , 在

P_1

P_2

之间确定出

P_1^1

点 ,

P_1

P_1^1

点占 整个

P_1

P_2

的比例为

u

;

最后 通过 一阶等式 , 在

P_0^1

P_1^1

之间确定出

P_0^2

点 ,

P_0^1

P_0^2

点占 整个

P_0^1

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

u

0

~

1

进行变化时 ,

P_0^2

点形成的曲线就是 二阶贝塞尔曲线 ;

请添加图片描述
请添加图片描述

( 网上找的图片 , 图片中的

t

也就是上面说的比例

u

)

二阶贝塞尔曲线中的

P_0^2

点 ,

由 起始点

P_0

到 控制点

P_1

组成的向量 , 和 由 控制点

P_1

到 终止点

P_2

组成的向量 ,

这两个向量 根据比例

u

决定的 一阶贝塞尔曲线

P_0^1

P_1^1

向量 根据比例

u

确定的 ,

也就是

P_0^2

点 由 一阶贝塞尔曲线

P_0^1

P_1^1

向量 确定 ;

上述操作 , 将 二阶贝塞尔曲线 , 降阶成了 一阶贝塞尔曲线 ;

二、贝塞尔曲线递推公式


由上面的结论进行类推 :

二阶贝塞尔曲线 ( 起止点 +

1

个控制点 ) 由

2

条 一阶贝塞尔曲线 确定 ,

三阶贝塞尔曲线 ( 起止点 +

2

个控制点 ) 由

2

条 二阶贝塞尔曲线 确定 ,

四阶贝塞尔曲线 ( 起止点 +

3

个控制点 ) 由

2

条 三阶贝塞尔曲线 确定 ,

\vdots
n

阶贝塞尔曲线 ( 起止点 +

n-1

个控制点 ) 由

2

n-1

阶贝塞尔曲线 确定 ;

贝塞尔曲线递推公式如下 :

P_i^k = \begin{cases} P_i , k = 0\\ (1-t)P_i^{k-1} + tP_{i + 1}^{k-1} , k = 1,2,\cdots,n ; i = 0,1,\cdots,n-k \end{cases}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、德卡斯特里奥算法
  • 二、贝塞尔曲线递推公式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档