计算机图形学论文 | 多边形中的点可见性快速算法
🦌🦌🦌读论文
🐨🐨摘要
针对点的可见性计算这一计算几何中的基础问题,提出一种支持任意查询点的可见多边形快速计算的基于多边形Voronoi图的点可见性算法。以与Voronoi骨架路径对应的Voronoi通道概念,以及相应的局部最短路径概念为基础,按照深度优先策略对Voronoi图进行遍历,在计算Voronoi骨架路径的同时计算局部最短路径,并基于局部最短路径计算所遍历的多边形边的可见部分。该算法可以处理“带洞”多边形,而且只对多边形进行局部访问:对于“带洞”多边形,由于该算法的数据结构比较简单、剖分空间合理且易于实现,因此仅需O(n)空间和O(n log n)预处理时间,最后给出了在三维室内虚拟场景设计与漫游系统中的应用实例,结果表明文中算法是实际可行,且运行时间与点的可见多边形的边数和多边形的边数均呈线性关系。
🐨🐨相关工作
🐼点的可见性计算
对于点可见多边形计算问题,计算几何领域有很多相关的工作。点的可见性计算是最基础的问题,其典型应用包括艺术画廊中的警卫间问题、机械模型浇注、无线传感网络中的覆盖问题等。在计算机图形学、计算机游戏和虚拟现实等领域,其作为实时绘制中的一种关键技术,根据视点的位置计算可见区域,并将可见区域中的对象加入图形绘制流水线,提高绘制效率。
🐼简单多边形的可见性算法
对于简单多边形,文献[16]提出了一种基于三角化的点的可见多边形算法,它首先对简单多边形进行三角化,并基于三角化的结果构造查询点的最短路径树,然后基于该最短路径树计算多边形的每条边相对于查询点的可见部分,最后得到点的可见多边形,算法时间复杂度为O(n)。
🐼“带洞”多边形的可见性算法
近年来,又出现了一些基于可见区域分割或可见图计算“带洞”多边形中点的可见多边形的算法。这些算法的数据结构一般比较复杂且构造方法较困难,消耗较多的预处理时间和空间。
🐨🐨相关概念
🐼多边形Voronoi图
一种将平面划分为多个区域的方式,其中每个区域对应于一个特定的点集合(称为“种子”或“站点”)。在Voronoi图中,平面上的每一点都被分配到离它最近的种子所在的区域。
- 每个Voronoi单元(区域)包含所有距离该种子点最近的点。
- Voronoi边界是种子点之间的垂直平分线。
简单多边形的Voronoi图是一棵树,其叶节点是多边形的顶点;“带洞”多边形的Voronoi图是一个图,其中度数为1的节点为多边形的顶点。
🐼简单多边形vs带洞多边形
简单:只有一条边界的多边形;
带洞:多条边界,外边界顺时针,内边界逆时针
🐼站点o
多边形中的凹顶点或边
🐼站点的voronoi区域VR
多边形P中到o的距离比到其他任意站点距离都近的点的集合
🐼多边形P的voronoi图VD
P中所有站点的VR的并集
🐼voronoi的骨架路径VSP(q,pi)
多边形P中的一个点q到P的一个顶点p的Voronoi骨架路径(Voronoi Skeleton Path, VSP)是一条由系列Voronoi边首尾依次连接而成的路径,用VSP(q, p)表示,如图中粗虚线所示。
🐼边的关联VR
如果边e被两个VR(p1、p2)所共有,则这俩VR就是边e的关联VR,p1和p2是e的关联边;设点a为e的起点,b为e的终点,那么定义有向边ab,若p1在ab左侧,则称p1为ab的左侧关联边,否则是右侧关联边
🐼VSP对应的voronoi通道C
骨架路径的每条边所关联的两边的voronoi区域形成的通道,如上图阴影区域所示。
🐼局部最短路径SP
将VSP看作绳子,将其用力拉紧(变成直线),可以得到在该通道中的一条最短路径,称之为局部最短路径,如上图中拉紧后的虚线所示。
在带洞多边形中,q到pi存在多个voronoi通道,因此存在多个局部最短路径。
🐨🐨算法描述
🐼任意两点间的最短路径算法基本思想
在简单多边形中任意两点间只存在一条voronoi骨架路径,最短路径上的点能够通过顺序遍历其voronoi骨架路径关联的多边形顶点求得。
🐼确定最短路径的算法步骤
1. 确定两点所在的voronoi区域
2. 确定voronoi骨架路径
3. 顺序遍历voronoi骨架路径确定最短路径
🐼算法概述
本节首先讨论多边形内计算一条边相对于给定查询点的可见部分的计算算法。充分性,由引理1知,SP(q, p)上的点为VSP(q, p)所关联的凹顶点,如果只用VSP(q, p)的左侧关联凹顶点计算SP(q, p),则SP(q, p)为VSP(q, p)的左侧关联凹顶点的凸多边形链L_CP。
🐼引理与定理
引理1和引理2为算法提供了理论基础,定理1给出了边的可见部分的计算方法,定理2给出了沿VD(P)进行深度遍历的终止条件。
🐼算法步骤
算法1详细描述了计算点的可见多边形的过程,包括判断q所在的Voronoi区域、计算VSP和SP、计算对于q的可见部分等步骤。
🐼存在可见部分
q到pi的局部最短路径SP是一条在P内的多边形链且在qpi的右侧;且q到pi+1的局部最短路径SP也是一条在P内的凸多边形链且在qpi+1的左侧
🐼定理1
对于一个多边形P及其内部一点q,在q到P的边pipi+1的一个voronoi通道中,有两个SP,pipi+1相对于q存在可见部分,当且仅当ql1在qr1的左侧;且当前voronoi通道中pipi+1相对于q的可见部分可通过计算射线ql1和qr1与pipi+1的交点得到。
由图所示,qp3在qp6左侧,根据定理,p4p5相对于q存在可见部分。通过计算射线qp3、qp6与p4p5的交点可以计算出p4p5相对于q的可见部分qlqr。射线ql1和qr1直接的区域成锥体状,称为可见锥体VC
🐼停止条件
1:如图所示,当遍历到q2和q3时都没必要再深度搜索圈出的两个区域了,因为它们后边的voronoi边关联的多边形的边肯定相对于q不可见
2:带动多边形如果不设终止条件会陷入死循环。当遍历到某个voronoi顶点(如q1、q2和q3)后,后面的voronoi边对应的边都相对于q不可见,所以可以停止该方向的遍历了。
🐼终止条件设置算法
🐨🐨计算VSP和SP
🐼初始VSP和SP的计算
算法1的Step1首先确定给定点q所在的Voronoi区域VR(o),算法1的Step2用于计算初始的Voronoi最短路径和SP。
确定Voronoi骨架路径的过程通常包括以下几个步骤:
1. 构造Voronoi图:首先,需要为给定的多边形构造Voronoi图。这个图表达了多边形内部每个点到最近站点(多边形的顶点或边)的距离。
2. 确定Voronoi区域:对于给定的查询点q,确定其所在的Voronoi区域。这个区域表示所有比到任何其他站点更接近查询点q的点的集合。
3. 计算Voronoi骨架路径:通过深度优先搜索Voronoi图,计算从查询点q到多边形顶点的Voronoi骨架路径。这个路径是由连接查询点q和多边形顶点的Voronoi边组成的。
4. 更新VSP:在DFS过程中,每当访问到一个新的Voronoi顶点时,根据需要更新当前的VSP。这涉及到添加或删除Voronoi边,以反映从查询点到当前顶点的路径。
5.计算SP:在Voronoi通道内,SP(q, p)可以通过连接VSP(q, p)上的点和多边形顶点p来计算。这通常涉及到找到VSP(q, p)上与多边形顶点p最近的点。
6.局部最短路径更新:在DFS过程中,随着VSP的更新,相应的SP也需要更新。这涉及到在VSP上添加或删除点,以确保SP始终保持为局部最短路径。
7. 确定可见性:通过分析Voronoi骨架路径和局部最短路径,确定多边形边相对于查询点的可见部分。
🐶深度优先搜索(DFS)
- 访问和标记:从
q
开始,访问与其直接相连的Voronoi边,并标记这些边为已访问。 - 递归遍历:对于每条已访问的Voronoi边,找到与之相邻的未访问的Voronoi区域,并递归地访问这些区域。这通常涉及到移动到相邻Voronoi区域的顶点或边,并继续探索。
- 回溯:当一个区域的所有相邻区域都被访问后,回溯到上一个顶点,并继续探索其他未访问的区域。
🐼后续VSP和SP的计算
在已计算的VSP(q, p+1)和SP(q, p+1)的基础上,考虑如何快速确定下条边对应的2条VSP和SP,这取决于TC(q-)的值。
🐨🐨算法分析与实例
🐼算法效率
本文算法在预处理阶段需要构造多边形的Voronoi图,一旦构造完成,其可用于任意点的可见多边形查询。对于简单多边形,其Voronoi图可在O(n)时间内构造出来,对于“带洞”多边形的Voronoi图的构造,则需要O(n log n)时间。
🐼算法实例
给出了算法在虚拟博物馆中的应用实例,展示了算法的实际效果。
🦌🦌🦌做笔记
🐕🐕该文章的研究目的
🐈研究背景
本文针对点的可见性计算问题,提出了一种基于多边形Voronoi图的点可见性算法。该算法支持任意查询点的可见多边形快速计算,对于“带洞”多边形也适用,并且只对多边形进行局部访问。
🐈研究目标
旨在提高多边形中点可见性计算的效率,特别是在三维室内虚拟场景设计与漫游系统中的应用。
🐕🐕该文章的研究方法
🐈Voronoi图的应用
文章提出了Voronoi通道和局部最短路径的概念,通过深度优先策略对Voronoi图进行遍历,在计算Voronoi骨架路径的同时计算局部最短路径,并基于局部最短路径计算所遍历的多边形边的可见部分。
🐈算法实现
算法基于Voronoi图的几何特性,通过深度优先搜索遍历Voronoi图,计算Voronoi骨架路径和局部最短路径,从而确定点的可见多边形。
🐕🐕该文章的研究内容
🐈相关概念
定义了多边形Voronoi图中的Voronoi通道和局部最短路径,并提出了计算这些路径的算法。
🐈算法描述
详细描述了算法的步骤,包括如何确定点所在的Voronoi区域,计算Voronoi骨架路径和局部最短路径,以及如何基于这些路径计算点的可见多边形。
🐈算法分析
分析了算法的时间复杂度和空间复杂度,并讨论了算法在“带洞”多边形中的应用。
🐕🐕该文章的创新点
- 提出了Voronoi通道和局部最短路径的概念,为点的可见性计算提供了新的视角。
- 算法可以处理“带洞”多边形,并且只对多边形进行局部访问,提高了计算效率。
- 算法的数据结构简单、空间合理且易于实现,预处理时间复杂度为O(n log n),空间复杂度为O(n)。
🐕🐕该文章给我们的启发
- Voronoi图可以作为解决可见性计算问题的有效工具,特别是在复杂场景中。
- 通过局部访问和深度优先搜索策略,可以显著提高算法的效率。
- 算法的简单性和实用性使其适用于实际的三维虚拟场景设计与漫游系统。
🦌🦌🦌反思
🐨🐨从中学到了什么
🐼1. Voronoi图在可见性计算中的应用
- 学会了如何利用Voronoi图来解决多边形中的点可见性问题,特别是在复杂或“带洞”的多边形中。
🐼2. 深度优先搜索(DFS)的策略
- 了解了如何通过深度优先搜索策略在Voronoi图中遍历,以计算Voronoi骨架路径和局部最短路径。
🐼3. 算法的时间和空间复杂度
- 掌握了评估算法效率的方法,特别是如何分析算法的时间和空间复杂度,并理解了近似线性算法和近似输出敏感算法的概念。
🐼4. 算法的实际应用
- 认识到了这种算法在三维虚拟场景设计与漫游系统中的应用价值,特别是在提高渲染效率和优化用户体验方面。
🐼5. 计算几何中的基本概念
- 学习了Voronoi图、Voronoi骨架路径、Voronoi通道和局部最短路径等计算几何中的基本概念,并理解了它们在算法中的作用。
🐨🐨有什么问题
🐼1. 算法的扩展性
- 该算法是否可以扩展到非多边形(如曲线边界)的几何形状,以及如何适应更复杂的三维场景?
🐼2. 算法的优化
- 在大规模数据集或高密度点集中,算法的性能如何?是否存在进一步优化空间,以提高算法的效率?
🐼3. 算法的鲁棒性
- 算法对于噪声数据或不精确的输入有多鲁棒?如何处理输入数据的误差?
🐼4. 实际应用中的挑战
- 在实际的三维虚拟场景中,算法如何处理动态变化的场景,例如移动的物体或变化的视角?
🐼5. 算法的并行化
- 考虑到现代计算硬件的发展,该算法是否可以并行化以利用多核处理器的优势?
相关文章:

