Bézier曲线 和 Bézier曲面 ( 贝塞尔曲线 和 贝塞尔曲面 )
Bézier曲线
定义
给定空间n+1个点的位置矢量Pi(i=0,1,2…),则Bezier参数曲线上各点坐标的插值公式是:P(t)=∑i=0nPiBi,n(t),t∈[0,1]P(t)=\sum_{i=0}^{n}P_{i}B_{i,n}(t), t\in [0,1]P(t)=∑i=0nPiBi,n(t),t∈[0,1]
其中,Pi构成该贝塞尔曲线的特征多边形,Bi,n(t)B_{i,n}(t)Bi,n(t)是n次Bernstein基函数:
Bi,n(t)=Cinti(1−t)n−i=n!i!(n−i)!ti⋅(1−t)n−i(i=0,1,...,n)B_{i,n}(t) = C_{i}^{n}t^{i}(1-t)^{n-i} = \frac{n!}{i!(n-i)!}t^{i}\cdot (1-t)^{n-i} (i=0,1,...,n)Bi,n(t)=Cinti(1−t)n−i=i!(n−i)!n!ti⋅(1−t)n−i(i=0,1,...,n)
Bernstein基函数的性质
- 非负性:Bi,n(t)≥0,t∈[0,1]B_{i,n}(t)≥0, t\in [0,1]Bi,n(t)≥0,t∈[0,1]
- 端点性质
Bi,n(0)={1(i=0)0otherwiseB_{i,n}(0) = \begin{cases} 1 & (i=0) \\ 0 & otherwise \end{cases}Bi,n(0)={10(i=0)otherwise Bi,n(1)={1(i=n)0otherwiseB_{i,n}(1) = \begin{cases} 1 & (i=n) \\ 0 & otherwise \end{cases}Bi,n(1)={10(i=n)otherwise - 权性
∑i=0nBi,n(0)=∑i=0nCniti(1−t)n−i=[(1−t)+t]n≡1\sum_{i=0}^{n}B_{i,n}(0) = \sum_{i=0}^{n}C_{n}^{i}t^{i}(1-t)^{n-i}=[(1-t)+t]^{n}\equiv 1∑i=0nBi,n(0)=∑i=0nCniti(1−t)n−i=[(1−t)+t]n≡1 - 对称性
Bi,n(t)=Bn−i,n(1−t)B_{i,n}(t) = B_{n-i,n}(1-t)Bi,n(t)=Bn−i,n(1−t)
因为
Bn−i,n(1−t)=CniB_{n-i,n}(1-t) = C{n}^{i}Bn−i,n(1−t)=Cni - 递推性
Bi,n(t)=(1−t)Bi,n−1(t)+tBi−1,n−1(t)(i=0,1,...,n)B_{i,n}(t) = (1-t)B_{i,n-1}(t) + tB_{i-1,n-1}(t) (i=0,1,...,n)Bi,n(t)=(1−t)Bi,n−1(t)+tBi−1,n−1(t)(i=0,1,...,n)
即高一次的Bernstein基函数可由两个低一次的Bernstein调和函数线性组合而成, 因为Cni=Cn−1i+Cn−1i−1C_{n}^{i} = C_{n-1}^{i} + C_{n-1}^{i-1}Cni=Cn−1i+Cn−1i−1 - 导函数
B′n(t)=n[Bi−1,n−1(t)−Bi,n−1(t)](i=0,1,...,n)B'n(t) = n[B_{i-1,n-1}(t)-B_{i,n-1}(t)] (i=0,1,...,n)B′n(t)=n[Bi−1,n−1(t)−Bi,n−1(t)](i=0,1,...,n) - 最大值
Bi,n(t)B_{i,n}(t)Bi,n(t)在 t=int = \frac{i}{n}t=ni 处达到最大值 - 升阶公式
(1−t)Bi,n(t)=(1−in+1)Bi,n+1(t)(1-t)B_{i,n}(t)=(1-\frac{i}{n+1})B_{i,n+1}(t)(1−t)Bi,n(t)=(1−n+1i)Bi,n+1(t)
tBi,n(t)=i+1n+1Bi+1,n+1(t)tB_{i,n}(t)=\frac{i+1}{n+1}B_{i+1,n+1}(t)tBi,n(t)=n+1i+1Bi+1,n+1(t)
Bi,n(t)=(1−in+1)Bi,n+1(t)+i+1n+1Bi+1,n+1(t)B_{i,n}(t)=(1-\frac{i}{n+1})B_{i,n+1}(t)+\frac{i+1}{n+1}B_{i+1,n+1}(t)Bi,n(t)=(1−n+1i)Bi,n+1(t)+n+1i+1Bi+1,n+1(t) - 积分 ∫01Bi,n(t)=1n+1\int_{0}^{1}B_{i,n}(t) = \frac{1}{n+1}∫01Bi,n(t)=n+11
Bezier曲线的性质
- 端点性质
- 曲线端点位置矢量
由Bernstein基函数的端点性质可以推得,当t=0时,P(0)=P0 ;当t=1时,P(1)=Pn。由此可见,Bézier曲线的起点、终点与相应的特征多边形的起点、终点重合。 - 切矢量
因为P′(t)=n∑i=0n−1Pi[Bi−1,n−1(t)−Bi,n−1(t)]P'(t) = n\sum_{i=0}^{n-1}P_{i}[B_{i-1,n-1}(t) - B_{i,n-1}(t)]P′(t)=n∑i=0n−1Pi[Bi−1,n−1(t)−Bi,n−1(t)]
所以当t=0时,P’(0)=n(P1-P0),当t=1时,P’(1)=n(Pn-Pn-1),这说明Bézier曲线的起点和终点处的切线方向和特征多边形的第一条边及最后一条边的走向一致。
- 曲线端点位置矢量
- 对称性:由控制顶点构造出的新Bézier曲线,与原Bézier曲线形状相同,走向相反。
这个性质说明Bézier曲线在起点处有什么几何性质,在终点处也有相同的性质。 - 几何不变性:是指某些几何特性不随坐标变换而变化的特性
- 变差缩减性:若Bézier曲线的特征多边形是一个平面图形,则平面内任意直线与C(t)的交点个数不多于该
直线与其特征多边形的交点个数,这一性质叫变差缩减性质。
此性质反映了Bézier曲线比其特征多边形的波动还小,也就是说Bézier曲线比特征多边形的折线更光顺。 - 仿射不变性:在仿射变换下,Bézier曲线的形式不变。
Bézier曲线的生成
根据定义直接生成Bézier曲线(计算量较大)
Bi,n(t)=Cinti(1−t)n−i=n!i!(n−i)!ti⋅(1−t)n−i(i=0,1,...,n)B_{i,n}(t) = C_{i}^{n}t^{i}(1-t)^{n-i} = \frac{n!}{i!(n-i)!}t^{i}\cdot (1-t)^{n-i} (i=0,1,...,n)Bi,n(t)=Cinti(1−t)n−i=i!(n−i)!n!ti⋅(1−t)n−i(i=0,1,...,n)- 给出CniC_{n}^{i}Cni的递归计算式Cni=n!i!(n−1)!=n−i+1iCni−1C_{n}^{i}=\frac{n!}{i!(n-1)!}=\frac{n-i+1}{i}C_{n}^{i-1}Cni=i!(n−1)!n!=in−i+1Cni−1, 其中n ≥ i
- 将p(t)表示成分量坐标形式
Bézier曲线的递推算法
Bézier曲线上的任一个点(t),都是其它相邻线段的同等比例(t)点处的连线,再取同等比例(t)的点再连线,一直取到最后那条线段的同等比例(t)处,该点就是Bézier曲线上的点(t)de Casteljau算法几何作图
Bézier曲线的拼接
Bézier曲线次数的提高,而高次多项式又会带来计算上的困难,实际使用中,一般不超过10次。采用分段设计,然后将各段曲线相互连接起来,并在接合处保持一定的连续条件。
给定两条Bézier曲线P(t)和Q(t),相应控制点为Pi(i=0, 1, …, n)和Qj(j=0,1,…, m)
- 要使它们达到G0连续,则:Pn= Q0
- 要使它们达到G1连续(平面),只要保证Pn-1,Pn=Q,Q1三点共线就行了(因为Bezier曲线的起点和终点处的切线方向和特征多边形的第一条边及最后一条边的走向一致)
- 要使它们达到G2连续(空间),则保证密切平面重合,副法线向量同向且曲率连续,更准确的说是曲率矢连续
Bézier曲面
定义
设Pi,jP_{i,j}Pi,j(i=0,1,…,m; j=0,1,…,n)为(m+1)(n+1)个空间点列,则m×n次张量积形式的Bézier曲面定义为:
P(u,v)=∑i=0m∑j=0nPijBi,m(u)Bj,n(v)P(u,v)=\sum_{i=0}^{m}\sum_{j=0}^{n}P_{ij}B_{i,m}(u)B_{j,n}(v)P(u,v)=∑i=0m∑j=0nPijBi,m(u)Bj,n(v) u,v∈[0,1]u,v\in [0,1]u,v∈[0,1]
其中Bi,m(u)=Cmiui(1−u)m−iB_{i,m}(u)=C_{m}^{i}u^{i}(1-u)^{m-i}Bi,m(u)=Cmiui(1−u)m−i, Bj,n(v)=Cnjui(1−v)n−jB_{j,n}(v)=C_{n}^{j}u^{i}(1-v)^{n-j}Bj,n(v)=Cnjui(1−v)n−j是Bernstein基函数。依次用线段连接点列中相邻两点所形成的空间网格,称之为特征网格。
矩阵表示式
在一般应用中,n和m不大于4
Bézier曲面的性质
角点位置:Bézier曲面特征网格的四个角点正好是Bézier曲面的四个角点,即
P(0,0)=P0,0P(0,0)=P_{0,0}P(0,0)=P0,0 P(0,1)=P0,nP(0,1)=P_{0,n}P(0,1)=P0,n
P(1,0)=Pm,0P(1,0)=P_{m,0}P(1,0)=Pm,0 P(1,1)=Pm,nP(1,1)=P_{m,n}P(1,1)=Pm,n边界线:四条边界线也是Bézier曲线
P(u,0)=∑j=0mPj,0BEZj,m(u)P(u,0)=\sum_{j=0}^{m}P_{j,0}BEZ_{j,m}(u)P(u,0)=∑j=0mPj,0BEZj,m(u) P(v,0)=∑k=0nPk,0BEZk,n(v)P(v,0)=\sum_{k=0}^{n}P_{k,0}BEZ_{k,n}(v)P(v,0)=∑k=0nPk,0BEZk,n(v)
P(u,1)=∑j=0mPj,0BEZj,m(u)P(u,1)=\sum_{j=0}^{m}P_{j,0}BEZ_{j,m}(u)P(u,1)=∑j=0mPj,0BEZj,m(u) P(v,1)=∑j=0nPk,0BEZk,n(v)P(v,1)=\sum_{j=0}^{n}P_{k,0}BEZ_{k,n}(v)P(v,1)=∑j=0nPk,0BEZk,n(v)几何不变性
对称性
凸包性
Bézier曲面的拼接
设两张m×n次Bézier曲面片
P(u,v)=∑i=0m∑j=0nPijBi,m(u)Bj,n(v)P(u,v)=\sum_{i=0}^{m}\sum_{j=0}^{n}P_{ij}B_{i,m}(u)B_{j,n}(v)P(u,v)=∑i=0m∑j=0nPijBi,m(u)Bj,n(v)
Q(u,v)=∑i=0m∑j=0nQijBi,m(u)Bj,n(v)Q(u,v)=\sum_{i=0}^{m}\sum_{j=0}^{n}Q_{ij}B_{i,m}(u)B_{j,n}(v)Q(u,v)=∑i=0m∑j=0nQijBi,m(u)Bj,n(v)
如果要求两曲面片达到G0G^{0}G0连续,则它们有公共的边界,即:P(1,v)=Q(0,v)P(1,v)=Q(0,v)P(1,v)=Q(0,v)
于是有Pni=Q0iP_{ni}=Q_{0i}Pni=Q0i, (i = 0, 1,…, m)
如果又要求沿该公共边界达到G1G^{1}G1连续,则两曲面片在该边界上有公共的切平面,因此曲面的法向应当是跨界连续的,即:
Qu(0,v)×Qv(0,v)=α(v)Pu(1,v)×Pv(1,v)Q_{u}(0,v)×Q_{v}(0,v)=\alpha(v)P_{u}(1,v)×P_{v}(1,v)Qu(0,v)×Qv(0,v)=α(v)Pu(1,v)×Pv(1,v)
Bézier不足
- Bézier曲线或曲面不能作局部修改
- Bézier曲线或曲面的拼接比较复杂
Bézier曲线 和 Bézier曲面 ( 贝塞尔曲线 和 贝塞尔曲面 )相关推荐
- 贝塞尔曲线和贝塞尔曲面_TimelineMax:处理贝塞尔(Bézier)补间
贝塞尔曲线和贝塞尔曲面 当您需要高级功能时,GSAP插件非常有用. 我将在本教程中解释的BezierPlugin可以帮助沿定义为点/值数组的弯曲贝塞尔曲线路径上的几乎任何一个或多个属性设置动画. 在跳 ...
- 计算机图形学十:几何2—贝塞尔曲线(Bézier Curves)与贝塞尔曲面(Bézier Surfaces)
贝塞尔曲线与贝塞尔曲面 1 贝塞尔曲线(Bézier Curves) 2 贝塞尔曲面(Bézier Surfaces) Reference (本篇文章同步发表于知乎专栏:https://zhuanla ...
- R语言使用ggplot2可视化贝塞尔曲线:基于经验数据可视化贝塞尔曲线(Curved Bézier lines with empirical data)、使用curve_intersect函数计算曲线
R语言使用ggplot2可视化贝塞尔曲线:基于经验数据可视化贝塞尔曲线(Curved Bézier lines with empirical data).使用curve_intersect函数计算曲线 ...
- 【轨迹生成】贝塞尔曲线(Bézier)
文章目录 1 贝塞尔曲线 1 贝塞尔曲线 曲线定义:起始点.终止点(也称锚点).控制点 数据点: 指一条路径的起始点和终止点. 控制点:控制点决定了一条路径的弯曲轨迹 根据控制点的个数,贝塞尔曲线被分 ...
- 用C语言绘制任意阶贝塞尔曲线(Bézier curve)
计算机图形学中贝塞尔曲线的绘制.使用的开发软件及版本为VS2015,以及 EasyX库.实现动态演示贝塞尔曲线实现的过程,且阶次不限! 源代码获取方式:1.添加微信(微信号:my_12581)获取.2 ...
- 一张图看懂三次贝塞尔曲线(Cubic Bézier Curve)
用权重的概念理解三次贝塞尔曲线,三次贝塞尔曲线综合了插值(Interpolation)和近似(Approximation),各点前面的多项式是点的权重(也可以把点看成权重,多项式看成是基,该被称为Be ...
- 光滑曲线_计算机图形学十:贝塞尔曲线与贝塞尔曲面
贝塞尔曲线与贝塞尔曲面 1 贝塞尔曲线(Bézier Curves) 在进入具体原理讲解之前,首先看一下一条实际的贝塞尔曲线长什么样子 其中 为 控制点,蓝色所表示曲线正是非常著名的贝塞尔曲线了,可以 ...
- 贝塞尔曲线与贝塞尔曲面
1. 贝塞尔曲线(Bézier Curves) 在进入具体原理讲解之前,首先看一下一条实际的贝塞尔曲线长什么样子 其中为控制点,蓝色所表示曲线正是非常著名的贝塞尔曲线了,可以从图中观察到,曲线会与初始 ...
- 音视频开发之旅(40)-贝塞尔曲线和曲面
目录 贝塞尔曲线基本知识 画贝塞尔曲线 让曲线动起来 画贝塞尔曲面 资料 收获 本篇最终实现效果如下: 篇外说明:由于有必要学习使用下kotlin,后续的java层代码实现尽量采用kotlin 一.贝 ...
最新文章
- SAP PM 初级系列24 - 发料到维修工单
- 网络推广外包之下“真我”徐起表示今年中国区定下进军2000万销量目标
- 爬虫python下载-如何用Python爬虫实现百度图片自动下载?
- 架空输电线路运行规程_架空输电线路通道与环境隐患、缺陷及故障图文初识
- 91.91p10.space v.php,luogu P1091 合唱队形
- mysql 强制使用索引_快速找出MySQL数据库冗余索引和未使用索引
- 火狐浏览器title过长显示不全_浏览器渲染
- Task 6.1 校友聊之NABCD模型分析
- 超经典两万字,MySQL数据库快速入门。
- 华为鸿蒙os内测,华为“鸿蒙OS”内测信息曝光:界面与EMUI有6个明显不同
- 《MapReduce 2.0源码分析与编程实战》一1.5 看,大象也会跳舞
- Spring面试问题和答案
- Mybatis-代码走查问题整理
- E路航LH950N更换电池全程图解
- 软件工程实验报告1-可行性分析
- netty 错误 #[IllegalReferenceCountException: refCnt: 0, decrement: 1]
- 前端使用vux中md5加密方法
- GitHub 的设置代码上传
- windows配置java环境
- 2021年从事Linux运维云计算前景如何?
热门文章
- redis 运维常用命令
- vue.js 第四课
- 13个 ASP.NET MVC 的扩展
- photoshop CS5 Dreamweaver CS5序列号及完美破解方法
- 给Sqlite数据库设置密码
- 从消息处理角度看应用程序与windows的关系(图示)
- Database design best practice(1):关于primary key及其它
- SAP有用的知识(持续更新)
- java避免使用orderby_java – Spring安全配置@Order不是唯一的例外
- 如何搭建以太坊私有链