重读经典论文: Mean Value Coordinates for Closed Triangular Meshes

news2024/11/25 14:50:23

Mean Value Coordinates for Closed Triangular Meshes 发表于ACM SIGGRAPH 2003, 是图形学领域的经典论文,作者是之前组里毕业的居涛,论文只有6页,这在SIGGRAPH会议中并不多见,目前引用超过700次,在插值,参数化,变形等领域被广泛应用。

先看一下论文给的Teaser,这里主要是变形的一个应用。输入包括:待变形网格模型 + 控制网格(跟模型形状相似的稀疏网格),通过移动控制网格的顶点驱动模型形状发生改变,其实主要就是插值问题,将模型顶点表示为控制网格点的线性组合。
在这里插入图片描述

一、插值问题描述

本文所涉及的插值要做的事就是将2D多边形(3D多面体) P P P 内部的任意点 v v v 表示为 P P P 的线性组合:
v = ∑ i = 1 n w i p i (1) v = \sum^n_{i=1}w_ip_i \tag1 v=i=1nwipi(1)
这里的 w i w_i wi 称为插值权重,满足 ∑ i = 1 n w i = 1 \sum^n_{i=1}w_i = 1 i=1nwi=1,插值问题的重点就是求解该权重。对于上图所示的变形问题,其实就是求出该权重并保持不变,然后修改控制网格: P → P ′ P \to P' PP, 最后,变形后的模型表示为: v ′ = ∑ i = 1 n w i p i ′ v' = \sum^n_{i=1}w_ip'_i v=i=1nwipi

二、2D多边形插值

这一部分主要探讨2D多边形内部插值,输入多边形 P P P, 内部一点 v v v, 输出对应的插值权重 W = { w i } W=\{w_i\} W={wi}
在这里插入图片描述

如上图左所示,我们首先画一个以 v v v为圆心的单位圆,将 v v v 与各个多边形顶点连接的话,多边形每条边会对应到一段圆弧。

不失一般性,以 第一条边 p 1 p 2 p_1p_2 p1p2 对应的圆弧为例,我们将 v v v 指向这段圆弧上所有点的单位向量求和(积分)得到的向量 m 1 m_1 m1 称为均值向量(mean vector)。 m 1 m_1 m1 可以通过一组基 v p 1 = p 1 − v ,   v p 2 = p 2 − v vp_1=p_1-v,\ vp_2=p_2-v vp1=p1v, vp2=p2v 进一步表示为:

λ 1 1 ( p 1 − v ) + λ 1 2 ( p 2 − v ) = m 1 (2) \lambda^1_1(p_1-v) + \lambda^2_1(p_2-v) =m_1\tag2 λ11(p1v)+λ12(p2v)=m1(2)
其中, λ 1 1 \lambda^1_1 λ11 λ 1 2 \lambda^2_1 λ12 分别表示 m 1 m_1 m1 在这组基上的坐标值。另外,Floater曾在他的论文中给出了均值向量的表示形式:
Floater M S. Mean value coordinates[J]. Computer aided geometric design, 2003, 20(1): 19-27.

m 1 = tan ⁡ [ α / 2 ] ( ( p 1 − v ) ∣ p 1 − v ∣ + ( p 2 − v ) ∣ p 2 − v ∣ ) (3) m_1=\tan [\alpha / 2]\left(\frac{\left(p_{1}-v\right)}{\left|p_{1}-v\right|}+\frac{\left(p_{2}-v\right)}{\left|p_{2}-v\right|}\right)\tag3 m1=tan[α/2](p1v(p1v)+p2v(p2v))(3)

其中, α \alpha α 是向量 v p 1 , v p 2 vp_1,vp_2 vp1,vp2 之间的夹角。根据(2)(3),我们就可以直接得出:
λ 1 1 = t a n [ α / 2 ] ∣ p 1 − v ∣ ,      λ 1 2 = t a n [ α / 2 ] ∣ p 2 − v ∣ (4) \lambda^1_1 = \frac{tan[\alpha/2]}{|p_1-v|}, \ \ \ \ \lambda^2_1= \frac{tan[\alpha/2]}{|p_2-v|}\tag4 λ11=p1vtan[α/2],    λ12=p2vtan[α/2](4)

那么,我们怎么根据上式导出插值权重呢?继续往下看。

