首页 > 其他分享 >Lecture 11 Geometry 2 (Curves and Surfaces)

Lecture 11 Geometry 2 (Curves and Surfaces)

时间:2024-03-24 12:22:40浏览次数:25  
标签:11 Surfaces 坍缩 曲线 贝塞尔 控制点 顶点 Lecture 三角形

Lecture 11 Geometry 2 (Curves and Surfaces)

Curves 曲线

Bézier Curves 贝塞尔曲线

用一系列控制点定义摸一个曲线,这些控制点会定义曲线满足的一些性质

图中通过三个控制点,可以定义曲线起始点和结束点一定在\(p_0\)和\(p_3\)上,并且起始的切线和结束的切线一定都是\(p_0p_1\)方向和\(p_2p_3\)方向,这样就可以得到一条唯一的曲线(曲线不一定要经过控制点,取决于定义,我们只定义曲线一定经常起止点)

Evaluating Bézier Curves (de Casteljau Algorithm) 如何画出一条贝塞尔曲线

给定一系列任意多个控制点,怎么画出一条贝塞尔曲线?

de Casteljau算法

如图,给定三个控制点,生成的是quadratic Bezier(二次贝塞尔曲线)

曲线一定从\(b_0\)开始,在\(b_2\)结束,\(b_1\)决定了曲线往哪个方向弯曲

de Casteljau算法实则是要把在任意一个在\((0,1)\)之间的时间\(t\),这个曲线的点对应在空间中这个平面的哪个位置找出来,把画整个曲线的算法转化成了找一个点

三个输入的点形成了两个线段\(b_0b_1\)和\(b_1b_2\),在\(b_0b_1\)上认为\(b_0\)是\(0\),\(b_1\)是\(1\),\(b_0^1\)大约在\(b_0b_1\ 1/3\)的位置,取这个点,同理在\(b_1b_2\ 1/3\)处取点\(b_1^1\),得到线段\(b_0^1b_1^1\),再在线段\(b_0^1b_1^1\ 1/3\)处取一点\(b_0^2\),此时已无法找到更多的线段了,则该点为这条贝塞尔曲线在时间\(t\)所在的位置

为什么贝塞尔曲线是显式表示?

显式表示要么直接定义,要么通过参数来定义,这里的\(t\)自然是一个参数

只需枚举所有可能的时间\(t\),就能画出曲线

四个控制点的情况

很显然,de Casteljau算法是一个递归算法

当然控制点的移动会引起贝塞尔曲线本身的移动

代数上的形式
代数上的形式

在两个控制点之间线性插值得到新的点

\[b_0^1(t)=(1-t)b_0+tb_1\\ b_1^1(t)=(1-t)b_1+tb_2\\ \\ b_0^2(t)=(1-t)b_0^1+tb_1^1\\ \\ b_0^2(t)=(1-t)^2b_0+2t(1-t)b_1+t^2b_2 \]

给定时间\(t\),贝塞尔曲线上的点可以表示为控制点的组合

公式中控制点的上标不是次方,是表示第几层计算

\[关于n阶贝塞尔曲线的伯恩斯坦多项式:\\ b^n(t)=b_0^t(t)=\sum_{j=0}^{n}{b_jB_j^n(t)}\\ n为贝塞尔曲线阶数,b_j为贝塞尔曲线控制点,B_j^n为伯恩斯坦多项式 \\ 其实就是描述二项分布的一个多项式\\ 伯恩斯坦多项式: B_i^n(t)=\begin{pmatrix} n\\ i \end{pmatrix} t^i(1-t)^{n-i} \]

在空间中仍然可以得到贝塞尔曲线,只需把不同控制点输入成三维坐标即可,然后同样用伯恩斯坦多项式进行插值

伯恩斯坦多项式

伯恩斯坦多项式相当于对1自己的\(n\)阶展开,因此从图上可以看到,任意时间\(t\),画一条竖线,四个竖线交点的值相加等于\(1\)

