本文涉及知识点

数学 几何

预备知识

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

假定直线和射线不平行。
假定射线起点是原点,弧度是 α \alpha α,直线是: P : = ( x 0 , y 0 ) + k v P:= (x_0,y_0)+kv P:=(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=0 tcosαk×dxx0=0tsinαk×dyy0=0
根据克莱姆法则:D= − cos ⁡ α × d y + d x × sin ⁡ a -\cos\alpha\times dy+dx \times \sin a cosα×dy+dx×sina,由于存在交点,则 D ≠ 0 D\neq 0 D=0
我们无需计算 D 1 D_1 D1,因为D_1是连续函数。
D 1 D \frac {D_1} D DD1是连续函数。

前言

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

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 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