【12月学习进度6/31——计算机图形学期末准备03】Bezier曲线及MATLAB实现

编程入门 行业动态 更新时间:2024-10-09 03:29:26

【12月学习<a href=https://www.elefans.com/category/jswz/34/1770806.html style=进度6/31——计算机图形学期末准备03】Bezier曲线及MATLAB实现"/>

【12月学习进度6/31——计算机图形学期末准备03】Bezier曲线及MATLAB实现

贝塞尔曲线

参考GAMES101计算机图形学视频

讲得超级棒!

定义

Bezier曲线 —— 用给定的控制点定义曲线,控制点控制曲线的弯曲,不一定要全部经过所有控制点

1.如何画Bezier曲线(递归过程)

参数 t ∈ [ 0 , 1 ] t∈[0,1] t∈[0,1]
对于每一个 t t t :

  1. 针对每一个控制点所连的线段 b i b i + 1 b_ib_{i+1} bi​bi+1​ 取点 b i ′ b'_i bi′​,使得:
    • ∣ b i b i ′ ∣ = t |b_ib'_i|=t ∣bi​bi′​∣=t
    • ∣ b i ′ b i + 1 ∣ = 1 − t |b'_ib_{i+1}|=1-t ∣bi′​bi+1​∣=1−t
  2. 连接 b i ′ b'_i bi′​ 和 b i + 1 ′ b'_{i+1} bi+1′​ ,新构成的所有线段,重复上述取点 b i ′ ′ b''_i bi′′​ 操作
  3. 重复1,2操作,直到线段数为1,则该线段上取的点就是该 t t t 对应的曲线上的点

遍历所有 t ∈ [ 0 , 1 ] t∈[0,1] t∈[0,1] ,则可以画出该组控制点对应的Bezier曲线

2.Bezier曲线的代数形式

b n ( t ) = Σ j = 0 n b j ∗ B j n ( t ) b^n(t)=Σ^{n}_{j=0}b_j*B^{n}_j(t) bn(t)=Σj=0n​bj​∗Bjn​(t)

其中 B j n ( t ) = C n i ∗ t i ∗ ( 1 − t ) n − i B^{n}_j(t)=C^{i}_n*t^i*(1-t)^{n-i} Bjn​(t)=Cni​∗ti∗(1−t)n−i
多项式对称: C n i = C n n − i C^{i}_n=C^{n-i}_n Cni​=Cnn−i​

该公式可看做:

  1. 控制点 b j b_j bj​ 对多项式 B j n ( t ) B^{n}_j(t) Bjn​(t) 的加权和;
  2. 多项式 B j n ( t ) B^{n}_j(t) Bjn​(t) 对控制点 b j b_j bj​ 的加权和;

Bezier曲线的性质

Bezier曲线一定在其控制点的凸包中:
当控制点共线时 → 形成的Bezier曲线就是这条直线

分段Bezier曲线及连续性

当控制点较多时,不好控制,曲线较平滑,单个控制点的改变对曲线形状影响较小
常用三次Bezier曲线(4个控制点)

矩阵形式表示

MATLAB实现(二维点)

function bezier(p0,p1,p2,p3)
%p0-p3是控制点
x_t = [];%存放曲线上x的坐标
y_t = [];%存放曲线上y的坐标
A = [-1 3 -3 1;3 -6 3 0;-3 3 0 0;1 0 0 0];
%三次的矩阵表示
for t = 0:0.001:1%遍历每个tx_it = [t^3 t^2 t 1] * A * [p0(1);p1(1);p2(1);p3(1)];y_it = [t^3 t^2 t 1] * A * [p0(2);p1(2);p2(2);p3(2)];x_t = [x_t,x_it]; %将本次计算的结果加入到结果矩阵中y_t = [y_t,y_it];
endplot(x_t,y_t);

【例子】
example 1:

p0 = [4 2];
p1 = [7 10];
p2 = [16 19];
p3 = [41 21];
bezier(p0,p1,p2,p3);

example 2:

p0=[-10,40];
p1=[3,45];
p2=[56,6];
p3=[8,9];
bezier(p0,p1,p2,p3);

更多推荐

【12月学习进度6/31——计算机图形学期末准备03】Bezier曲线及MATLAB实现

本文发布于:2024-02-06 12:45:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1749016.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:进度   曲线   图形   计算机   学期末

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!