贝塞尔曲线的性质

  • 贝塞尔曲线必须过起点和终点,以三阶贝塞尔曲线为例,b(0)=b_0;\ b(1)=b_3$

  • 对于三阶贝塞尔曲线,起始位置的切线一定为三倍的\(b_1-b_0\),\(b'(0)=3(b_1-b_0);b'(1)=3(b_3-b_2)\)

    倍数取决于阶数

  • 在仿射变换下,可以直接对顶点做仿射变换(旋转、缩放、平移),再对变换后的顶点画贝塞尔曲线,结果和直接对原曲线做仿射变换的一样的

    因此要对一条贝塞尔曲线做仿射变换,只需对其控制点做仿射变换,再重新画曲线即可

    只对放射变换有如此性质,如对投影就不是这样

  • 凸包性质

    画出的贝塞尔曲线一定在所有控制点形成的凸包(能够包围几何形体的最小 凸多边形)内

Piecewise Bézier Curves 逐段贝塞尔曲线

Piecewise是逐段的,相当于一段一段地考虑贝塞尔曲线

当控制点多的时候不容易控制曲线,来得到一些我们想要的形状

于是我们可以一次用较少控制点,定义一段贝塞尔曲线,然后将多段贝塞尔曲线连起来。特别的,人们喜欢用四个控制点,也就是三次贝塞尔曲线(Piecewise cubic Bézier)

(图中为了美观没有画出\(b_1b_2\)线段)

几何连续

当第一段终止点等于第二段起始点\(a_n=b_0\),则称为\(c^0\)连续(continuity)

切线连续

如何保证两段贝塞尔曲线连接处光滑呢(切线连续:大小一样,方向相反)

我们可以将连接处的A贝塞尔曲线\(b_2\)和B贝塞尔曲线\(b_1\)相距连接点等距且共线(导数连续)

\(C^1 continuity: a_n=b_0=\frac{1}{2}(a_{n-1}+b_1)\)

\(C^1\)连续

再高阶的连续如曲率连续等等

Spline 样条

连续的曲线,由一系列控制点控制,在任意一点都满足一定的连续性

简单总结:一个可控的曲线

B-splines (basis splines) B样条 基函数样条

相当于对贝塞尔曲线的拓展

B样条具有局部性,改变一个控制点,至多影响一定范围内的曲线,不同于贝塞尔曲线改变一个控制点就会改变整条曲线,相较于分段贝塞尔曲线,B样条不需要分段

比B样条更复杂的有NURBS(非均匀有理B样条)

Surfaces 曲面

Bézier Curves 贝塞尔曲面

在平面上定义\(4\times4\)个控制点,每四个控制点在不同时间\(t\)产生的四个控制点,认为这四个新的控制点是另一个贝塞尔曲线的控制点,就可以画出另一条贝塞尔曲线

水平方向做一下得到四个控制点,再用这四个控制点在竖直方向做一下

在水平方向上走,需要一个时间\(t_1\),在竖直方向上也需要一个时间\(t_2\),所以需要一个二维一个控制,我们叫其\(uv或t_1t_2\)

要找点\((u,v)\)的位置,只需先找时间为\(u\)时,四条贝塞尔曲线上的点,将这四个点作为控制点,再找时间为\(v\)的点即为所求。

通过\((0,1)\)范围内的坐标\(uv\)可以映射到任意一个点,所以我们说贝塞尔曲面是显式表达

不同贝塞尔曲面怎么拼在一块,保证边界严丝合缝?复杂

Mesh 网格

用来表示空间中面的形状的最普遍方法是Mesh 网格(三角形、四边形...)

以三角形为例

用三角形来描述空间中各种各样不通风的表面,自然而然对于它形成的网格会有一定的操作——几何处理

Mesh subdivision 网格细分 (upsampling)

用更多三角形获得更光滑的表面

对triangle meshes三角形网格的一般细分规则:

首先,引入更多三角形(顶点)

第二,调整顶点位置