注意(2)式只是针对第一条线段 p 1 p 2 p_1p_2 p1p2 计算了均值向量 m 1 m_1 m1如果计算所有线段对应的均值向量,并对其求和,那么这些均值像之和为0向量。 相当于,圆心指向圆弧所有点构成的单位向量之和,必然为0,因为任意一个单位向量都存在一个方向相反的向量。也就是说:
{ λ 1 1 ( p 1 − v ) + λ 1 2 ( p 2 − v ) = m 1 λ 2 1 ( p 2 − v ) + λ 2 2 ( p 3 − v ) = m 2 . . . λ n 1 ( p n − v ) + λ n 2 ( p 1 − v ) = m n \left\{ \begin{aligned} \lambda^1_1(p_1-v) + \lambda^2_1(p_2-v) =m_1\\ \lambda^1_2(p_2-v) + \lambda^2_2(p_3-v) =m_2\\ ...\\ \lambda^1_n(p_n-v) + \lambda^2_n(p_1-v) =m_n\\ \end{aligned} \right. λ11(p1v)+λ12(p2v)=m1λ21(p2v)+λ22(p3v)=m2...λn1(pnv)+λn2(p1v)=mn

m 1 + m 2 + . . . + m n = 0 m_1 + m_2 + ... + m_n = 0 m1+m2+...+mn=0

上述任意一组 λ i 1 \lambda^1_i λi1, λ i 2 \lambda^2_i λi2均可通过(4)求解得到。因为任意 p i − v p_i - v piv 均出现两次(一个端点被两条边共享),因此重新整理上式为:
( λ 1 1 + λ n 2 ) ( p 1 − v ) + ( λ 1 2 + λ 2 1 ) ( p 2 − v ) + . . . + ( λ n − 1 2 + λ n 1 ) ( p n − v ) = 0 (5) ( \lambda^1_1 + \lambda^2_n)(p_1-v) + (\lambda^2_1+\lambda^1_2)(p_2-v)+...+(\lambda^2_{n-1}+\lambda^1_n)(p_n-v) = 0\tag5 (λ11+λn2)(p1v)+(λ12+λ21)(p2v)+...+(λn12+λn1)(pnv)=0(5)

我们令 k 1 = ( λ 1 1 + λ n 2 ) k_1 =(\lambda^1_1 + \lambda^2_n) k1=(λ11+λn2), k 2 = ( λ 1 2 + λ 2 1 ) k_2=(\lambda^2_1+\lambda^1_2) k2=(λ12+λ21),…, k n = ( λ n − 1 2 + λ n 1 ) k_n = (\lambda^2_{n-1}+\lambda^1_n) kn=(λn12+λn1), 上次可以进一步写为:
k 1 ( p 1 − v ) + k 2 ( p 2 − v ) + . . . + k n ( p n − v ) = 0 (6) k_1(p_1-v) +k_2(p_2-v)+...+k_n(p_n-v) = 0\tag6 k1(p1v)+k2(p2v)+...+kn(pnv)=0(6)

接下来,令 K = k 1 + k 2 + . . . + k n K = k_1+k_2+...+k_n K=k1+k2+...+kn, w 1 = k 1 / K , w 2 = k 2 / K , . . . w n = k n / K w_1=k_1/K, w_2=k_2/K, ... w_n=k_n/K w1=k1/K,w2=k2/K,...wn=kn/K, 上式可以进一步改写为:
w 1 ( p 1 − v ) + w 2 ( p 2 − v ) + . . . + w n ( p n − v ) = ∑ i = 1 n w i ( p i − v ) = 0 (7) w_1(p_1-v) +w_2(p_2-v)+...+w_n(p_n-v) = \sum^n_{i=1}w_i(p_i-v)=0\tag7 w1(p1v)+w2(p2v)+...+wn(pnv)=i=1nwi(piv)=0(7)

我们发现 (7)跟(1)完全等价,因为 ∑ i = 1 n w i = 1 \sum^n_{i=1}w_i = 1 i=1nwi=1, v = ∑ i = 1 n w i v v = \sum^n_{i=1}w_i v v=i=1nwiv。到此为止,我们得到了满足(1)式的插值权重也就是均值坐标。

三、3D多面体插值

在2D多边形中,我们通过将多边形投影到单位圆上求解均值坐标。容易想到,在3D多面体内部,我们可以将多面体投影到单位球来计算给定点的均值坐标。
在这里插入图片描述
如上图所示,我们将多面体投影到单位球面。如上图(3)所示,多面体上的任意三角面片对应单位球上的一个球面三角形,那么从 v v v 指向该球面三角形上所有点的单位向量的积分称为该球面三角形的均值向量 m m m。文中给出了这一向量的计算方式(证明明详见论文):
m = ∑ i = 1 3 1 2 θ i n i (8) m = \sum^3_{i=1}\frac{1}{2}\theta_in_i\tag8 m=i=1321θini(8)
接下来,通过上图(5)所示的示例进行讲解,其均值向量可以表示为:
m = 1 2 ( θ 1 n 1 + θ 2 n 2 + θ 3 n 3 ) (9) m=\frac{1}{2}(\theta_1n_1 + \theta_2n_2 + \theta_3n_3)\tag9 m=21(θ1n1+θ2n2+θ3n3)(9)
其中, θ 1 , θ 2 , θ 3 \theta_1,\theta_2,\theta_3 θ1,θ2,θ3 分别是 ( v p 2 , v p 3 ) , ( v p 1 , v p 3 ) , ( v p 1 , v p 2 ) (vp_2,vp_3), (vp_1,vp_3),(vp_1,vp_2) (vp2,vp3),(vp1,vp3),(vp1,vp2) 的夹角, n 1 , n 2 , n 3 n_1,n_2,n_3 n1,n2,n3 分别是 ( v p 2 p 3 ) , ( v p 1 p 3 ) , ( v p 1 p 2 ) (vp_2p_3), (vp_1p_3),(vp_1p_2) (vp2p3),(vp1p3),(vp1p2) 平面的法向。另一方面,球面三角形上的均值向量 m m m, 仍然可以通过一组基 ( v p 1 , v p 2 , v p 3 ) (vp_1,vp_2,vp_3) (vp1,vp2,vp3) 表示出来:
m = λ 1 ( p 1 − v ) + λ 2 ( p 2 − v ) + λ 3 ( p 3 − v ) (10) m =\lambda_1(p_1-v) + \lambda_2(p_2-v) + \lambda_3(p_3-v)\tag{10} m=λ1(p1v)+λ2(p2v)+λ3(p3v)(10)

如何求解上述 λ \lambda λ呢?因为 n 1 n_1 n1是平面 ( v p 2 p 3 ) (vp_2p_3) (vp2p3) 的法向量,所以 n 1 ⋅ ( p 2 − v ) = 0 n_1 \cdot (p_2-v) =0 n1(p2v)=0, n 1 ⋅ ( p 3 − v ) = 0 n_1 \cdot (p_3-v) =0 n1(p3v)=0,其它类似,那么有:
{ n 1 m = n 1 λ 1 ( p 1 − v ) + 0 + 0 n 2 m = 0 + n 2 λ 2 ( p 2 − v ) + 0 n 3 m = 0 + 0 + n 3 λ 3 ( p 3 − v ) \left\{ \begin{aligned} n_1m =n_1\lambda_1(p_1-v) + 0+0\\ n_2m =0+n_2\lambda_2(p_2-v)+0 \\ n_3m =0+0+n_3\lambda_3(p_3-v)\\ \end{aligned} \right. n1m=n1λ1(p1v)+0+0n2m=0+n2λ2(p2v)+0n3m=0+0+n3λ3(p3v)
所以:
{ λ 1 = n 1 m n 1 ( p 1 − v ) λ 2 = n 2 m n 2 ( p 2 − v ) λ 3 = n 3 m n 3 ( p 3 − v ) (11) \left\{ \begin{aligned} \lambda_1 =\frac{n_1m}{n_1(p_1-v)} \\ \\ \lambda_2 =\frac{n_2m}{n_2(p_2-v)} \\ \\ \lambda_3 =\frac{n_3m}{n_3(p_3-v)} \\ \end{aligned} \right.\tag{11} λ1=n1(p1v)n1mλ2=n2(p2v)n2mλ3=n3(p3v)n3m(11)

类似的,上式只是计算了多面体上一个三角面片对应的球面三角形的均值向量,以及对应的三个点的贡献。如果将所有三角面片投影到球面上,那么所有球面三角形的均值向量之和为0. 也就是:
∑ T = 1 n λ T 1 ( p T 1 − v ) + λ T 2 ( p T 2 − v ) + λ T 3 ( p T 3 − v ) = 0 (12) \sum^n_{T=1}\lambda^1_T(p^1_T-v) + \lambda^2_T(p^2_T-v) + \lambda^3_T(p^3_T-v) = 0\tag{12} T=1nλT1(pT1v)+λT2(pT2v)+λT3(pT3v)=0(12)
其中, T T T表示遍历多面体 P P P 的所有三角形, p T 1 , p T 2 , p T 3 p^1_T,p^2_T,p^3_T pT1,pT2,pT3 表示某个三角形 T T T 的3个顶点。上式 λ T 1 , λ T 2 , λ T 3 \lambda^1_T,\lambda^2_T,\lambda^3_T λT1,λT2,λT3 通过(11)式子计算。最后的最后,上式等价于:
∑ i = 1 n w i ( p i − v ) = 0 \sum^n_{i=1}w_i(p_i-v)=0 i=1nwi(piv)=0
这个过程跟2D的推导类似,最终归一化的权重 w i w_i wi 可以表示为:
w i = ∑ T ∈ N ( i ) ∑ j = 1 3 λ T j ⋅ ( p T i = = p i ) ∑ T = 1 n ( λ T 1 + λ T 2 + λ T 3 ) (13) w_i =\frac{\sum_{T \in N(i)}\sum^3_{j=1}\lambda^j_T \cdot(p^i_T==p_i)}{\sum^n_{T=1}(\lambda^1_T+\lambda^2_T+\lambda^3_T)}\tag{13} wi=T=1n(λT1+λT2+λT3)TN(i)j=13λTj(pTi==pi)(13)

也就是说,每个点的权重,跟所关联的所有三角形相关。 文中还有一些数值稳定性的优化方案,就不再描述。可以参看原文伪代码。

参考资料

[1] Floater M S. Mean value coordinates[J]. Computer aided geometric design, 2003, 20(1): 19-27.
[2] Tao Ju et al. Mean Value Coordinates for Closed Triangular Meshes
[3] 以及对应的slides: https://people.engr.tamu.edu/schaefer/teaching/689_Fall2006/talks/meanvalue.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/42921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于模糊RBF神经网络轨迹跟踪matlab程序

基于模糊RBF神经网络轨迹跟踪matlab程序 1 模糊RBF网络 在模糊系统中,模糊集、隶属函数和模糊规则的设计是建立在经验知识基础上的。这种设计方法存在很大的主观性。将学习机制引入到模糊系统中,使模糊系统能够通过不断学习来修改与完善隶属函数和模糊规…

天宇优配|前10月工业企业利润结构优化 稳增长望再发力

11月27日,国家统计局发布了最新规划以上工业企业效益状况。受国内疫情发出多发、工业出产者出厂价格同比由涨转降等要素影响, 1~10月,规划以上工业企业赢利同比下降3%, 且降幅较上月扩展。不过,部分中下游职…

一文理解Linux的基本指令(下)(三分钟学会Linux基本指令)

前言: 衔接上一篇文章,继续总结一下Linux操作系统的指令,不会有人认为Linux系统指令只有上篇文章那么多了吧,嘿嘿小马告诉你可不止这么多,而我这篇文章总结完,也只是我们所用的比价常用的,而还有…

基于ACO蚁群算法的tsp优化问题matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 “基本原理 蚁群算法(Ant Colony Optimization,ACO)是一种基于种群寻优的启发式搜索算法,有意大利学者M.Dorigo等人于1991年首先提出。该算 法受到自然界真实蚁群集体在觅食过程中行为的启发,利用…

国密浏览器介绍与下载

国密浏览器介绍与下载密信浏览器介绍支持操作系统下载地址奇安信可信浏览器(国密开发者专版)介绍支持操作系统下载地址红莲花安全浏览器介绍支持操作系统下载地址零信浏览器介绍支持操作系统下载地址360安全浏览器介绍支持操作系统下载地址密信浏览器 介…

DocuWare 文档管理系统Intelligent Indexing(智能索引)、 Forms(表单)和连接到Outlook 功能

一、DocuWare Intelligent Indexing(智能索引)功能 没有什么能像手动输入数据那样减慢流程的速度。键入数据速度慢、容易出错且无法有效扩展。对于生产力至关重要的组织,必须自动从扫描的文档、PDF 和其他文档中捕获关键数据字段。 数据从非…

国家自然科学基金委资助项目简介

国家自然科学基金委员会根据科技发展趋势和国家战略需求设立相应的项目类型,经过不断优化调整,形成了结构合理、功能完备的资助体系。 一、面上项目 简称:面上 面上项目支持从事基础研究的科学技术人员在科学基金资助范围内自主选题&#xf…

女性气虚胃寒怎么办 六招可祛寒补气

当外部环境发生变化时,人体内的血管也会收缩或放松。然而,当血管受到刺激时,会导致过度收缩,导致血液供应不足,人体会感到寒冷。然而,对于一些气虚的女性来说,她们的身体抵抗力相对较弱&#xf…

《谷歌眼镜》新书作者:眼镜需要成为AR的载体吗?

近10年前,谷歌推出了首款AR眼镜Google Glass,尽管这款产品并没有如预期般取得成功,但它为后续AR硬件技术的发展奠定了基础。我们知道,从微软HoloLens开始,AR头显/眼镜产品更侧重于B端应用,面向C端发售的很少…

创作者基金 11 月亮点

一个月又过去了,新一期创造者基金亮点要来了。这一次是平台游戏资产和民俗生物......我们精选了 2022 年 11 月的精华部分,一起来了解下。 这 20 个新资产已在 The Sandbox 市场平台发售。 NFT 系列介绍 一起先睹为快吧! 亚马逊怪物&#xff…

企业如何轻松做好软文推广?

在互联网飞速发展的背景下,信息的传播速度是惊人的。软文营销是数字营销的一部分,涉及在线创建和共享有价值的内容以吸引、吸引和转换客户并增加网站流量。这可以包括文章、视频、图片等。软文营销是推动销售的关键因素,因为它有助于与潜在买…

进程与信号(二)

目录 一、前言 二、Starting New Processes 1、system1.c 2、Front Contents (1)Replacing a Process Image(更换进程镜像) (2)pexec.c (3)Duplicating a Process Image&…

55 - 经典问题解析四(动态内存分配虚函数继承中的强制类型转换)

---- 整理自狄泰软件唐佐林老师课程 1. 关于动态内存分配 new和malloc的区别是什么? delete和free的区别又是什么? 1.1 问题一:new和malloc的区别 1.1.1 new关键字和malloc函数的区别 new关键字是C的一部分malloc是由C库函数提供的函数ne…

哈希表题目:有效的数独

文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目 标题和出处 标题:有效的数独 出处:36. 有效的数独 难度 2 级 题目描述 要求 请你判断一个 99\texttt{9} \times \texttt{9}99 的数独是否有效。只需要根据…

华为22级专家十年心血终成云原生服务网格进阶实战文档,是真的6

前言 有人调侃我们说: 程序员不如送外卖。送外卖是搬运食物,自己是搬运代码,都不产出新的东西……透支体力,又消耗健康,可替代性极强,30岁之后就要面临被优化的危险……想跳槽,但是更高的平台…

如何翻译语音?分享几个翻译语音的方法

不知道大家在上外教的课时,会不会听不懂老师的讲话内容。一般外教老师的口语都是比较规范的,语速还很快,所以我们听不懂他们的讲话也是正常的,不过我们可以借助一些翻译工具来进行语音实时翻译,这样我们就不用担心听不…

Eolink征文活动---Eolink API文档服务的天才产品

实际上我并不是因为这次活动才知道Eolink,早在几年前,我就成为了Eolink的使用者,所以,这次征文活动我势在必行!本篇文章将会围绕我如何利用Eolink去解决项目问题进行展开讨论,大致分为以下内容:…

超融合和虚拟化的区别

超融合基础架构(daoHyper-Converged Infrastructure,或简称“HCI”)也被称为超融合架构,如今超融合逐渐成长为目前企业构建软件定义数据中心,乃至未来实现混合云管理架构中一个重要的基础设施支撑平台。那么超融合和虚拟化的区别在哪儿?最重…

K8s 1.23.6版本部署:kubelet-1.23.6+kube-proxy-1.17.6

文章目录前言一、版本环境信息二、服务部署1.基础环境准备2.docker 服务部署,3.k8s服务部署3.1 安装k8s服务,3.2 修改配置文件3.3 执行初始化4.网络插件安装-calico5.dashboard插件安装卸载服务总结前言 K8s 1.23.6版本部署:kubelet-1.23.6kube-proxy-1…

TCP/IP网络编程:P6->基于UDP的服务器端/客户端

本系列文章为《TCP/IP网络编程----尹圣雨》学习笔记,前面的系列文章链接如下 TCP/IP网络编程:P1->理解网络编程和套接字 TCP/IP网络编程:P2->套接字类型与协议设置 TCP/IP网络编程:P3->地址族与…