图形处理(十)测地极坐标参数化
来源:互联网 发布:星际淘宝网下载 编辑:程序博客网 时间:2024/05/01 17:17
一、相关理论
测地极坐标参数化的paper是我研究生学习阶段,写的第二篇没有源码的外文文献,年少无知,看文献的也是没有完全看懂,就开始写代码,然后通过代码不断的根据文献算法,进行调整,终于把paper的代码实现了。在此把paper的算法详细解读一下,以供正在苦逼的搞三维图形算法的同道中人学习。
三维的算法比较难,网上资料也比较少,国内除了到知网、万方等数据库可以有文献看,代码方面可以说没有,国外要找到提高源码的paper也很不容易,所以要把三维CAGD的一些算法学懂实属不易,在此祭奠曾经走过的三维苦逼算法学习之路。本篇博文主要讲解文献:《Geodesic polar coordinates on polygonal》,这里中文我又把它翻译为:测地极坐标参数化,离散幂映射算法中每个顶点参数值取决于该顶点的法矢,因此网格曲率变化较大时经常使得参数化结果发生较大扭曲。相比于离散指数映射算法,Eivind等提出的测地极坐标参数化方法具有更好的稳定性和鲁棒性。
给定具有n个顶点的三角网格模型M=(V,E,T),V为顶点集,E为边集,T为三角面片集合。设Tijk=[vi,vj,vk],设s为网格曲面上的任意点,切向量X为基方向,如图。
二、算法讲解
在网格曲面上,对于给定的参数化种子点S,我们把网格曲面上的顶点分为两类:1-ring、k-ring(k>=2),其中1-ring表示与s直接相连的顶点,k-ring表示不与s相邻的顶点。对于测地极坐标参数化方法来说,我们需要根据这两种顶点,使用不同的计算公式。
1、1-ring参数化方法
对于网格曲面上的任意点s,根据s点位于网格三角面片的位置可分为三角面片内点、边点、顶点三种情况:
①s为三角面片T0内的点,如图 s1点,此时只需以T0作为参数化平面,以s点为原点,即可求取T0三个顶点的极坐标
②s位于网格边上E0,如图s2点,此时只需以E0作为铰链,固定其中的一个平面,以E0作为铰链,把另一个邻接三角面片旋转到同一个平面上,
③s为网格曲面的顶点,使用:《Free-form shape design using triangulated surfaces》提出的极坐标映射:即保证s点邻接边的长度不变,邻接角度为的缩放比例为,其中θi为顶点的邻接角,即对于s点邻接顶点的局部参数化满足:
其中v和w为s点的邻接顶点,根据公式可对s点的邻接三角面片作局部展平参数化。
2、k-ring参数化
如图所示,设网格曲面上有4点,分别为s、vi、vj、vk,s点为源点,vi、vj、vk为同一个三角面片的三个顶点,且vi测地极坐标未知,vj、vk为极坐标已知的点,分别为(Rj,θj)、(Rk,θk),目标是求取vi的极坐标,即vi在参数空间Tp上的映射点。
测地极坐标参数化方法的基本思想是:以vi'(0,0)为原点,对vi的一环邻域点作局部参数化,接着分别以vk'、vj'为圆点,以Rk、Rj为半径作圆,则可以获得两圆的交点s'。以s'作为伪源点,通过该伪源点计算vi的极坐标。
设ek=vk'-vi',ej=vj'-vi',ekj=vk'-vj',则伪源点s'可以表示为:
s'=xjej+xkek
式中,
,
根据(8)式可计算s'在vi局部参数空间的坐标。由此可得vi映射至Tp的极径:
极角计算公式:
θi=(1-α)θj+αθk
式中,α=ϕij/ϕkj,ϕkj是向量vk's'与向量vj's'之间的夹角,ϕij是向量vi's'与向量vj's'之间的夹角。
测地极坐标方法:首先对源点的一环邻域点作局部参数化,接着用极径作为Dijkstra算法往外扩散的依据。Dijkstra算法扩散过程中,用公式(9)(10)不断更新活动顶点的极坐标。
三、算法实现
下面是paper中的伪代码:
- <span style="font-size:18px;">Algorithm 1: Pseudo code for computing DGPC on a mesh
- 1: for i = 1, · · · ,n do
- 2: U[i] =∞
- 3: end for
- 4: initializeNeighbourhood(s)
- 5: candidates.push( neighbourhood( s ) )
- 6: while candidates.notEmpty() do
- 7: j = candidates.getSmallestNode()
- 8: for i ∈ neighbours(j) do
- 9: newUi = computeDistance(i)
- 10: if U[i] / newUi > 1 + eps then
- 11: U[i] = newUi
- 12: theta[i] = computeAngle(i)
- 13: if newUi < Umax then
- 14: candidates.push(i)
- 15: end if
- 16: end if
- 17: end for
- 18: end while</span>
参考文献:
1、《Differential coordinates for interactive mesh editing》
2、《Interactive decal compositing with discrete exponential maps》
3、《Part-based representation and editing of 3D surface models》
4、《Geodesic polar coordinates on polygonal》
**********************作者:hjimce 时间:2015.5.10 联系QQ:1393852684 地址:http://blog.csdn.net/hjimce 原创文章,版权所有,转载请保留本行信息********************- 图形处理(十)测地极坐标参数化
- 图形处理(十)测地极坐标参数化
- 图形处理(二)固定边界参数化
- 图形处理(二)固定边界参数化
- 图形处理(一)离散指数映射参数化-Siggraph 2006
- 图形处理(一)离散指数映射参数化-Siggraph 2006
- Java的图形处理中经常使用坐标方式
- 坐标离散化处理
- Matlab GUI图形化界面,坐标
- C1WebChart 图形化处理。
- 圆方参数化之坐标认识()
- OpenGL基础图形编程(十)真实感图形基本概念
- 图形库坐标矩阵
- visio中如何画出三维图形(带三维坐标)
- matlab-figure图形( 局部放大&变坐标)
- NOIP复赛复习(二十)剪枝与坐标离散化
- 图形图形处理技术
- 图形处理
- OCruntime交换方法用在处理iOS版本跨度问题的解决
- 图形处理(九)点云重建(下)法矢求取、有向距离场等值面提取
- HashMap的工作原理总结
- 自定义鼠标修改窗口大小
- RecyclerView的使用
- 图形处理(十)测地极坐标参数化
- 精华阅读第 5 期 | 移动开发精英俱乐部
- leetcode3. Longest Substring Without Repeating Characters
- 编译安装lamp
- ios实时播放PCM数据
- socket编程
- LINK:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 16进制颜色码对照表
- session会话更新