Surface curvature

在介绍曲面曲率之前,我们必须引入微分几何的一些基本概念。

如下图所示,$\mathbb{R}^3$空间中的一个连续曲面可以表示为由一个$\mathbb{R}^2$区域$M$通过映射函数$f:M\to\mathbb{R}^3$到$\mathbb{R}^3$中的一个集合,即$f(M)$。其中,$df(X)$为平面上向量$X$在曲面上的映射,也即为$f(M)$在点$p$处的一个切向量。

如果曲面点$p$处的某一向量$u$对点$p$处所有的切向量都满足

\[ df(X) \cdot u = 0 \]

则称$u$为曲面在点$p$处的法向量。

考虑由切向量$d(X)$和单位法向量$N$所构成的平面(下图淡蓝色平面),其与$f(M)$的交集为一平面曲线$c$,我们称$c$在$p$点处的曲率$\kappa_n(X)$为曲面沿方向$X$的normal curvature

设曲线$c$在$p$点处的曲率值为$\kappa n$,$\kappa_n(X)$即为

\[\kappa_n(X)=N \cdot \kappa n \]

考虑到,

\[ \kappa n = \frac{dT}{d\ell}=\frac{dT}{dt}\frac{dt}{d\ell} \]

其中,$T=\frac{df(X)}{\| df(X) \|}$为单位切向量,$d\ell$是对曲线$c$弧长的微分。由于$\frac{d\ell}{dt}$也可以用$\| df(X) \|$来表示,因此可以得到:

\[
\begin{align}
\|df(X)\|\kappa_n &= N \cdot \frac{dT}{dt} \\
                  &= N \cdot \frac{d}{dt}\left(df(X)\|df(X)\|^{-1}\right) \\
                  &= N \cdot \left( \frac{d}{dt}(df(X) \right)
                     \|df(X)\|^{-1} + \underbrace{N \cdot df(X)}_{=0}\left(\frac{d}{dt}\|df(X)\|^{-1}\right)
\end{align}
\]

由于$N \cdot df(X) = 0$,对两边求导,可知$N \cdot (df(X))‘ = -dN(X) \cdot df(X)$,因此可得:

\[
\begin{align}
\| df(X) \|\kappa_n &= N \cdot \frac{(df(X))‘}{\|df(X)\|} \\
                    &= N \cdot \frac{-dN(X) \cdot df(X)}{\|df(X)\|}
\end{align}
\]

\[ \kappa_n=\frac{-dN(X) \cdot df(X)}{\|df(X)\|^2} \]

此即为曲面的曲率方程。

我们称能使得上式中取得最大值和最小值的向量$X_1$和$X_2$为principal directions,而相对应的曲率称为最大主曲率$\kappa_1$和最小主曲率$\kappa_2$,即

\[ \kappa_1=\max_X\kappa_n(X) \]

\[ \kappa_2=\min_X\kappa_n(X) \]

根据Euler定理(1760)可知,若$\kappa_1 \neq \kappa_2$则$X_1$正交于$X_2$。一般地,任一与$X_1$的夹角为$\theta$的单位向量$Y$,其normal curvature可以表示为:

\[ \kappa_n(Y)=\kappa_1 \cos^2\theta + \kappa_2 \sin^2\theta \]

而平均曲率(mean curvature)$H$即为主曲率的算数均值:

\[ H=\frac{\kappa_1+\kappa_2}{2} \]

高斯曲率(Gaussian curvature)$K$为主曲率几何均值的平方:

\[ K=\kappa_1\kappa_2 \]

一些例子:

\[ \kappa_1>0,\kappa_2=0,H>0,K=0 \]

\[ \kappa_1>0,\kappa_2<0,\kappa_1=-\kappa_2,H=0,K<0 \]

\[ \kappa_1>0,\kappa_2>0,H>0,K>0 \]

参考资料及图片来源:

Keenan Crane, de Goes, Fernando, et al. "Digital geometry processing with discrete exterior calculus." ACM SIGGRAPH 2013 Courses. ACM, 2013.

时间: 2024-10-11 11:51:06

Surface curvature的相关文章

Surface Shader

SurfaceOutput: input: lighting:光照 shadow:阴影 属性声明类型对应关系: Simpler2D-2D half-Rang fixed4-4元向量 Tags {"RenderType"="Opaque"} 描述一种渲染类型,Opaque:不透明的物体 LOD 200 :层级细节 CGPROGRAM 开始 ENDCG 结束 CG语法,表示CG语言程序片段 pragma 语法: surface :surface shader关键字 su

Surface Pro 3 扩展坞体验

Surface Pro 3 的确是Microsoft的诚意之作,虽然价格不便宜,但值得入手. 买完Surface Pro 3 后,没事在某网站上闲逛,这货(扩展坞)映入我的眼帘,看完后,心想,这货必须的有啊,所以没事别总在电商上瞎逛,容易剁手. 后来在TB上买的,价格能比官方便宜些,应该是在日本发售的,盒子上都是日文,但东西都是一样的. 总体感觉是,它给Surface Pro 3 赋予了台式机的感觉,扩展性增加不少,做工优良,给我唯一的遗憾是,角度不可调节.但毕竟瑕不掩瑜. 话不多说,直接上图.

Unity Surface Shader 示例分析

对于Unity中的表面着色器(Surface Shader),它的代码整体结构如下所示: Shader "name" { Properties { // 第一部分 } SubShader { // 第二部分 } Fallback "Diffuse" // 第三部分 } 第一部分 Properties 数据块 它的作用是充当数据的接口,将外部的数据(资源)引入进来,以供着色器内部使用.在这里,我们可以定义的数据类型如下所示: (1) _MainTex ( "

【Unity Shaders】初探Surface Shader背后的机制

转载请注明出处:http://blog.csdn.net/candycat1992/article/details/39994049 写在前面 一直以来,Unity Surface Shader背后的机制一直是刚開始学习的人为之困惑的地方. Unity Surface Shader在Unity 3.0的时候被开放给公众使用.其宣传手段也是号称让所有人都能够轻松地写shader.但因为资料缺乏,非常多人知其然不知其所以然,无法理解Unity Surface Shader在背后为我们做了哪些事情.

解决Surface CPU/Memory占用太高问题

已经N久N久没有码文了,趁着今天不加班,仔细回想了走过的这一年,貌似有的只是加班.重复的加班.重复重复的加班,难得有闲暇的时间去整理一下日常相关的排错及工作中相关的经验技巧等,甚是惋惜:在我所认为的技术过往中,我更希望每个阶段都留下些什么,或许这是一种习惯.亦或是另外一种生活方式---- 因为工作原因,开始接触苏菲,但是刚开始使用的时候被她霸道的CPU及内存占用彻底惊呆了,今天简单讨论一下Surface pro4 CPU占用高的问题: 配置及日常CPU占用如下: 网上常见的处理方法是: 1.每次

Android Surface理解

结合别人的博客和自己看的代码,梳理下自己对surface的理解 1.代码相关文件 /AOSP/frameworks/native/libs/ui 主要是bufferqueuecore与surfaceflinger中分配 /AOSP/frameworks/native/libs/gui Android.mk                   IGraphicBufferAlloc.cpp BitTube.cpp                  IGraphicBufferConsumer.cp

android6.0 Activity(四) Surface创建

 原文:http://blog.csdn.net/luoshengyang/article/details/8303098,原文代码比较老了,但是核心不变.在原文基础上修改了一些代码,以及加入自己少量的理解. 在上一篇博客中,我们分析了应用程序窗口连接到WindowManagerService服务的过程.在这个过程中,WindowManagerService服务会为应用程序窗口创建过一个到SurfaceFlinger服务的连接.有了这个连接之后,WindowManagerService服务就

微软发布补丁封杀允许Surface RT安装Linux的“漏洞”

关于Linux的学习,请参考书籍<Linux就该这么学> 2012年诞生的Surface RT平板机就产品而言挺悲剧的,基于ARM架构跑Windows RT操作系统,但是不兼容x86环境,导致产品和市场定位混乱,消费者也很迷茫,最终在经历了两代之后就回到了x86平台,Windows RT操作系统也被彻底放弃. 但是,微软对 Surface RT 还是挺关照的,至今都在不断发布安全维护补丁,最新的一个“MS16-094(3172727)”;还悄然修复了一个几乎从未有人知晓的“漏洞”,根据官方说明

Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的关系

一.Surface Surface就是“表面”的意思.在SDK的文档中,对Surface的描述是这样的:“Handle onto a raw buffer that is being managed by the screen compositor”,翻译成中文就是“由屏幕显示内容合成器(screen compositor)所管理的原生缓冲器的句柄”,这句话包括下面两个意思: 1.      通过Surface(因为Surface是句柄)就可以获得原生缓冲器以及其中的内容.就像在C语言中,可以通