10.Geometry 2(curves and surface)
10.Geometry 2(curves and surface)
explicit(显式几何)
point cloud(点云)
把每个点表示成一个点(???)
解释成list of points比较好理解
能轻易的表示任何的几何图形
polygon mesh(多边形面)
应用的最多
把面拆成各种各样的三角形,用三角形去描述复杂的问题
object format(obj文件)
用三角形面形成的物体用obj格式文件储存(和编译出来得到的obj不是一回事!)
相当于一个储存了顶点,法线,纹理,坐标,并把他们组合起来的文本文件
图中v储存顶点坐标,vn储存法线,vt存储纹理坐标,f表示这些数据如何组合在一起
我们看到一行f有三组,一组三个数,每组决定了使用哪些vn和vt和f数据,而每行则定义一个三角形面(三个点)
curves
bezier curve(贝塞尔曲线)
用一系列控制点去表示一条曲线
如图定义起点和终点在p3上
曲线不一定要经过控制点
如何画一条贝塞尔曲线?(属于显式表示)
使用de castljau算法
如图所示b0开始,b2结束,b1表示往哪个方向弯
定义一个范围为0到1的时间t,我们只需要算出任意一个时间t在空间中的位置算出就行
我们设b0到b1为t,b1到b2也为t,b01和b11都为1/3t
连接b01和b11,再取1/3,得到b02
这个b02就是这条贝塞尔曲线在时间t的位置
将所有的t都枚举出来并连接,就能得到所求的曲线
四个点也一样,我们找一个点(例如0.5),然后一直取点连接最后得到一个点(有点类似递归)
evaluating bezier curve algebraic formula
(代数表示方法)
不难看出,我们上面一直在做两个位置的线性插值
显式的将公式表达出来(因为能用公示表达所以是显式的)
我们考虑t是靠近左边的那段距离。为什么算式是这样的?
想象t等于0时,即点在b0上,所表示的就应该是一个完全的t0,t等于1时也同样理解。
所以第三个算式一样很好理解,第四个算式就是将第一二个算式带入到第三个中,同样很好理解。
有没有发现第四个算式很像完全平方公式的展开?
だから!
给n+1个控制点(0到n),得到一个n阶的贝塞尔曲线,这个贝塞尔曲线在任意时间t都是之前给定控制点的线性组合,组合的系数为一个多项式(如图所示的伯恩斯坦多项式,用来描述二项分布)
伯恩斯坦多项式:相当于(s+t)的n次方,如果是三个点(二阶,n=2),就相当于s^2+2s*t+t^2,再把s换成1-t。
我们不需要限制这些点是否在同一平面内,同样可以进行插值
这个是伯恩斯坦多项式的图像
(个人感觉看看就好)
贝塞尔曲线有些不错的性质:
- 规定了贝塞尔曲线一定过起点和终点
- 如果是三阶(四个控制点),起点方向切线一定是3倍的(b1-b0),终点是3倍的(b3-b2)
- 对控制点做仿射变换后,得到的贝塞尔曲线相当于对原来的贝塞尔曲线做相同的仿射变换(对于投影变换就并不是如此)
- 凸包性质:贝塞尔曲线一定在控制点组成的凸包内
piecewise bezier curve(逐段定义贝塞尔曲线)
因为用很多的点定义一条贝塞尔曲线并不直观
所以发明了逐段定义方法,习惯用每四个点定义一段贝塞尔曲线
应用:ps里的钢笔工具
那我怎么保证连接处是光滑的呢?
如果前后的控制点共线且等距离(切线相同,导数连续)
在几何上,只要前后是在一块的,我们就认为是连续的,称为c0连续
如果方向相反,距离相等(一阶导数连续)
称为c1连续
在制造上c1连续可能是不够的,所以同样也有高阶导数的连续,我们称为曲率连续。
由一系列控制点控制的曲线叫样条,能满足一定的连续性
其中B样条应用较多
b表示的是basis,基函数样条,能保证曲线的局部性,能保证挪动一个控制点后,对曲线的变化控制在一个范围内。
因为b样条太复杂所以不多bb
4.28 11:52完成 今天节奏特别好