计算机图形学论文 | 多边形中的点可见性快速算法
🦌🦌🦌读论文 🐨🐨摘要 针对点的可见性计算这一计算几何中的基础问题,提出一种支持任意查询点的可见多边形快速计算的基于多边形Voronoi图的点可见性算法。以与Voronoi骨架路径对应的Voronoi通道概念&…...
程序员输入问题
题目描述 程序员输入程序出现差错时,可以采取以下的补救措施:按错了一个键时,可以补按一个退格符“#”,以表示前一个字符无效;发现当前一行有错,可以按一个退行符“”,以表示“”与它之前的字符…...

雨晨 23H2 Windows 11 企业版 IE VCDX 适度 22631.4445 (VIP有限开放版本)
雨晨 23H2 Windows 11 企业版 IE VCDX 适度 22631.4445 (VIP有限开放版本) 文 件: 雨晨 23H2 Windows 11 企业版 适度 22631.4445 install.wim 提 取 码: ZZLR 大 小: 2824999564 字节 修改时间: 2024年11月9日, 星期六, 05:33:05 MD5 : 9C88…...

如何评估焊机测试负载均衡性能
评估焊机测试负载均衡性能的方法有很多,以下是一些建议: 1. 确定测试目标:首先,需要明确评估焊机测试负载均衡性能的目标。这可能包括提高生产效率、降低能耗、减少设备故障率等。明确目标有助于选择合适的评估方法和指标。 2. …...

