一:简介
1962年,法国工程师贝塞尔发表,他运用贝塞尔曲线来为汽车的主体进行设计。
贝塞尔曲线是最基本的曲线,一般用在计算机 图形学和 图像处理。贝塞尔曲线可以用来创建平滑的曲线的道路、 弯曲的路径就像 祖玛游戏、 弯曲型的河流等。
一条贝塞尔曲线是由一组定义的控制点 P0到 Pn,在 n 调用它的顺序 (n = 1 为线性,2 为二次,等.)。第一个和最后一个控制点总是具有终结点的曲线;然而,中间两个控制点 (如果有的话) 一般不会位于曲线上 。
(1)贝塞尔曲线包含两个控制点即 n = 2 称为线性的贝塞尔曲线
(2)贝塞尔曲线包含三个控制点即 n = 3 称为二次贝塞尔曲线
(3)贝塞尔曲线包含四个控制点即 n = 4,所以称为三次贝塞尔曲线。
贝塞尔曲线返回点的贝塞尔函数,使用线性插值的概念作为基础。
二:Bezier曲线的作用
Bezier曲线是用一系列点控制曲线状态的。主要分为
- 数据点:确定曲线的起始和结束位置
- 控制点:确定曲线的弯曲程度
举例理解:想在AC(起始点和结束点)之间画一个曲线,用B点(控制点)控制这个曲线的弯曲程度。
但是控制点是可以多个的,比如两个控制点。以此类推,可以有很多个。
起点和终点都只有一个,但是控制点可以多个,甚至是0,0的时候就是直线啦!
三:Bezier曲线的原理
为什么几个点就可以得到一个曲线?
先说一个控制点的情况,如图所示:
- A/B/C三点是确定的
- 在AB上任取一点D,得到ratio = AD/AB
- 再由BE/BC = ratio 得到E点
- 连接DE,同理DF/DE = ratio得到F
- 而F点就是曲线上的一点,当然凭着这一点是无法得到整条曲线的
- 于是,再来一遍,重新取D点得到新的F点,以此类推,如图
那么两个控制点呢?
道理是一样的,在AB上任取一点E,得到曲线上的J点。
AE/AB = BF/BC = CG/CD = EH/EF = FI/FG = HJ/HI
最后来个炫酷的四个控制点:
上面介绍的内容并不足以展示贝塞尔曲线的真正威力。推广到三维空间的贝塞尔曲面,以及更进一步的非均匀有理 B 样条(NURBS),早已成为当今计算机辅助设计(CAD)的行业标准,不论是我们平常用到的各种产品,还是在电影院看到的精彩大片,都少不了它们的功劳。
四:理解Bezier曲线的公式
4.1:一次贝塞尔曲线
给定点P0、P1,线性贝赛尔曲线只是一条两点之间的直线。这条线由下式给出:
其等同于线性插值。
- t表示在 P0P1之间任取一点P2,t = P0P2/P0P1,也就是比例,公式里的P0和P1同步表示其x轴坐标或者y轴坐标。
- 已知P0的坐标是(a,b),P1的坐标是(c,d),那么假设P2的坐标是(x,y)
- (1-t)/(c-x) = t/(x-a) => x = (1-t)a + tc
- 同理 y = (1-t)d + tb
- 于是简写成 B(t) = (1 - t) * P0 + tP1
4.2:二次贝塞尔曲线
二次贝塞尔曲线(也是线性贝塞尔曲线)的路径由给定点P0、P1、P2控制,这条线由下式给出:
- t同上
- 在P0P1上的点是A,在P1P2上的点是B,在AB上的点是C,C也就是曲线上的一点。
- A : tP1 + (1-t)P0
- B : tP2 + (1-t)P1
- C : tB + (1-t)A 将A、B换成上式,进行合并同类项
最后得到
4.3:三次贝塞尔曲线
P0、P1、P2、P3四个点在平面或在三维空间中定义了三次方贝赛尔曲线。曲线起始于P0走向P1,并从P2的方向来到P3。一般不会经过P1或P2;这两个点只是用来充当控制点。P0和P1之间的间距,决定了曲线在转而趋进P3之前,走向P2方向的“长度有多长”。
曲线的参数形式为:
4.4:一般参数形式的贝塞尔方程
N阶贝赛尔曲线可如下推断。给定点P0、P1、…、Pn,其贝赛尔曲线即:
如上公式可如下递归表达: 用表示由点P0、P1、…、Pn所决定的贝赛尔曲线。
TIPS:
通过两个低阶的贝塞尔曲线插值的堆叠总能够获得更高阶的贝塞尔曲线,通俗的来说通过对两条低阶的贝塞尔曲线插值,你可以求得一条高一阶的贝塞尔曲线。
比如:二次贝塞尔曲线是点对点的两个线性贝塞尔曲线的线性插值,三次贝塞尔曲线是两条二次贝塞尔曲线的线性插值。
五:实现与应用
效果图
补充:LineRenderer
画出不同颜色的线:
1.先添加一个材质,Shader使用“Sprite/Default”
2:再改颜色和alpha值。