news 2026/9/8 18:39:14

【计算几何 十五章】可见性图:求最短路径

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【计算几何 十五章】可见性图:求最短路径

本文涉及知识点

数学 几何

预备知识

直线与线段的交点在射线的投影是连续函数。

假定直线和射线不平行。
假定射线起点是原点,弧度是α \alphaα,直线是:P : = ( x 0 , y 0 ) + k v P:= (x_0,y_0)+kvP:=(x0,y0)+kv
令交点距离原点t, k和tα \alphaα是未知量,其它是已知量。则:
t cos ⁡ α − k × d x − x 0 = 0 t sin ⁡ α − k × d y − y 0 = 0 t\cos\alpha- k\times dx-x_0=0 \\ t\sin\alpha - k\times dy - y_0=0tcosαk×dxx0=0tsinαk×dyy0=0
根据克莱姆法则:D=− cos ⁡ α × d y + d x × sin ⁡ a -\cos\alpha\times dy+dx \times \sin acosα×dy+dx×sina,由于存在交点,则D ≠ 0 D\neq 0D=0
我们无需计算D 1 D_1D1,因为D_1是连续函数。
D 1 D \frac {D_1} DDD1是连续函数。

前言

本章讨论的问题仅仅是:如何为沿平面运动的机器人规划出一条欧式最短路径。

1 点机器人的最短路径

倘若障碍物是闭集,那么最短路径不存在,对于任意一条路径,我们都可以将它超某个障碍物靠拢,从而得到一条更短的路径。

多边形路径中内部顶点(inner vertext)- 即该路径上除起点、终点之外的任何顶点。


15.11:穿行于一组互不相交的多边形障碍物S之间、从p s t a r t 通往 p g o a l p_{start}通往p_{goal}pstart通往pgoal的任何一条最短路径T,都是一条多边形路径,其中所有的内部顶点都是S的顶点。
T一定都是线段,令T在p处是弧线,则存在以p中心的圆和所有的障碍物相切或相邻。T一定和圆相交于两点,连接这两点距离更短。

同理,T内部顶点一定是S的顶点,否则用和圆相交的两点构成的线段替换。
根据上述特性,可构造线路图,并借助它找到最短路径。这张线路图,成为S的可见图,记作G v i s ( S ) G_{vis}(S)Gvis(S)。其中每个节点对应于S中的顶点;若顶点v和w可以相互看见,则在它们对应的节点之间引入一条弧。可见指的是线段v w ‾ 不与 S 中的任意障碍物相交。 \overline{vw}不与S中的任意障碍物相交。vw不与S中的任意障碍物相交。障碍物任何一条边的两个端点,总是相互可见的。T除了第一条边和最后一条边外都是可见边,为了让这两条边成为可见边,我们将起点、终点也加到S中。
推理15.2:穿行于一组互不相交的多边形障碍物S之间、从p s t a r t 通往 p g o a l p_{start}通往p_{goal}pstart通往pgoal的任何一条最短路径,必然是由可见性图G v i s ( S ∗ ) G_{vis}(S^*)Gvis(S)中的若干条弧连接而成的,其中S*:=S ∪ { p s t a r t , p g o a l } S \cup \{p_{start},p_{goal}\}S{pstart,pgoal}
定理15.3:穿行于一组互不相交的多边形障碍物之间、从p s t a r t 通往 p g o a l p_{start}通往p_{goal}pstart通往pgoal的任何一条最短路径,都可以在O(nnlogn)的时间内构造出来,其中n为各障碍物所含边的总数目。

2 构造可见性图

定理15.4:任意给定一组互不相交的多边形障碍物S,其可见性图可以在O(nnlogn)时间内构造出来,其中n为s的总边数。

旋转扫描线法


扫描线(摄像)以 e 1 为中心,从 α 旋转到 β , 扫描线(摄像)以e_1为中心,从\alpha旋转到\beta,扫描线(摄像)以e1为中心,从α旋转到β如果没有新的线段与射线相交,也没有线段不再和射线相交,则各线段的交点次序不会发生变化。
忽略和射线平行的线段。线段和射线的交点在射线的投影是连续函数,两个连续函数的差仍然是连续函数。根据介值定理,连续函数的值不会从正数越过0,跳跃到负数。
set要自定义比较函数,且比较函数与射线角度α \alphaα相关。

3 平移运动多边形机器人的最短路径

先计算出-R(即R的对称镜像)与每个障碍物的闵可夫斯基和,然后再记下所得出的C-空间障碍物的并集。于是问题就转换成点机器人。
定理15.5:设机器人R的形状是凸的,其复杂度为常数,可以在一组多边形障碍物之间做平移式运动。对于任何给定的起始和目标位置,我们都能够在O(nnlogn)的时间内,为R规划出一条不发生碰撞的最短路径。其中n为所有障碍物所包含的边数。

扩展阅读

计算几何为骨,排样优化为魂
作品:亲士CAD工具箱
经典文章推荐:二维排样
万物皆数学
查阅鄙人的博文,请点击博文下载学院导航
活到老,学到老。明朝中后期,大约50%的进士能当上堂官(副部及更高);能当上堂官的举人只有十余人。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。

测试环境

操作系统:win7 开发环境: VS2019C++17
或者 操作系统:win10 开发环境: VS2022C++17
如无特殊说明,本算法用**C++**实现。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 18:39:10

原生多模态・极致性价比|GLM‑5.3‑Flash 上线魔乐社区

8月26日,智谱正式上线并开源 GLM-5.3-Flash(320B-A18B)——这是 GLM-5 系列的首个原生多模态模型。 320B 总参数,能力超越 GLM-5.2,在全球权威的Artificial Analysis Intelligence Index(AA 综合智能指数&…

作者头像 李华
网站建设 2026/9/8 18:39:09

终端AI编程代理opencode实践指南:安装、模型接入与Skills配置

最近大半年,我把主力编程环境从IDE的AI插件,慢慢挪到了终端里的AI Agent上。前后试了Claude Code、Codex CLI,最后日常用得最多的反而是opencode。这项目是SST团队开源的,在GitHub上叫sst/opencode,主打一个“终端里的…

作者头像 李华
网站建设 2026/9/8 18:38:37

opencode:开源终端AI编程助手安装配置与实战指南

如果你跟我一样,习惯在终端里用 AI 干活,最近一定绕不开一个名字:opencode。它不是一个 IDE 插件,也不只是"另一个 ChatGPT 壳子",而是一个真正跑在命令行里、能读你代码、改你文件、执行你命令的开源 AI 编…

作者头像 李华
网站建设 2026/9/8 18:38:14

CodeGraph 安装部署指南:给 AI 编码助手装上本地代码知识图谱

CodeGraph 安装部署指南:给 AI 编码助手装上本地代码知识图谱 【免费下载链接】codegraph Pre-indexed code knowledge graph, auto syncs on code changes, for Claude Code, Codex, Gemini, Cursor, OpenCode, AntiGravity, Kiro, CoPilot, and Hermes Agent — f…

作者头像 李华
网站建设 2026/9/8 18:37:30

爱享素材下载器:5分钟抓取视频号短视频存到电脑

爱享素材下载器:5分钟抓取视频号短视频存到电脑 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 爱享素材下载器&a…

作者头像 李华
网站建设 2026/9/8 18:36:00

图表设计实战:从架构图到Graphviz的完整指南

很多项目最后发现推倒重来的原因,不是需求没对齐,而是那张图没人看懂。这里说的“图”,不只是UI设计稿,而是架构图、流程图、时序图、ER图、拓扑图这类用于表达逻辑关系的diagram。diagram-design(图表设计&#xff09…

作者头像 李华