平面点云三角化边数与点的关系

欢迎关注更多精彩
关注我,学习常用算法与数据结构,一题多解,降维打击。

点云三角化定义

原文
在这里插入图片描述
说人话:
一个二维平面点集P三角化结果是一个满足以下条件的三角形集合:
1 所有三角形的并集刚好是P的凸包。
2 所有三角形顶集的并集正好是P。
3 对于三角化中任意两个三角形,要么有一个公共点(在P中),要么有一条公共边,否则完全不相接。

下图是一个三角化
在这里插入图片描述

根据上述定义可出三角化的一些基本性质:
1 三角化的外壳是一个凸包。
2 三角化中所有边没有相交(定义3可以保证)
3 三角化结果是一个平面图(planar graph)

三角化边数与点数的关系

在这里插入图片描述
引理:对于一个有n个点的二维点集P的任意三角化,正好有3n-h-3条边,h是P的凸包边界的边数。

在这里插入图片描述
以上图为例,点数一共是n=10, 凸包上边数h = 6, 总边数 e = 21
满足 e= 3*10-6-3

面的数量

对上述用例,如果只计算三角面12个面。

如果是一般的面,那么是13个面(外面的无限面也算一个)。

可以理解为一开始什么都没有的时候,是一个无限大的平面,计数为1。

当在平面上加入点并进行三角剖分时,总面数就是三角面数再加1。

最外围的无限面的边就是凸包的边。

在这里插入图片描述
上图中由橙色线转成的红色虚线区域就是一个往外无限扩张的无限面。与内部三角面一起组成了整个平面。

这种形式的划分以下称为大平面划分。

证明

设T是根据P三角化对大平面的划分。

设E为划分T的所有边集合,F为划分T的面集合(包含外围的无限面)。

在半边数据结构中,一条边是被两个面共享。

接下来我们用不同方式表示半边的数量,计算出边与面的关系,再结合欧拉公式证明命题。

半边集合 J = { ( e , f ) ∈ E × F , e 是某一条边 , f 是某个面 } 半边集合 J = \{(e,f)\in E \times F, e是某一条边, f是某个面\} 半边集合J={(e,f)E×F,e是某一条边,f是某个面}

一条边会被与该边相接的两个面共享,生成2个半边,那么 |J| = 2*|E|.

同时,从面的角度来计算半边,一个三角面会有3个半边(一共有|F|-1个三角面),最外边无限半边数量就是凸包边数(h)。

那么 |J| = 3*(|F|-1)+h。

组合一下就是 2*|E| = 3*(|F|-1)+h。

又根据欧拉公式有 3n - 3|E| + 3|F| = 6。

结合一下,得到|E|=3n -h -3。

命题得证。


本人码农,希望通过自己的分享,让大家更容易学懂计算机知识。创作不易,帮忙点击公众号的链接。

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

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

相关文章

反向代理和负载均衡

目录 步骤1 代理技术介绍 代理技术常见的类型 正向代理的用途 反向代理的作用 步骤2 反向代理配置 步骤3 负载均衡 1、路由模式(推荐) 2、桥接模式 3、服务直接返回模式 4、负载均衡算法介绍 1、轮询法 2、随机法 3、最小连接法 步骤4 nginx…

客户在哪儿AI——做真正管用的大客户获客方案

我们的目标是要打造一个真正“管用”的ToB大客户获客方案。以下是两个100%真实的案例,所有数据均为真实经营数据。一个是证明客户在哪儿AI对市场工作的颠覆性提升,另一个是证明客户在哪儿AI对决策层和销售工作的颠覆性提升。 客户在哪儿AI生产的是企业全…

唉~~量化策略越改越差了

最近收到藏经阁群友私信,问能不能在最近发布的轮动策略当中加入持仓时间的限制条件,买入某个ETF后,必须持有够7天才可以卖出。 其目的有二,第一是想减少市场杂音,减少不必要的交易,第二就是如果场外操作的话…

【JavaScript】详解Day.js:轻量级日期处理库的全面指南

文章目录 一、Day.js简介1. 什么是Day.js?2. 安装Day.js 二、Day.js的基本用法1. 创建日期对象2. 格式化日期3. 解析日期字符串4. 操作日期5. 比较日期 三、Day.js的高级功能1. 插件机制2. 国际化支持 四、实际应用案例1. 事件倒计时2. 日历应用 在JavaScript开发中…

Qt背景与环境搭建

目录 ​编辑 一、Qt背景 1.行业岗位介绍 2.什么是Qt 3.Qt的发展史 4.Qt支持的平台 5.Qt的版本和优点 5.1 版本 5.2 优点 6.Qt的应用场景 7.Qt 的成功案例 8.Qt 发展前景 二、环境搭建 1.Qt 的开发工具概述 2.Qt SDK 的下载和安装 2.1 Qt SDK 的下载 ​编辑 2…

Ascend算子开发

Device侧 1. 存储API 1.1 GlobalTensor 1.2 LocalTensor 可获取、设置值、获取大小。页可以通过[]获取 1.3 数据类型 2. Add样例 数据搬入:DataCopy调用计算接口:Add数据搬出:LocalTensor、EnQue、DeQue 2.1 核函数定义 x、y输入&#xff…

『 Linux 』线程概念