Loop Subdivision 细分曲面

  • 将每个三角形分裂成四个

  • 根据权重确定新顶点的位置

    • 对于新的顶点

      对于一个新的顶点(图中白点),它一定会出现在一条边上,只要这条边不是物体的边界,该点就会被不同的三角形所共享(图中\(ABD\)和\(ABC\)),找到这两个三角形共享的边叫做\(AB\),不共享的顶点叫做\(C\)和\(D\),则将新生成的点位置调整到\(3/8*(A+B)+1/8*(C+D)\)(一种加权平均)

    • 对于旧的顶点

      一部分情况下保留自己原先的位置,一部分情况下改变位置,根据该顶点的度\(n\)(顶点连接的边的数量)判断

      再考虑\(u\)(仅仅是跟度\(n\)有关的一个数)

      则新的顶点位置为

      \[(1-n*u)*original\_position+u*neighbor\_position\_sum \]

      (如果该点连接了很多三角形,则该点不重要,第二项占比重大,反之第一项占比重大)

Catmull-Clark Subdivision (General Mesh)

Loop Subdivision 适用于三角形网格,对于一般网格,可以用Catmull-Clark Subdivision

我们定义Quad face 四边形面Non-quad face 非四边形面Extraordinary vertex 奇异点(度不为4的点)

我们取三角形三个边的中点以及面取一个点(可以是重心或任意点,反正之后要调整位置),连接边上的点和面中心的点(假设取重心)

现在有四个奇异点(原本两个奇异点,新产生了两个奇异点),但非四边形面全部消失了,可以理解为非四边形面转化成了奇异点

因此Catmull-Clark算法有一个性质:在细分之前有多少非四边形面,细分一次之后就会转化成多少个奇异点。

然后再继续进行细分,因为已经没有非四边形面了,因此不会有新的奇异点

随着细分次数的增多,顶点增多会导致曲面越来越光滑

Catmull-Clark细分公式

FYI:Catmull-Clark Vertex Update Rules (Quad Mesh)

根据点的位置更新(在面上的新点、在边上的新点、旧的顶点)

Mesh simplification 网格简化 (downsampling)

保持基本形状的情况下,用更少三角形来描述它(控制损失在一定范围内)

edge collapsing 边坍缩

要判断那些边重要,不能进行边坍缩,那些边不那么重要,可以进行边坍缩

Quadric Error Metrics(二次误差度量)

二次指的是平方而不是做两次

这里简化到二维举例

如图要删去上面三个顶点,用一个新顶点代替它们,若是新顶点等于五个原顶点求平均(图1蓝点),则发现新三角形太小,不符合原三角形轮廓,若是用被代替的三个顶点求平均,也还是比原三角形轮廓小

Quadric error(二次度量误差)为新顶点到与其相关联的面的距离的平方和

当二次度量误差最小时,即为新顶点位置

Quadric Error of Edge Collapse

对于一个模型,可以通过边坍缩的方式来简化,那如何决定坍缩那条边呢?

答案是从二次度量误差最小的边开始坍缩,再坍缩第二小的、第三小的...

先给每条边打上一个分数,分数为这条边的二次度量误差,再从分数小的边开始坍缩

  • 有一个问题,当一条边坍缩时,可能会改变别的边的二次度量误差

    所以需要对受影响的边更新二次误差,因此应选用优先队列/堆作为存储二次度量误差的数据结构(允许求最小且允许动态更新)

我们是在对局部做最优解的同时试图找到全局最优解,是典型的贪心算法

