Games102 学习笔记
Games 102
P2 数据拟合
拟合数据的好坏
- 分段线性插值函数 y = f 1 ( x ) y=f_1(x) y=f1(x),数据误差为0,只有 C 0 C_0 C0连续。
- 光滑插值函数 y = f 2 ( x ) y=f_2(x) y=f2(x),数据误差为0,可能被Noice带歪,导致函数性质不好,预测而不可靠
- 逼近拟合函数 y = f 3 ( x ) y=f_3(x) y=f3(x),允许一定的误差
三部曲方法论
- 到那找:确定某个函数集合/空间
- 找那个:度量哪个函数是好的=确定loss
- 怎么找:求解或优化
- 如果转化为系数的方程组是欠定的(有无穷多解),则修正模型:Lasso、岭回归、稀疏正则项
多项式插值定理
- 拉格朗日多项式
- 牛顿插值多项式
- 病态问题
- 数据微笑的变化可能会导致插值结果变化较大
- 函数相互抵消
- 单项式,从低次幂到高次幂占据的重要性优先级依次下降。
- 使用正交多项式基
- 结论
- 多项式插值不稳定
- 振荡现象:多项式随着插值点数的增加而摆动
多项式逼近
- 为什么做逼近
- 数据包含噪声
- 追求更紧凑的表达
- 计算简单、更稳定
- 最小二乘逼近
- a r g m i n f ∈ s p a n ( B ) ∑ j = 1 m ( f ( x j ) − y j ) 2 \underset{f\in span(B)}{argmin}\sum\limits_{j=1}^{m}(f(x_j)-y_j)^2 f∈span(B)argminj=1∑m(f(xj)−yj)2
函数空间及基函数
- Bernstein多项式逼近
- 基函数: b n , j = C n j x j ( 1 − x ) n − j b_{n,j} = C_n^jx^j(1-x)^{n-j} bn,j=Cnjxj(1−x)n−j
- 优势
- 正性、权性(和为1)->凸包性
- 变差缩减性
- 递归线性求解方法
- 细分性
RBF函数插值/逼近
- RBF函数的一维形式即为Gauss函数
- g μ , σ ( x ) = 1 2 π e − ( x − μ ) 2 2 σ 2 g_{\mu,\sigma}(x) = \frac{1}{\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} gμ,σ(x)=2π 1e−2σ2(x−μ)2
- RBF函数
- f ( x ) = b 0 + ∑ i = 1 n b i g i ( x ) f(x)=b_0+\sum\limits_{i=1}^n b_ig_i(x) f(x)=b0+i=1∑nbigi(x)
从另一个角度来看拟合函数
- Gauss拟合函数
- 一般的Gauss函数表达为标准Gauss函数的形式
- g μ , σ ( x ) = 1 2 π e − ( x − μ ) 2 2 σ 2 = 1 2 π e − 1 2 ( x σ − μ σ ) 2 = g 0 , 1 ( a x + b ) g_{\mu,\sigma}(x)= \frac{1}{\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}= \frac{1}{\sqrt{2\pi}}e^{-\frac{1}{2}(\frac{x}{\sigma}-\frac{\mu}{\sigma})^2}=g_{0,1}(ax+b) gμ,σ(x)=2π 1e−2σ2(x−μ)2=2π 1e−21(σx−σμ)2=g0,1(ax+b)
- a = 1 σ , b = μ σ a=\frac{1}{\sigma},b=\frac{\mu}{\sigma} a=σ1,b=σμ
- 这样就可以同时优化 μ \mu μ和 σ \sigma σ
- f ( x ) = b 0 + ∑ i = 1 n b i g i ( x ) f(x) = b_0+\sum_{i=1}^{n}b_ig_i(x) f(x)=b0+∑i=1nbigi(x)-> f ( x ) = w 0 + ∑ i = 1 n w i g 0 , 1 ( a i x + b i ) f(x)=w_0+\sum_{i=1}^nw_ig_{0,1}(a_ix+b_i) f(x)=w0+∑i=1nwig0,1(aix+bi)
- 一般的Gauss函数表达为标准Gauss函数的形式
P3 参数曲线拟合
多元函数
- 二元函数的基函数构造
- 张量积形式:即两个一元函数的基函数的相互乘积来定义
- 三次张量积多项式
- 多元函数的张量积定义
- 优点:定义简单,多个医院基函数的乘积形式
- 不足:随着维度增加,基函数个数急剧增加,导致变量急剧增加(求解系统大规模急剧增加,求解代价大)
- 多元函数的神经网络表达
向量值函数(多个应变量)
- 平面参数曲线、空间参数曲线、空间参数曲面,二维映射、三维映射,降维映射(一般有信息的丢失,且不可恢复)
- 有限元分析:就是对空间中的一个微元进行变形分析
- 一般映射
- f : R n − > R m f:R^n->R^m f:Rn−>Rm
- 如果 n < m n<m n<m,为低维映射到高维(高维的超曲面,n维流形曲面),本征维度为n(用n维参数就可以表示它)
- 如果 n > m n>m n>m,为降维映射,一般有信息损失,但如果 R n R^n Rn中的点集正好位于一个m维(或小于m)的流形上,则映射可能是无损可恢复的。
曲线拟合
- 输入:给定平面上的系列点 ( x i , y i ) , i = 1 , 2 , 3... , n (x_i,y_i),i=1,2,3...,n (xi,yi),i=1,2,3...,n
- 输出:一条参数曲线,拟合这些点为一条参数曲线
- 其中 p ( t ) = ( x ( t ) y ( t ) ) p(t)=\left(\frac{x(t)}{y(t)}\right) p(t)=(y(t)x(t))
P4 三次样条函数
样条
- 为什么要成为样条函数?
- 在之前没有计算机辅助几何设计的阶段,设计师们用样条来辅助画图。
- 样条与压铁
- 样条:具有一定弹性的软木条
- 压铁:比较重的铁块,用来固定样条所经过的点
- 自由曲线
- 没有数学表述,只知道它通过一些空间点列,这类没有数学表达式的曲面或曲线称为自由曲面/自由曲线
三次样条函数
- 样条曲线的数学表达推导
- 压铁:型值点;样条:插值型曲线
- 分段3次多项式的好处
- 2次多项式无法表达拐点,不够自由
- 高次多项式拐点多,容易出现较大误差
- 三次样条函数推导(方法1)
- 假设n+1个点,则有n条线段需要拟合,每条线段需要4个变量描述,则共有4n个未知量
- n+1个点在曲线上,可以提供n+1个方程
- 曲线在型值点处 C 0 , C 1 , C 2 C^0,C^1,C^2 C0,C1,C2连续,可以提供 3 n − 3 3n-3 3n−3个方程
- 再加上两个边界条件,一共4n个方程,4n个未知量
- 可以用追赶法求三弯矩方程组。
- 边界条件:
- 自由端(指定曲线在两个端点处的二阶导数值为0)
- 夹持端(指定曲线在两个端点处的一阶导数值)
- 抛物端(指定首尾两端为抛物线)、周期端、混合边界条件
- 三弯矩方程组/三转角方程组
- 三对角矩阵
- 主对角占优
- 有唯一解
- 追赶法求解
三次基样条
三次样条曲线
- 样条函数的局限性
- 须有小扰度假定
- 不能处理多值问题
- 不能很好地表达空间曲线
- 不具有坐标不变性(几何不变性)
- 三次参数样条曲线
曲线的几何连续性
- 参数连续性
- 参数连续性的不足
- 参数连续性过于严格, 在几何设计中不太直观
- 参数连续性的不足
- 几何连续性
- 几何连续性的具体形式
P5 Bezier曲线和B样条曲线
Bernstein基函数
- n次bernstein基函数 B = { B 0 ( n ) , B 1 ( n ) , . . . , B n ( n ) } B=\{B_0^{(n)},B_1^{(n)},...,B_n^{(n)}\} B={B0(n),B1(n),...,Bn(n)}
- B i n ( t ) = C n i t i ( 1 − t ) n − i B_i^{n}(t)=C_n^it^i(1-t)^{n-i} Bin(t)=Cniti(1−t)n−i
- example:
- 用Bernstein基函数所表达的曲线具有非常好的几何意义
- b i ( t ) b_i(t) bi(t)的特性决定了曲线的特性
Bezier曲线
- Bezier曲线的性质来源于Bernstein基函数的性质(曲线是控制顶点的线性组合构成,基函数提供了组合系数)
- n次Bezier曲线:n+1个控制点
- x ( t ) = ∑ i = 0 n B i n ( t ) ⋅ b i x(t)=\sum\limits_{i=0}^nB_i^n(t) \cdot b_i x(t)=i=0∑nBin(t)⋅bi
Bernstein基函数及Bezier曲线的性质
- Bernstein基函数
- 对称性: B i ( n ) ( t ) = B n − i ( n ) ( 1 − t ) B_i^{(n)}(t)=B_{n-i}^{(n)}(1-t) Bi(n)(t)=Bn−i(n)(1−t)
- 最大值: B i ( n ) ( t ) B_i^{(n)}(t) Bi(n)(t)在 t = i n t=\frac{i}{n} t=ni达到最大值
- 正权性:
- 正性: B i ( n ) ( t ) ≥ 0 , ∀ t ∈ [ 0 , 1 ] B^{(n)}_i(t)\geq 0,\forall t\in[0,1] Bi(n)(t)≥0,∀t∈[0,1]
- 权性: ∑ i = 1 n B i ( n ) ( t ) = 1 , ∀ t ∈ [ 0 , 1 ] \sum_{i=1}^nB_i^{(n)}(t)=1,\forall t\in[0,1] ∑i=1nBi(n)(t)=1,∀t∈[0,1]
- 可以由上两条性质推出Bezier曲线具有凸包性
- 基性
- 递推公式
- 端点插值性
- 导数
- 升阶
- Bezier曲线的端点性质
- 端点插值
- 端点的切线方向与边相同
- 段殿德2阶 ( k ) (k) (k)切线与3点 ( k + 1 ) (k+1) (k+1)相关
- De Casteljau algorithm算法
- 几何样条曲线
+
B样条曲线
- Bezier曲线的不足
- 牵一发而动全身
- 样条曲线(分段的多项式曲线/Bezier曲线)
- 分段表达,具有局部性
P6 NUMBERS
有理曲线
- Beizer曲线存在的问题:无法精确地表示圆形
- 原因:Bezier曲线是一种多项式函数
NURBS曲线
- Non-Uniform Bational B-Spline 非均匀有理B样条
- 节点向量非均匀
- 影响NURBS曲线建模的因素
- 控制顶点:用户交互的手段
- 节点向量:决定了而B样条基函数
- 权系数:影响曲线的形状,生成圆锥曲线等
细分曲线
- 受Bezier曲线的de Casteljau作图法影响,可以通过不断“割角”构造曲线
- 细分方法的思想:
- 拓扑规则(splitting):加入新点,组成新多边形
- 几何规则(averaging):移动顶点,局部加权平均
- Chaikin细分方法(逼近型:对所有顶点都移动)
- 拓扑规则:点分裂成边,老点被抛弃。新点老点重新编号
- 几何规则:新顶点是老顶点的线性组合
- 性质:极限曲线为二次均匀B样条曲线,节点处 C 1 C^1 C1,其余点处处 C ∞ C^{\infty} C∞
- 均匀3次B样条曲线细分方法
- 插值细分方法
- 保留原来的顶点,对每条边增加一个新顶点,不断迭代,生成一条曲线
- 一般:2n点插值细分方法
- 非线性细分方法(基于双圆弧插值的曲线细分方法)
- 给定一条边,新点为插值其两端点及两端切向的双圆弧的一个连接点,也是其两端点两端切向的所确定三角形的内心.
- 每个细分步骤后调整切向.
隐式曲线
- 隐式曲面:不会告诉你任何点的信息,只告诉你曲面上的点满足的关系,可以很快的判断给定的点在曲面上或曲面内侧/外侧
- 显式曲面:所有曲面的点直接被给出,或可以通过映射关系得到
- 常见的隐式曲面:代数曲面、CSG、SDF、水平集、分型几何
- 常见的显式曲面:点云、多边形网格、参数曲面
NURBS曲面
- 参数曲面
- 张量积
- 张量积曲面
- Bezier曲面
- Trimmed NURBS曲面(表达带“洞”或非矩形边界的曲面)
- 曲面上的曲线:使用参数域上的NURBS曲线来定义,然后复合得到曲面上的曲线。
P7 曲面光顺
曲线的微分几何
曲线的光顺定义
- 一条曲线是光顺的,如果
- 它是 C l + 1 ( l > 0 ) C^{l+1}(l>0) Cl+1(l>0)连续的;
- 它的曲线本身拐点较少;
- 它的曲率图的拐点较少;
- 它的曲率图变化的振幅相对小
曲线的光顺方法
- 小扰度假设:转角不大于60度
- 此时曲线满足条件:KaTeX parse error: Expected group after '^' at position 2: y^̲'{x}<<1且 y ′ ′ ( x ) ≈ k ( x ) y^{''}(x)\approx k(x) y′′(x)≈k(x)
- 方法
- C 1 C^1 C1连续
- 初光顺(定界法):降低跳跃曲率的幅度。调整控制点位置,降低曲率的跳跃幅度,删除一些不必要的拐点
- 基本光顺(卡尺法):减少第一个振动数 R R R。调整控制点位置,删除其他多余的转折点。
- 精光顺(回弹法):减少第二个振动数 S S S。检查控制点的剪切力的方向,调整剪切力的变化数字。
离散曲线处理
- 为什么要离散
- 渲染的必要性、计算的必要性、制造的必要性
- Nyquist-Shannon采样定理
- 如果一个函数x(t)不包含高于B赫兹的频率。它完全可以通过给出其在一系列的时间间隔为1/(2B)秒。
- 重心坐标(没有细讲,一带而过)
三角网格:曲面的离散表达
- 这部分没有做笔记,日常用的比较多
P9 微分坐标
3D网格曲面:二维流形曲面的离散
- Local Structure
- 局部特征度量(small-sized cells):1-邻域
- 表示了模型表面局部的光顺程度
- 局部特征度量(small-sized cells):1-邻域
- Laplace算子
- n维欧式空间的Laplace算子
- Δ f = ∑ i = 1 n ϑ 2 f ϑ x i 2 \Delta f=\sum\limits_{i=1}^n\frac{\vartheta^2f}{\vartheta x_i^2} Δf=i=1∑nϑxi2ϑ2f
- 定义在黎曼流形上的椭圆形算子
- Differential Coordinates(微分坐标)
- 离散形式的Laolacian算子
- ϑ i = v i − ∑ j ∈ N ( i ) w j v j \vartheta_i=v_i-\sum\limits_{j \in N(i)}w_jv_j ϑi=vi−j∈N(i)∑wjvj
- 常见的权重系数
- 均衡权重: w j = 1 w_j=1 wj=1
- cotangent权重: w j = ( cot α + cot β ) w_j=(\cot \alpha+\cot\beta) wj=(cotα+cotβ)
- normlization: w j = w j ∑ j w j w_j=\frac{w_j}{\sum\limits_jw_j} wj=j∑wjwj
- 离散形式的Laolacian算子
- n维欧式空间的Laplace算子
Local Laplacian Smoothing
- P n e w ← P o l d + λ L ( P o l d ) P_{new}\leftarrow P_{old}+\lambda L(P_{old}) Pnew←Pold+λL(Pold),其中 L L L是每个邻居点的平均向量, λ \lambda λ是原先的点沿方向移动多少倍
- Discrete Mean Curvature Flow(离散平均曲率流)
- P n e w ← P o l d + λ H ( P o l d ) n ( P o l d ) P_{new}\leftarrow P_{old}+\lambda H(P_{old})n(P_{old}) Pnew←Pold+λH(Pold)n(Pold)
- 其中 H n Hn Hn为
- 使用平均离散曲率流能避免网格密度不均匀的曲面发生较大形变。
Global Laplacian Smoothing
曲面参数化
Games102 学习笔记相关推荐
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
- 2020年Yann Lecun深度学习笔记(上)
2020年Yann Lecun深度学习笔记(上)
- 知识图谱学习笔记(1)
知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...
- 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...
- Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)
Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...
- MongoDB学习笔记(入门)
MongoDB学习笔记(入门) 一.文档的注意事项: 1. 键值对是有序的,如:{ "name" : "stephen", "genda" ...
最新文章
- Windows 技术篇-桌面图标全部消失问题解决方法,windows资源管理器重启实例演示
- 用java爬取杭电oj已ac代码
- BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )
- IEEE发布AI三原则:机器人革命中需要保护人类福祉 | 138页报告
- 解压软件Bandizip Archiver for mac
- python 数学计算库_数学计算工具库-Numpy
- python图灵机器人接口_apikey创建接入图灵机器人
- 互联网金融学习总结(7)——2019年线下大额现金贷产品设计和风控手段
- Python状况:为什么PyPy是Python的未来?
- 技术期刊 · 白日照耀开鸿蒙 | 深入鸿蒙 ACE UI 框架解析;无限循环的 useEffect 类型;用 Three.js 实现 3D 房间;图神经网络入门;超基础的机器学习入门-原理篇
- UNIAPP nvue 地图 markers 不显示
- 通过阿里P9代考这件事,聊聊职级
- 使用批处理批量安装TCP/ip打印机
- 物流中的独立节点路由试算
- tinymce富文本编辑器的使用
- 在python中计算夏普比率和特雷诺比率
- JAVA中将html转换成pdf
- nandflash原理及硬件操作
- C语言——百钱百鸡问题分析(最优解法)
- 【UE4】虚幻引擎运行流程