【卷积基础】CNN中一些常见卷积(1*1卷积、膨胀卷积、组卷积、深度可分离卷积)
文章目录 逐通道卷积(Pointwise Convolution,1x1 卷积)主要作用逐通道卷积的操作过程优势代码示例典型应用 膨胀卷积(Dilated Convolution)主要作用工作原理膨胀率 (dilation rate) 的定义代码实例膨胀卷积的优点 组卷…...
组合(DFS)
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2: 输入:n 1, k 1…...

linux盘扩容缩容
这里写目录标题 文件格式介绍问题:当根盘满了过后怎么办?解决方式: Xfs文件格式缩容扩容1. 备份2. 卸载home3. 缩容home(home盘为xfs文件格式)4. 扩容 /5. 恢复home备份 Ext4文件格式缩容扩容1. 备份(可选&…...
mysql中REPLACE语句使用说明
在 MySQL 中,REPLACE语句用于插入或更新数据。当插入的数据与表中的唯一索引或主键冲突时,它会先删除冲突的行,然后再插入新的数据。这是一种很方便的操作方式,可以简化在需要更新或插入数据时的代码逻辑。 它的语法结构与INSERT语…...

分享:文本转换工具:PDF转图片,WORD转PDF,WORD转图片
前言 鉴于网上大多数在线转换工具要么需要收费,要么免费后但转换质量极差的情况,本人开发并提供了PDF转图片,WORD转PDF,WORD转图片等的文本转换工具。 地址 http://8.134.236.93/entry/login 账号 账号:STAR001&a…...

mac crontab 不能使用问题简记
需要 crontab 有权限,如下截图设置 在访达上方【前往】-》【前往文件夹】输入/ 然后按 Command Shift . 显示隐藏文件,然后将 usr 放到左边栏 然后如下操作 系统设置中找到 隐私安全->完全访问磁盘 点击小锁头 点击号,将/usr/bin/c…...
Python 自动化测试应用
Python 自动化测试应用 目录 🧪 自动化测试基础与重要性📝 使用 pytest、unittest 进行运维脚本和工具的自动化测试🔧 自动化测试与 CI/CD 集成🛠 测试驱动开发(TDD)在运维脚本中的应用🐳 模拟…...

Python-安装与PyCharm的安装配置(1)
目录 安装 打开运行 PyCharm的安装 新建项目 安装 找到官网下载对应的电脑对应的版本 Welcome to Python.org -- 官网 下载稳定版的 安装记得勾选配置环境,这样自己就不需要再配置环境了 安装成功 至此python的运行环境就安装好了 打开运行 在开始菜单中可以…...

操作系统概念(一)——IOMMU学习
系列文章目录 提示:本系列主要记录工作过程中遇到的操作系统基础概念以及工作原理 第一章 操作系统之IOMMU 文章目录 系列文章目录1. 设备访问内存的几种主要方式1.1 传统的 I/O 访问(程序控制 I/O)1.2 直接内存访问(DMA…...

通过 Windows IIS 服务访问腾讯云 CFS 文件系统
互联网信息服务(IIS)可以像访问本地数据一样访问文件存储(Cloud File Storage,CFS)系统上的数据,并提供 Web 服务,实现网站存储与计算分离。本文介绍如何配置 IIS 访问 CFS 文件系统。 背景信息…...
如何电脑连接电视,实现大屏自由!
在追求很高视听享受的今天,将电脑连接到电视上已经成为了一种趋势。无论是追剧、办公演示还是享受游戏,大屏幕带来的沉浸感是笔记本电脑无法比拟的。今天就为大家详细介绍四种不同的电脑连接电视的方法,助你轻松实现大屏自由! 方…...
闭包的概念及使用场景介绍
概念:在JavaScript中,闭包(Closure)是指一个函数有权利访问定义在它外部作用域的任何变量。 function outerFn(outerVal) {return function innerFn(innerVal) {console.log(outerVal, outerVal)console.log(innerVal, innerVal)…...

qt5将程序打包并使用
一、封装程序 (1)、点击创建项目->库->clibrary (2)、填写自己想要封装成库的名称,这里我填写的名称为mydll1 (3)、如果没有特殊的要求,则一路下一步,最终会出现如下文件列表。 (4)、删…...

软件设计师-上午题-15 计算机网络(5分)
计算机网络题号一般为66-70题,分值一般为5分。 目录 1 网络设备 1.1 真题 2 协议簇 2.1 真题 3 TCP和UDP 3.1 真题 4 SMTP和POP3 4.1 真题 5 ARP 5.1 真题 6 DHCP 6.1 真题 7 URL 7.1 真题 8 浏览器 8.1 真题 9 IP地址和子网掩码 9.1 真题 10 I…...

uniapp上拉刷新下拉加载
方法一: z-paging 的组件库: show-loading-more-no-more-view"false" 该属性控制是否显示 "加载更多" 或 "没有更多" 的提示。如果设为 false,则不会显示这些提示。如果设为 true,当数据加载完毕…...
【C++】【算法基础】快速排序
快速排序 题目 用快速排序排序长度为 n n n的整数数列。 题解 快速排序的核心思想是分而治之:选定一个基准值,将数组分为两半,一边比其小,一边比其大,然后再次分别选定一个基准值,再次操作。 #include…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...

相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...

结构化文件管理实战:实现目录自动创建与归类
手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题,进而引发后续程序异常。使用工具进行标准化操作,能有效降低出错概率。 需要快速整理大量文件的技术用户而言,这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB,…...