文章目录 什么是线程执行流线程与进程的关系页表构造及线程资源分配线程的轻量化线程的特点 什么是线程 线程本质上是进程的一个执行分支,用于处理进程中的代码和数据; 每个线程都可以执行独立不同的代码片段,这意味着在一个进程中可以同时执行多个任务; 同一个进程中的所有线程…

基于微信小程序+SpringBoot+Vue的社区超市管理系统(带1w+文档)

基于微信小程序SpringBootVue的社区超市管理系统(带1w文档) 基于微信小程序SpringBootVue的社区超市管理系统(带1w文档) 为了让商品信息的管理模式进行升级,也为了更好的维护商品信息,社区超市管理系统的开发运用就显得很有必要,因为它不仅可…

全球奈拉滨市场规模预测:未来六年年复合增长率CAGR为1.1%

据恒州诚思研究,2023年全球奈拉滨市场规模大约为3.8亿元,预计未来六年年复合增长率CAGR为1.1%,到2030年市场规模将接近4.2亿元。这一增长反映了奈拉滨在全球医药行业中的重要性及其在未来发展中的潜在机会。随着科学的进一步发展和市场的扩展…

全网最详细Gradio教程系列5——Gradio Client: curl

全网最详细Gradio教程系列5——Gradio Client: curl 前言本篇摘要5. Gradio Client的三种使用方式5.3 Curl查询Gradio Apps5.3.1 安装5.3.2 获取Gradio程序的URL5.3.3 HF_TOKEN和身份认证1. POST/GET示例2. 整合命令:awk和read3. HF_TOKEN4. 身份认证 5.3.4 POST&am…

21 Python常用内置函数——zip()

zip() 函数用来把多个可迭代对象中的元素压缩到一起,返回一个可迭代的 zip 对象,其中每个元素都是包含原来的多个可迭代对象对应位置上元素的元组,最终结果中包含的元素个数取决于所有参数序列或可迭代对象中最短的那个。 可以这样理解这个函…

WPF启动失败报System.Windows.Automation.Peers.AutomationPeer.Initialize()错误解决

问题描述 win10系统上WPF程序启动后就崩溃,通过查看崩溃日志如下: 应用程序: xxx.exe Framework 版本: v4.0.30319 说明: 由于未经处理的异常,进程终止。 异常信息: System.TypeLoadException 在 System.Windows.Automation.Peers.Automatio…

强者具备的三个思维

强者具备的三个思维,看看你占了几条? 一、不看自己需要什么,而是看环境和别人需要什么。满足他们,你就能把事情做成。 二、不追求稳定,而是享受不稳定。稳定的工作和生活,并不意味着你的技能已经娴熟。而…

SpringBoot上传超大文件导致Cannot read more than 2,147,483,647 into a byte array,问题解决办法

问题描述 报错: java.lang.IllegalArgumentException: Cannot read more than 2,147,483,647 into a byte array at org.apache.commons.io.IOUtils.lambda$toByteArray$0(IOUtils.java:2403) ~[commons-io-2.11.0.jar:2.11.0] at org.apache.commons.io.output.Thre…

C++学习日记 | LAB 10 运算符重载与友元函数

资料来源&#xff1a;南科大 于仕琪 C/C Program Design LINK&#xff1a;CPP/week10 at main ShiqiYu/CPP GitHub 一、本节内容 本节首先以一个例子具体演示和回顾操作符重载、友元函数以及重载<<操作符。习题部分则为各种运算符重载以及输入输出重载 1.1 Operator o…

支持向量机回归及其应用(附Python 案例代码)

使用支持向量机回归估计房价 让我们看看如何使用支持向量机&#xff08;SVM&#xff09;的概念构建一个回归器来估计房价。我们将使用sklearn中提供的数据集&#xff0c;其中每个数据点由13个属性定义。我们的目标是根据这些属性估计房价。 引言 支持向量回归&#xff08;SV…

WHAT - 一个 Github 仓库的 License 如何解读

目录 一、背景二、解读许可证说明的作用常见的开源许可证类型使用他人代码仓库时需要注意的事项结论 实践作为开发者1. 选择许可证类型2. 在 README 文件中编写许可证信息 作为使用者1. 确定权限2. 了解和遵守条款 总结 一、背景 我们经常在一些 Github 仓库里看到 License 部…

Cache 替换策略--PLRU算法详解

一、引言 LRU&#xff08;Least Recently Used&#xff09;是 cache 的经典替换策略之一&#xff0c;但当 Cache 的路数比较大时&#xff08;多路组相连结构&#xff09;&#xff0c;实现 LRU 的硬件开销就会变得很大。现代处理器一般会考虑使用 PLRU&#xff08;pseudo-LRU&a…

Vue.js 2 项目实战(八):小黑记事本组件版

前言 Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。它的设计初衷是通过采用简洁且强大的结构&#xff0c;使前端开发变得更简单和高效。以下是对 Vue.js 的详细介绍&#xff1a; 核心特性 声明式渲染 Vue.js 使用声明式语法来描述用户界面&#xff0c;通过数据绑…

用Swagger进行后端接口测试的实战操作

目录 一.什么是Swagger&#xff1f; 二.Swagger的使用操作流程&#xff1a; 1.在pom.xml配置文件导入 Knife4j 的依赖&#xff1a; 2.在config配置类中加入 Knife4j 的相关配置并设置静态资源映射&#xff08;否则接口文档无法访问&#xff09;&#xff1a; 三.Swagger的四个…