games(101)-贝塞尔曲线
Curves (Lecture 11)
内容:
-
Bézier curve(贝塞尔曲线)
-
Evaluating Bézier curve
- De Casteljau's algorithm(德卡斯特里奥算法)
- Algebraic Formula
-
Piecewise Bézier Curves
- Continuity
-
B-splines etc
Bézier curve
- 用一系列控制点定义某一个曲线,并且这个曲线要满足一定性质
例如:曲线从p0 开始 ,开始的时候切线沿着p0到p1,在p3结束,结束的切线是p2 p3方向。系数与代数表达有关,曲线不要求经过所有控制点,只要求经过起止点。
- 三个控制点生成的贝塞尔曲线称为二次贝塞尔曲线(quadratic Bezier)
Evaluating Bézier curve
De Casteljau's algorithm
- 如何画:
- 定义起始点对应时间t = 0,终止点对应时间t = 1
- 画曲线实则要找到任意时间t找出这个点在平面的哪个位置
- De Casteljau's algorithm就是找这个点
- 将画一整个曲线的问题转换为找一个点的问题
- 德卡斯特里奥算法就是怎么样找这个点
-
具体算法:
- 三个点形成了两个线段,方向认为是点的输入次序决定
- 在b0到b1上,认为b0为时间0,b1为时间t,找到对应t时刻的点b0_1(插值)
- 同样在b1到b2上,认为b1为时间0,b2为时间t,找到与b0~b1相同的t时刻对应的点b1_1
- 得到两个点连起来形成了一条线段(比最开始少一条)
- 在这条线段上同样找对应时间t的点,那么这个点就是贝塞尔曲线上的一个点
- 理论上取所有t的值就可以得到贝塞尔曲线,即使t是连续的
显式表示:通过参数t定义
Algebraic Formula
代数的表示方法:
不断的线性插值,将其表示出来:
类似于某个展开式
- 给出n+1个控制点(0,1,.....,n)对应n阶的Bézier curve
- Bézier curve曲线在任意时间t(对应一个点的表达),都是之前控制点的线性组合,组合的系数就是一个与时间有关的多项式(伯恩斯坦多项式)
- 限制点也可以在空间中,得到空间中的贝塞尔曲线,只需要输入控制点用伯恩斯坦多项式进行插值。
- 同一阶上,系数加起来为1
- 定义与时间有关的多项式,对不同的控制点进行插值,得到新的定义在曲线上的点
根据展开式得到相关的性质
- 规定贝塞尔曲线一定过起点、终点、t=0时在起点、t=1在终点
- 规定了三次贝塞尔曲线一开始起始的切线方向,以及结束时的切线方向,前面的系数与控制点有关
- 对不同的顶点做仿射变换(线性变换+平移),变换后控制点画出的贝塞尔曲线与原始控制点得到的贝塞尔曲线画出的曲线是一样的,投影变换就不一定了
- 凸包性质、画出的贝塞尔曲线一定在控制点形成的凸包内。
凸包:
能够包围给定的几何形体的最小凸多边形(如果把一个多边形的所有边中,任意一条边向两方无限延长成为一直线时,其他各边都在此直线的同旁,那么这个多边形就叫做凸多边形)。
Piecewise Bézier Curves
- 控制点过多时 ,对贝塞尔控制效果不明显,故有时候采用逐段定义的贝塞尔曲线(习惯四个控制点)。
Continuity
- 第一种连续:第一段的终点对应第二段的起点的一种连续(几何上挨在一块)
- 第二种连续:在公共点出的切线连续,即一阶导数的连续
两个控制点距离公共点的距离一样,共线、方向相反
仍有更高阶的连续,例如曲率连续。对应不同连续性的要求
Other types of splines
Spline(样条)
定义如下:
简单的说,一个可控的曲线
B-Spline
-
缩写,对应的基函数样条,例如上面的伯恩斯坦多项式可以理解为基函数(用伯恩斯坦多项式在t下的用不同的项对控制点进行平均)
-
基函数 就是一个函数的固定形式,也就是函数只会在这个函数的基础上变化,而不会丢掉的函数
-
对贝塞尔曲线的拓展,局部性,动一个控制点能知道控制点影响到曲线的哪些部分。
课程:games101
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律