以下为个人学习笔记整理,涉及坐标内容统一用右手坐标系,课程官网

# 曲线(Curves)

# 贝塞尔曲线(Bezier Curves)

# 德卡斯特利亚算法(Casteljau Algorithm)

假定绘制一条曲线所需三个点 b0,b1,b2b_0,b_1,b_2。曲线的起点为 0 终点 为 1,那么 t 位置处的点如何求得:

  • 只需要求 bob1b_ob_1b1b2b_1b_2 的比例 tt 位置的点 b01,b11b_0^1,b_1^1
  • 再计算 b01b11b_0^1b_1^1 比例 tt 位置的点 b02b_0^2
  • b02b_0^2 便是 t 位置处的点。

image-20210605172011795

b01(t)=(1t)b0+tb1b_0^1(t) = (1-t)b_0 + tb_1

b11(t)=(1t)b1+tb2b_1^1(t) = (1-t)b_1 + tb_2

b02(t)=(1t)b01+tb11b_0^2(t) = (1-t)b_0^1 + tb_1^1

b02(t)=(1t)2b0+2t(1t)b1+t2b2b_0^2(t) = (1-t)^2b_0 + 2t(1-t)b_1 + t^2b_2

可以得到 n 个顶点的通用计算公式,该多项式就是 b0n各项b_{0 \to n} \text{各项} 与「伯恩斯坦多项式」的乘积求和。

bn(t)=b0n(t)=j=0nbjBjn(t)b^n(t) = b_0^n(t) = \sum_{j=0}^{n}b_jB_j^n(t)

# 伯恩斯坦多项式(Bernstein Polynomials):

Bjn(t)=(ni)ti(1t)niB_j^n(t) = \begin{pmatrix} n \\ i \\ \end{pmatrix} t^i (1-t)^{n-i}

image-20210605172133403

# 贝塞尔曲线的性质

  • 「仿射变换」下,不论是先对顶点进行变换,再绘制曲线;还是先绘制曲线,再进行仿射变换,最终结果一致

  • 凸包性质:任何贝塞尔曲线内的点,都在形成贝塞尔曲线顶点组成的凸包内。

image-20210605172212623

# 分段贝塞尔曲线(Piecewise Bezier Curves)

由于贝塞尔曲线的每个点,对于整条曲线都会有所影响,想要调整曲线的效果就会变得很麻烦,所以引入了「分段」这个概念。

  • 通过多个贝塞尔曲线拼接而成。
  • 每个贝塞尔曲线由四个点控制。

image-20210605172340484

# 曲线的连续性

# C0C^0 连续:两条曲线都过同一个点。

image-20210605172406323

# C1C^1 连续:两条曲线都过同一个点。且该点左右两边的切线连续(异界导出相同,长度相同)。

image-20210605172423185

# CnC^n 连续:pass

扩展视频 —— 如何设计一个逼真的三维模型

# 关键字

  • 凸包(Convex):用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点。