计算机图形学论文 | 多边形中的点可见性快速算法
🦌🦌🦌读论文
🐨🐨摘要
针对点的可见性计算这一计算几何中的基础问题,提出一种支持任意查询点的可见多边形快速计算的基于多边形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…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...
嵌入式面试常问问题
以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...
