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)argmin​j=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​=Cnj​xj(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π ​1​e−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∑n​bi​gi​(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π ​1​e−2σ2(x−μ)2​=2π ​1​e−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=1n​bi​gi​(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=1n​wi​g0,1​(ai​x+bi​)

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)=Cni​ti(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∑n​Bin​(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=1n​Bi(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-邻域

      • 表示了模型表面局部的光顺程度
  • 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)∑​wj​vj​
      • 常见的权重系数
        • 均衡权重: 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∑​wj​wj​​

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 学习笔记相关推荐

  1. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  2. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  3. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  4. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  5. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  6. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  7. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  8. 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 ...

  9. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

最新文章

  1. Windows 技术篇-桌面图标全部消失问题解决方法,windows资源管理器重启实例演示
  2. 用java爬取杭电oj已ac代码
  3. BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )
  4. IEEE发布AI三原则:机器人革命中需要保护人类福祉 | 138页报告
  5. 解压软件Bandizip Archiver for mac
  6. python 数学计算库_数学计算工具库-Numpy
  7. python图灵机器人接口_apikey创建接入图灵机器人
  8. 互联网金融学习总结(7)——2019年线下大额现金贷产品设计和风控手段
  9. Python状况:为什么PyPy是Python的未来?
  10. 技术期刊 · 白日照耀开鸿蒙 | 深入鸿蒙 ACE UI 框架解析;无限循环的 useEffect 类型;用 Three.js 实现 3D 房间;图神经网络入门;超基础的机器学习入门-原理篇
  11. UNIAPP nvue 地图 markers 不显示
  12. 通过阿里P9代考这件事,聊聊职级
  13. 使用批处理批量安装TCP/ip打印机
  14. 物流中的独立节点路由试算
  15. tinymce富文本编辑器的使用
  16. 在python中计算夏普比率和特雷诺比率
  17. JAVA中将html转换成pdf
  18. nandflash原理及硬件操作
  19. C语言——百钱百鸡问题分析(最优解法)
  20. 【UE4】虚幻引擎运行流程

热门文章

  1. JAVA从入门到入土(1)
  2. Bug总是找不到?试试小黄鸭调试法吧
  3. 《C++语言基础》实践参考——复数模板类
  4. 10bit灰阶测试图_真假10bit?!到底该怎么测?测试显示器10bit色深的两种方法
  5. 注册发布自己的npm包
  6. 致远oa系统多版本getshell漏洞(附改版的脚本)
  7. Lifecycle,看完这次就真的懂了
  8. 从 MIT 协议谈契约精神
  9. 猎豹wifi有linux,最全猎豹免费wifi手机连上了但上不了网的解决方法介绍
  10. 年度全球区块链最有影响力人物排行榜TOP10