几何学中的欧拉公式:V-E+F = 2
几何学中的欧拉公式:V-E+F = 2,V、E、F表示简单几何体的顶点数、边数、面数。
证明:
它的证明有多种,这里呈现一种递归证法。
对于任意简单几何体(几何体的边界不是曲线),我们考察这个几何体的每个面,设这个边成一个n边形,我们从某个固定顶点开始连接其其他各个顶点,即将这个n边形从某个顶点进行了三角剖分,我们假想每个三角形是一个面(因为实际上多个三角形共面),那么能够看到,这个过程中E和F的增量是相同的,因此如果原来的几何体满足V-E+F = 2,则现在这个几何体(视每个三角形为一个面)仍然满足欧拉公式。
我们随机去掉一个面,则剖分后的几何体应满足V-E+F = 1.
现在我们考察这个去掉一个面之后被三角形剖分的几何体,对于某个三角形,考察它的三个边(每条边都是被两个三角形共享),会有如下的三种情况:
(1)一个边所在的另一个三角形的那个面是空的。
(2)两个边所在的另一个三角形的那个面是空的。
(3)三个边所在的另一个三角形的那个面是空的。
那么下面我们开始一个“掏空过程”,为了分析的方便,我们不在一片没有被“掏空”的区域的内部去“掏空”某个三角形,直到最终剩余一个三角形,即我们避免了第三种情况。
面临情况(1),我们掏空这个三角形,发现边数、面数各减1,V-E+F的值将不发生变化。
面临情况(2),我们掏空这个三角形,我们发现会出现两种情况,分为顶点数减1和不变的情况(想象一下),我们非常喜欢前面这种情况,因为这使得边数减2、顶点减1、面数减1,这会使得V-E+F不变,这十分有利于我们继续进行递归的等价转化。
那么如何应对这种情况呢?还记得我们一开始随机掏空的那个三角形么,容易看到它必然由三个三角形围起来,即分享这个被掏空的三角形的三个边的三角形,我们标号为1、2、3,而这三个三角形中间势必会夹着三个三角形,我们记为4、5、6,我们采取的策略是先掏空1、2、3,然后掏空4、5、6,这样将会保证V-E+F不变,同时我们将1、2、3、4、5、6视为第一层“堡垒”,对于第二层,想一想,是否也是相同的状况(掏空4、5、6又会得到三个情况(1)中的三角形)?这就保证了我们递归的正确性。(这里不需要考虑三角形个数余6的结果,因为这种自上而下的“掏空过程”将会杜绝情况(2)的第二种情况)
那么让我们来看看递归的最终状态,对于一个三角形,V = 3 、 F =1 、 E = 3 ,显然有V-E+F = 1,然后回溯到先前的所有状态,可知对于任意的简单几何体,有欧拉公式成立:
V-E+F = 2.
证毕。
补充:笔者今天复习离散刚好看到了该欧拉公式在平面图中的推广形式,在这里做出补充。
通常有资料认为将几何体直接映射到平面上即可完成等价转化,但个人认为这并不严谨,主要针对弧线。
定理:设G为任意的连通的平面图,则v-e+f=2,v是G的顶点数,e是G的边数,f是G的面数。
证明:其实有点类似几何学中的欧拉公式的证明方法,这里采用归纳证明的方法。
对m进行归纳,当m = 0,显然成立。
假设边数e' = e-1时成立,即有v'-e'+f'=2.考察参数为v、e、f的G图,如果存在悬挂点v1,去掉v1,则有e' = e - 1,f=f',v' = v - 1,带入之前的假设,整理得:
v-e+f=2.
而如果G中没有悬挂点,我们去掉回路中的某个边,采取类似的思路,同样可以整理出欧拉公式。
证毕。
几何学中的欧拉公式:V-E+F = 2的更多相关文章
- [编程语言][java][java se]java泛型中? T K V E含义(学习)
? 表示不确定的java类型,类型是未知的. T 表示java类型. K V 分别代表java键值中的Key Value. E 代表Element,特性是枚举. 1.意思 jdk中的K,V, ...
- 统计字符串中每种字符出现的评率(HashMap中getOrDefault(K, V)方法的使用)
为了统计字符串中每种字符出现的频率,使用HashMap这种数据结构.其中,字符作为Key,出现的频率作为Value. 基本算法为: 1. 将字符串分成字符数组 2. (1)如果HashMap中的Key ...
- 操作系统中的P,V操作(转)
无论是计算机考研.计算机软件水平考试.计算机操作系统期末考试还是其他计算机岗位考试,P.V原语操作都是一个常考点.下面笔者总结了关于P.V操作的一些知识. 信号量是最早出现的用来解决进程同步与互斥问题 ...
- grep -v|grep -F
cat a cat b #取b中不含1的行 b #b先和a比较,两者交集与b再取交集 b: b: b: b: b: b:22 $ grep -F a -f a b#a先和a比较,两者交集与b再取交集 ...
- ORACLE中dba,user,v$等开头的常用表和视图
一.Oracle表明细及说明1.dba_开头表 dba_users 数据库用户信息 dba_segments 表段信息 dba_extents ...
- django 中的聚合和分组 F查询 Q查询 事务cookies和sessions 066
1 聚合和分组 聚合:对一些数据进行整理分析 进而得到结果(mysql中的聚合函数) 1aggregate(*args,**kwargs) : 通过对QuerySet进行计算 ,返回一个聚合值的字典. ...
- Linux中的System V信号量
在进程同步,并发运行时,保证按序地访问共享资源是十分重要的.因此引入了临界区的概念,一次只能有一个线程进入临界区完成他的指令.而信号量(semaphore)的作用,类似于一个交通信号灯,它负责进程协作 ...
- Spring MVC中的M V C
M→Model 模型 V→View 视图 C→Controller 控制器 也就是说一次交互由生到死(请求到相应) 需要经过 这三个层级 来完成 那么为什么这么设计 这么设计又有什么好处 我是这么认为 ...
- 用c#中的WebBrowser抢小米F码,抢小米手机以及自动测试实现原理
首先是用c#中的WebBrowser控件打开登录网页,很简单,拖拽WebBrowser到Form上,然后给它的Url属性赋值.WebBrowser就会自动navigate to 这个网页. WebBr ...
随机推荐
- Java EE的十三种核心技术
1. JDBC: Java Database Connectivity 2. JNDI: Java Name and Directory Interface 3. EJB: Enterprise Ja ...
- JDK小技巧
鉴于这段时间重新拾起Android,电脑上又是一大堆不同JDK版本的项目.来回切换JDK环境也够折磨人的. 不同版本JDK切换之后,java -version命令仍然显示的是之前的JDK版本,重启电脑 ...
- 安装Fedora(附镜像下载地址)
近期又试着装了一遍Fedora,强迫症迫使我写一些简单的教程,方便以后有用 先把VM配置好,然后进入Fedora 点击Skip 这几按照提示一步一步来 选个人桌面 手工分区 分区的时候注意下每个区的容 ...
- Android中Application全局方法(变量)的调用
Application和Actovotu,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象,用来存储系统的一些信息.通常我们是 ...
- SQL Server 存储过程分页
每每面试,总会有公司问到分页.在下不才,在这里写几种分页,望路过的各位大神尽情拍砖. 先从创建数据库说起.源码如下 一.创建数据库 /********************************* ...
- c - 计算1到20的阶乘
#include <stdio.h> /* 题目:求 1+2!+3!+...+20!的和 */ unsigned long long int factorial(long n) { uns ...
- web前端对上传的文件进行类型大小判断的js自定义函数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- IDEA中添加各种依赖pom.xml文件内容
刚实习的小白,今天准备进入项目,纳尼,前辈把框架什么的都搭建好了,默默的抹了一把辛酸泪,刚刚接触自学框架的时候,添加依赖的时候总是各种问题,让前辈发给我之后,才发现人家写的代码相当优美了.下面就是前辈 ...
- Qt中widget重新setParent需要注意的问题
有时候需要在widget中重新setParent,但会发现setParent有时候会出现问题,比如子窗口不在刷出来等等. 其实,有一点是需要注意的,就是Qt文档里说的,如果你当前widget重新设置了 ...
- mongoDB之用户及权限设置
之前用MongoDB没有设置用户和权限,一直都是本机应用程序连接MongoDB.在服务器上部署后对外没有开数据库连接端口,本机应用程序连接再开放应用程序端口供外部访问. 我部署的环境是ubuntu 1 ...