计算机图形学笔记九:Geometry2(曲线和曲面)

1.曲线(Curves)

1.1⻉塞尔曲线(Bézier Curves)

定义:只经过起止点,中间过程不一定要经过其他点。
在这里插入图片描述
如上图所示,一条贝塞尔曲线只经过了起点 P 0 P_0 P0和终点 P 3 P_3 P3,中间经过是否经过点我们不去管它,而中间点 P 1 和 P 2 P_1和P_2 P1P2仅仅起到了控制曲线应该往哪个方向弯曲的作用。

1.1.1画法

贝塞尔曲线的具体画法:de Casteljau算法
从画一条曲线转变为了找一个点(时间 t t t时的点在曲线上的位置).
Step1:
以三个点为例,三个顶点连接成两条线段,每个点间距离为1,在 b 0 b 1 b_0b_1 b0b1线段上找到任意一点 b 0 1 b_0^1 b01(假设为距起点 b 0 为 时 间 t b_0为时间t b0t),在 b 1 b 2 b_1b_2 b1b2线段上也找到同样距离的点 b 1 1 b_1^1 b11
在这里插入图片描述
Step2:
将这两点连接起来获得新的线段,该线段长度也假设为1,同样取距起点 b 0 1 b_0^1 b01 t t t的点 b 0 2 b_0^2 b02
在这里插入图片描述
Step3:
这样可以判定最终的贝赛尔曲线一定经过 b 0 , b 0 2 , b 2 b_0,b_0^2,b_2 b0,b02,b2三个点,将三个点用一条光滑的曲线连接得到的就是一条贝塞尔曲线。
在这里插入图片描述
相对的对于有 n n n个点来说,要找到就需要进行 n − 1 n-1 n1趟查询新点;如下图的4个点的情况:
在这里插入图片描述

1.1.2线性代数表示

下图的系数金字塔更为直观的表示出了找寻新点的过程:
在这里插入图片描述
例:已知现在有3个点,每两点之间找到它的 t t t处,相当于在它们两个之间作了一个位置的线性插值,每一个点都可以由它们的起始点线性表示出来:
在这里插入图片描述
第一次:
b 0 1 ( t ) = ( 1 − t ) b 0 + t b 1 b_0^1(t)=(1-t) b_0 + t b_1 b01(t)=(1t)b0+tb1
b 1 1 ( t ) = ( 1 − t ) b 1 + t b 2 b_1^1(t)=(1-t)b_1 + t b_2 b11(t)=(1t)b1+tb2

第二次:
b 0 2 ( t ) = ( 1 − t ) b 0 1 + t b 1 1 b_0^2(t)=(1-t)b_0^1 + t b_1^1 b02(t)=(1t)b01+tb11

综合后: b 0 2 ( t ) = ( 1 − t ) 2 b 0 + 2 t ( 1 − t ) + t 2 b 2 b_0^2(t)=(1-t)^2b_0 +2t(1-t)+ t^2 b_2 b02(t)=(1t)2b0+2t(1t)+t2b2
可以看出,这个式子中的多项式系数其实就是 [ ( 1 − t ) + t ] 2 [(1-t)+t]^2 [(1t)+t]2的展开(同理,4个点就是立方)。

由此可得:给定了 n + 1 n+1 n+1个控制点,可以得到一个 n n n阶的贝塞尔曲线,这个贝塞尔曲线在任意时间 t t t都是之前给定的这些控制点的线性组合,组合的系数就是一个和时间 t t t有关的多项式:
在这里插入图片描述
其中伯恩斯坦多项式为:
在这里插入图片描述
综上所述:任意阶数的贝塞尔曲线在时间 t t t时的位置是由伯恩斯坦多项式作为系数对给定的控制点的加权。
在这里插入图片描述
同样的,这个公式也适应于三维空间,如下图所示:
在这里插入图片描述

1.1.3 凸包性质(Convex hull)

曲线一定不会超出所有控制点构成的多边形范围。
凸包可以想象为一条刚好包着所有点的橡皮圈:
在这里插入图片描述

1.2逐段贝塞尔曲线(Piecewise Bezier Curve)

对于这种控制点很多的贝塞尔曲线,由于控制点众多,很难控制局部的贝塞尔曲线形状,解决方法:分段贝塞尔曲线。
在这里插入图片描述

即每4个控制点定义一条贝塞尔曲线(即每一段起点终点和空间中的两个控制点):
在这里插入图片描述
曲线连续的要求:
C 0 连 续 C_0连续 C0:第一段曲线的终点 = 第二段曲线的起点时;如下图所示:
在这里插入图片描述
C 1 连 续 C_1连续 C1:即切线连续,第一段终点的切线方向与第二段起点的切线方向共线距离相同。如下图所示:
在这里插入图片描述
在这里插入图片描述

2.曲面(Surfaces)

在理解了贝塞尔曲线之后,贝塞尔曲面的原理也是十分容易理解的了,就是一个从2维到3维的过渡。
在这里插入图片描述

2.1贝塞尔曲面(Bezier surfaces)

2.1.2画法

Step1:每行(列)形成一个贝塞尔曲线( 4 × 4 4\times4 4×4的点);
在这里插入图片描述
Step2:四个曲线上的点再形成贝塞尔曲线;
在这里插入图片描述
Step3:用UV代表行列;
在这里插入图片描述
Step4:遍历UV得到贝塞尔曲面;
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值