Mesh regularization (same #triangles)(正则化)

让三角形不至于出现特别尖、特别长的三角形,让三角形基本变成更正三角形相似的一些三角形

标签:11,Surfaces,坍缩,曲线,贝塞尔,控制点,顶点,Lecture,三角形
From: https://www.cnblogs.com/Tellulu/p/18092222

相关文章

  • Lecture 09 Shading 3 (Texture Mapping cont
    Lecture09Shading3(TextureMappingcont.)Shading3Barycentriccoordinates重心坐标为了在三角形内部任何一点内插值,我们引入重心坐标为什么需要插值?指定顶点属性在三角形内部保持平滑变化插值什么内容?纹理坐标、颜色、法向量,...怎么做插值?重心坐标......
  • Lecture 10 Geometry 1 (Introduction)
    Lecture10Geometry1(Introduction)Examplesofgeometry几何的例子不同形状的几何光滑的曲面复杂的模型、位置摆放布料水滴城市(复杂在东西多)怎么存储怎么渲染这么大级别的东西离得远的情况下如何简化几何模型如何利用光线之间的连续性毛发微观几何树枝......
  • Lecture 06 Rasterization 2 (Antialiasing and Z-Buffering)
    Lecture06Rasterization2(AntialiasingandZ-Buffering)Antialiasing反走样采样理论发生在不同位置(如照相)发生在不同时间(如动画)SamplingArtifacts(指图形学中的错误、看上去不对的地方、瑕疵)锯齿摩尔纹Wagonwheeleffect行进的车轮看起来似乎是向后转的......
  • Lecture 08 Shading 2 (Shading, Pipeline and Texture Mapping)
    Lecture08Shading2(Shading,PipelineandTextureMapping)ShadingfrequenciesP1每个面着色一次P2每个顶点着色一次,每个三角面内插值P3每个像素着色一次FlatShading(逐三角形)每个三角面是一个平面,只有一个法线在光滑表面效果不好Gouraudshading(逐顶点)每个......
  • Lecture 05 Rasterization 1(Triangles)
    Lecture05Rasterization1(Triangles)什么是屏幕一组像素数组的大小:分辨率一种典型的光栅成像设备光栅光栅化==画在屏幕离像素一个个小方块,每个方块中的颜色不会变化(实际上不准确,这样描述只是方便理解)颜色是RGB三个值的混合定义屏幕空间像素的坐标写成\((x,......
  • Lecture 02 Review of Linear Algebra
    Lecture02ReviewofLinearAlgebra图形学的依赖基础数学线性代数微积分统计学基础物理光学力学杂项信号处理数值分析一点美学向量(数学上称为向量,物理上称为矢量)\(\vec{AB}\)=B-A向量表示方向和长度向量的大小\(\Vert\vec{a}\rVert\)单位向量\(\wi......
  • 【办公类-22-11】周计划系列(5-3)“周计划-03 周计划内容循环修改“ (2024年调整版本)
    背景需求:前文从原来的“新模版”文件夹里提取了周计划主要内容和教案内容。【办公类-22-10】周计划系列(5-2)“周计划-02源文件docx读取5天“(2024年调整版本)-CSDN博客文章浏览阅读1.1k次,点赞29次,收藏22次。【办公类-22-10】周计划系列(5-2)“周计划-02源文件docx读取5天“(2024......
  • C++必知必会 C++11实用特性
    文章目录前言nullptr和NULLconst和constexprauto和decltypelambda表达式function和bind右值引用移动语义move智能指针前言C++11开始添加了很多好用的新特性,个人认为想要真正掌握这些特性还是需要多读代码,多应用这些特性,本文只记录了一些个人用过的,并结合自己的使用......
  • 突破编程_C++_C++11新特性(lambda表达式的基础知识)
    1Lambda表达式简介1.1Lambda表达式的定义与概念Lambda表达式是C++11引入的一种函数对象的匿名表示方法,它的定义与概念基于数学中的λ演算。Lambda表达式为程序员提供了一种更加简洁、灵活的方式来定义轻量级的、临时的、内联的函数对象,通常用于函数式编程的场景......
  • CF1711B Party 题解
    CF1711BParty原题题意给定$n$个点带点权的无向图,点权$a_i$保证无重边自环,点权非负),要求删去一些点和它相连的边,使得剩下这个图的边数为偶数且删去点的点权之和最小。问删去点的点权之和最小是多少?分类讨论我们分类讨论一下。$m$为偶数,则不需要删边或点,直接输出$0$即......