三维空间中的最短路问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对于 二维空间中的最短 路问题 ,采 用可视图的办法可以 在 O( n2 )时间内计算出最 短路 [1 ];在 三维空间中 ,求 解该问题 则变得十分困难 .在包含一组 相互分离凸多面体的 三维空间中为任意 两点寻找最短路的 问题是个 N P 问题 [2 ].当 k 任意 时 ,指数时间 复杂度是最好的结 果 [3 ];当 k 固 定时 ,该问 题就简单了 .文献 [4 ]对 k= 1时的 问题 最早进行研究 ,并给出 O( n3 logn)的算法 .后来 ,这个结果被文献 [5 ]改进到 O (n2 );对于 k = 2和 k > 2的情形 ,目前 最好的结果仍为 O (n3logn ) [6]和 O (n4k ) [7 ].
摘要 在 包含一组相互分离 凸多面体的三维空间 中为任意两 点寻找最短 路的问题 是 N P 问题 . 当凸
多面体的个数 k 任意时 ,它为指数时间复杂度 ;而当 k = 1时 ,为 O (n2 ) ( n 为凸多面体的顶点 数 ) .文章
主要研究了 k = 2情形下的最短路问题 ,提出一个在 O (n2)时间内解决该问题的算法 .所得结果大大优
何交点 ) ,则 t= X ;若 t 与 Y 可视 ,则 l= Y;除 非 t= X (或 l = Y ) ,否则 t
(或 l )处于对应多面体表面的边上 .
t
Y
( 3) 最 短路不会经过 S1 , S2上的任何 顶点 ( X , Y 本身 是多面体 顶点
l
和 X 与 Y 可视这两种情况除外 ) .
两个凸多面体间的最短路具有如下 拓扑特性 [5, 6]:
( 1) 最短路包含 3个子段: 沿 S1从 X 到“起飞点” t∈ S1的最短路、从 t 到 “着落点”l∈ S2的直线段以及沿 S2从
l 到 Y 的最短路 (如图 3所示 ) .
X
( 2) 若 X 与 l 可 视 (两 点可视 ,即它 们的连 线与 P1 , P2的 内部无 任
第 D10O卷I :第107.期13328 /j . cnki . jos . 1999. 07. 018
软 件 学 报
1999年 7月
JO U RN A L O F SO F TW A RE
V o l. 10, N o. 7 Jul. 1999
三维空间中的最短路问题
施海虎
(海信集团技 术中心 青岛 266071) (北京大学计算机科学与技术系 北京 100871)
过程来描述 .首先将面 f 0放在 L 中 ,使 X 与初始位置一致 ;假设我们已 经将 f 0 , . . . , f i- 1展 开 ,并且都 放入 L 中 , 那么可以沿着 ai 将 f i 展开 ,使之与 f i- 1同面 ,这时 , f i 也处 于 L 中 ,并且处于 ai 的另一边 .我们称 L 为 a的展开 平面 ,并记 X , Y ,a, f 在 L 中的映射为 X′, Y′,a′, f′(如图 2所示 ) .
7期
施海虎: 三维空间中的最短路问题
— 773 —
面所构成的面序列 ,其中 ai= f i- 1∩ f i ,i= 1,. . . , m; X∈ f 0 ,Y∈ f m (如图 1所示 ) . ( 4) 给定 C( Y )的边 序列和面序列 ,可以将 f 0 , . . . , f m 展开到同一个平面 L 中 .其具体做法可通过一 个循环
2 两个凸多面体间的最短路问题
给定两个相互分离且悬空的 凸多面体 P1 , P2 ,它们的 表面和顶点数分别 为 S1 , S2和 n1 , n2 ;并给定 X∈ S1 ,对
— 774 —
软 件 学 报
10卷
于任意点 Y∈ S2 ,要求计算沿 S1和 S2从 X 到 Y 的最短路 C( Y ) .下面针对该问题进行讨论 .
a1 f0
f 1 a2 f2
a′1
a′4 a′2 a′3
Y′
Y
Xபைடு நூலகம்
X′
a= {a1 ,a2 } f = {f 0, f 1, f 2}
图 1 单个凸多面体上最短路的边、面序列
图 2 ξ的展开平面及影子的说明
( 5) 影子 shadow ( X′,a′i ,a′i+ 1 ) ,即在 L 上 ,a′i 以 X 为源点在 a′i+ 1上的影子 (如图 2所示 ) . 当 i= 0时 ,shadow (X′,H,a′1 )= { Y′|Y′∈ a′1 } ,其中 H表示空集合 ; 当 0 < i < m 时 ,shadow ( X′,a′i ,a′i+ 1 )= { Y′|Y′∈ a′i+ 1 ,并且直线段 X′Y′依次与 a′1 ,. . . ,a′i相交 } . 我们将 shadow ( X′, a′i ,a′i+ 1 )在 S 上的映射 shadow ( X , a′i ,a′i+ 1 )称为 a′i以 X 为源 点在 a′i+ 1上的影子 . ( 6) 影子 shadow ( X′,a′i , f ′i ) ,即 在 L 上 ,a′i以 X 为源点在 f ′i 上的影子 (参见图 2) . 当 i= 0时 ,shadow (X′,H, f′0 ) = {Y′|Y′∈ f′0 } ,其中 H表示空集合 ; 当 0 < i < m 时 ,shadow ( X′,a′i , f′i )= { Y′|Y′∈ f′i , Y′ a′i ,并且直线段 X′Y′依次与 a′1 ,. . . ,a′i相交 } . 我 们 将 shadow ( X′,a′i , f′i )在 S 上 的映 射 shadow ( X ,ai , f i )称为 ai以 X 为 源 点在 f i 上 的影 子 .注 意 , shadow ( X ,ai , ai+ 1 )= shadow (X ,ai , f i )∩ ai+ 1 ,并且影子可能为空 . 这里列出单个凸多面体表面上最短 路的若干拓扑特性 [4 ]: ( 1) 最短路不会通过 P 的顶点 (始点或终点为顶点的情况除外 ); ( 2) 最短路与 P 的每条边 (或每个面 )的交点 (或交线 )最多不超过 1个 (或 1条 ) ; ( 3) 最短路不会自我相交 ; ( 4) 任何两条具有相同始点的最短路 ,要么互不相交 ,要么其中的某条是另一条的子路 ; ( 5) 在凸多面体表面任意两点之间一定存在测地线 ,连 接这两点之间的最短路是测地线 ; ( 6) 如果测地线与边序列相交 ,那么此测地线在 a的展开平面上是一根直线段 . 计算 C( Y )的问题可分解成下面两个子问题 ,即求解了这两个子问题 ,等价于求解了最短路问题: ( 1) 求 C( Y )的边序 列 a; ( 2) 计算 C( Y )与 a中各条边的交点 . 根据测地线的展 开性 ,第 2个子问题容 易解决 .而解 决第 1个 子问题的一般方法是: 给定 X ,希望对 P 进行预 处理后 ,对于任意目标点 Y ,能够快速 计算出从 X 到 Y 的最短 路 .通常 ,预处理所需要 的时间决定了最短 路问题 的 时间复杂度 .文献 [ 1]用序列树 ( seque nce tr ee)的 方法来解决找 a的问题 ,并提出“一个角一个分叉”算法 来构 造序列树 ,用该算法生成的序列树的层数为 n ,并且每一层 的宽度为 O( n) .该算 法的主要 思路是: 给定凸多 面体 P 及其表面 S ,对于 S 上的始点 X ,求沿 S 从 X 到任意点 Y∈ S 的最短路 .首先 ,构造 X 的序列树 ,序列树的根结 点为 X ,非根结点 为具有相同最短路边 序列的点集 ; 其次 ,从序 列树上找出 Y 所对应的结点 ,则由从该结 点出发 到根结点 的所有边构成的序 列即为 X 到 Y 最短路 的边序列 ; 最后 ,根据测地线 性质 ,求出最短路 与该边序 列中 各条边的交点 .
为 了便于讨论 ,我们将半平 面记为 f (l ) ,其中 l 为半平面的 边 ;将半 平面 f ( l)的补记 为 f* ( l ) ,它也是 一个
半平面 ,与 f ( l )位于同一个平面上 ,边相同 ,但方向相反 ;将三角面记为 f ABC ( BC ) (简记为 f ( BC ) ) . 两 个平行半 平面上两 点间的最短 路问题: 即设半平 面 f (l1 )与 f (l2 )相互 平行 ,并且互 不相交 ,并 设点 X∈
( 1) 找起飞点 t 和着落点 l 所在的边 Ym 1 ,Ym1+ 1; ( 2) 找起飞点 t 和着落点 l .
根据文献 [ 6]中关于两条边可视的定义可得:
( 1) 设点 X∈ S1与边 ai∈ S2可视 ,那么 ,ai最多可分成两 段 ,使其中的某段与 X 可视 ,而另一段与 X 不可视 ; ( 2) 设边 a1∈ S1与 a2∈ S2可视 ,那么 ,a1最多可分成 3段 ,使其中的某段 与 a2不可视 ,而另两段与 a2可视 .对于 a2亦然 .
设 P 是一个给定的凸多面体 , S是 P 的表面 ,n 为 P 的顶点数 ,我 们用 n 表示 P 的复杂度 .单个凸多 面体表 面上的最短路问题 ,即给定始点 X∈ S ,对于任意点 Y∈ S ,要求计算沿 S从 X 到 Y 的最短路 . 为了 处理问题方便起见 ,需要将 S 进行 三角剖分 ,得到一 个新的凸多 面体 P′,使 X 也成 为 P′的 顶点 ,这个 过程的时间复杂度为 O (n logn ) [8] .另外 , P′的复杂度不变 ,即 P 的顶点数为 O (n ) .
图 3 两个凸多面体间的最短路
在最短路的 3段子路中 ,第 2段为直线段 ;第 1、 3段属于单个凸 多面体 情形 ,可 使用文献 [ 5]的算法来 计算 .因 此 ,两 个凸多面体 间的最短 路问
题可归结为找起飞 点和着落点的问题 .设最短路所 经过的边序列为 Y=
(Y1 , . . . ,Ym1+ m2 ) ,其中 Y1 , . . . ,Ym1∈ S1 , Ym 1+ 1 , . . . , Ym 1+ m 2∈ S2 , t∈ Ym1 , l∈ Ym1+ 1 , 则该最 短路问 题又可分 为下面 两 个子问题:
本文研究得到 国家自然科学基金、国家 863高科技项目基金和中 国科学院院长特别基金资助 . 作者施海虎 , 1969年 生 , 博 士后 ,讲师 ,主要研究领域为人工智能 ,知识工程 ,计算机动画 ,软件工程 , CA I.
本文通讯联系人: 施海虎 ,青岛 266071,青岛市江西路 11号海信集团技术中心 本文 1997-11-11收到原稿 , 1998-07-20收到修改稿
本文使用如下定义 . ( 1) 点 Y∈ S 被称为 ridg e点 (相对于给定的 始点 X ) ,如果在 S上至少存在两 条从 X 到 Y 的最短路 .我们用 R 表示 S上 所有 ridg e点的集合 . ( 2) 对于任意点 Y∈ S- R ,C( X , Y ) (简记为 C( Y ) )表示从 X 到 Y 的唯一最短路 . ( 3) 序列 a= (a1 , . . . ,am )表示 C(Y )沿 S 穿过的边所构成的边序列 ; f = ( f 0 , . . . , f m )表示 C( Y )沿 S 穿过的
于此情形下迄今为止最好的结果 — — O (n3logn ) .另外 ,将此结果应用到 k> 2的情形后 ,获得的结果为
O(
12i -
1n
2 i
)
.
关 键 词 最短路 ,凸多面体 ,计算几何 ,测地线 , V o ro noi图 .
中图法分类号 T P301
近年来 ,最短路问题 作为运动规划的基 本问题之一 .在机器人、野外航行、工业自 动化和计算 机动画等 领域 中越来越 受到人们的关注 .通常 ,在包含一组已知障 碍物的环境中为一 个给定智能系 统寻找最优 避碍路径 是相 当困难的 .但是 ,当将障碍物看成凸多面体、将智能系统看成移动点时 ,最短路问题就变成可解的了 .
在本文中 ,我们将文献 [1 ]的技术推广到 k= 2的情 形 ,提出一个在 O (n2 )时间内 解决该问题的算法 .本文第 1 节简要介绍 k= 1情况下的最短路问 题 ,第 2节 重点介绍我们在 k= 2情况下的工作 ,最后给出几个 重要结果 (包括 k > 2的情况 ) .
1 单个凸多面体表面上的最短路问题
摘要 在 包含一组相互分离 凸多面体的三维空间 中为任意两 点寻找最短 路的问题 是 N P 问题 . 当凸
多面体的个数 k 任意时 ,它为指数时间复杂度 ;而当 k = 1时 ,为 O (n2 ) ( n 为凸多面体的顶点 数 ) .文章
主要研究了 k = 2情形下的最短路问题 ,提出一个在 O (n2)时间内解决该问题的算法 .所得结果大大优
何交点 ) ,则 t= X ;若 t 与 Y 可视 ,则 l= Y;除 非 t= X (或 l = Y ) ,否则 t
(或 l )处于对应多面体表面的边上 .
t
Y
( 3) 最 短路不会经过 S1 , S2上的任何 顶点 ( X , Y 本身 是多面体 顶点
l
和 X 与 Y 可视这两种情况除外 ) .
两个凸多面体间的最短路具有如下 拓扑特性 [5, 6]:
( 1) 最短路包含 3个子段: 沿 S1从 X 到“起飞点” t∈ S1的最短路、从 t 到 “着落点”l∈ S2的直线段以及沿 S2从
l 到 Y 的最短路 (如图 3所示 ) .
X
( 2) 若 X 与 l 可 视 (两 点可视 ,即它 们的连 线与 P1 , P2的 内部无 任
第 D10O卷I :第107.期13328 /j . cnki . jos . 1999. 07. 018
软 件 学 报
1999年 7月
JO U RN A L O F SO F TW A RE
V o l. 10, N o. 7 Jul. 1999
三维空间中的最短路问题
施海虎
(海信集团技 术中心 青岛 266071) (北京大学计算机科学与技术系 北京 100871)
过程来描述 .首先将面 f 0放在 L 中 ,使 X 与初始位置一致 ;假设我们已 经将 f 0 , . . . , f i- 1展 开 ,并且都 放入 L 中 , 那么可以沿着 ai 将 f i 展开 ,使之与 f i- 1同面 ,这时 , f i 也处 于 L 中 ,并且处于 ai 的另一边 .我们称 L 为 a的展开 平面 ,并记 X , Y ,a, f 在 L 中的映射为 X′, Y′,a′, f′(如图 2所示 ) .
7期
施海虎: 三维空间中的最短路问题
— 773 —
面所构成的面序列 ,其中 ai= f i- 1∩ f i ,i= 1,. . . , m; X∈ f 0 ,Y∈ f m (如图 1所示 ) . ( 4) 给定 C( Y )的边 序列和面序列 ,可以将 f 0 , . . . , f m 展开到同一个平面 L 中 .其具体做法可通过一 个循环
2 两个凸多面体间的最短路问题
给定两个相互分离且悬空的 凸多面体 P1 , P2 ,它们的 表面和顶点数分别 为 S1 , S2和 n1 , n2 ;并给定 X∈ S1 ,对
— 774 —
软 件 学 报
10卷
于任意点 Y∈ S2 ,要求计算沿 S1和 S2从 X 到 Y 的最短路 C( Y ) .下面针对该问题进行讨论 .
a1 f0
f 1 a2 f2
a′1
a′4 a′2 a′3
Y′
Y
Xபைடு நூலகம்
X′
a= {a1 ,a2 } f = {f 0, f 1, f 2}
图 1 单个凸多面体上最短路的边、面序列
图 2 ξ的展开平面及影子的说明
( 5) 影子 shadow ( X′,a′i ,a′i+ 1 ) ,即在 L 上 ,a′i 以 X 为源点在 a′i+ 1上的影子 (如图 2所示 ) . 当 i= 0时 ,shadow (X′,H,a′1 )= { Y′|Y′∈ a′1 } ,其中 H表示空集合 ; 当 0 < i < m 时 ,shadow ( X′,a′i ,a′i+ 1 )= { Y′|Y′∈ a′i+ 1 ,并且直线段 X′Y′依次与 a′1 ,. . . ,a′i相交 } . 我们将 shadow ( X′, a′i ,a′i+ 1 )在 S 上的映射 shadow ( X , a′i ,a′i+ 1 )称为 a′i以 X 为源 点在 a′i+ 1上的影子 . ( 6) 影子 shadow ( X′,a′i , f ′i ) ,即 在 L 上 ,a′i以 X 为源点在 f ′i 上的影子 (参见图 2) . 当 i= 0时 ,shadow (X′,H, f′0 ) = {Y′|Y′∈ f′0 } ,其中 H表示空集合 ; 当 0 < i < m 时 ,shadow ( X′,a′i , f′i )= { Y′|Y′∈ f′i , Y′ a′i ,并且直线段 X′Y′依次与 a′1 ,. . . ,a′i相交 } . 我 们 将 shadow ( X′,a′i , f′i )在 S 上 的映 射 shadow ( X ,ai , f i )称为 ai以 X 为 源 点在 f i 上 的影 子 .注 意 , shadow ( X ,ai , ai+ 1 )= shadow (X ,ai , f i )∩ ai+ 1 ,并且影子可能为空 . 这里列出单个凸多面体表面上最短 路的若干拓扑特性 [4 ]: ( 1) 最短路不会通过 P 的顶点 (始点或终点为顶点的情况除外 ); ( 2) 最短路与 P 的每条边 (或每个面 )的交点 (或交线 )最多不超过 1个 (或 1条 ) ; ( 3) 最短路不会自我相交 ; ( 4) 任何两条具有相同始点的最短路 ,要么互不相交 ,要么其中的某条是另一条的子路 ; ( 5) 在凸多面体表面任意两点之间一定存在测地线 ,连 接这两点之间的最短路是测地线 ; ( 6) 如果测地线与边序列相交 ,那么此测地线在 a的展开平面上是一根直线段 . 计算 C( Y )的问题可分解成下面两个子问题 ,即求解了这两个子问题 ,等价于求解了最短路问题: ( 1) 求 C( Y )的边序 列 a; ( 2) 计算 C( Y )与 a中各条边的交点 . 根据测地线的展 开性 ,第 2个子问题容 易解决 .而解 决第 1个 子问题的一般方法是: 给定 X ,希望对 P 进行预 处理后 ,对于任意目标点 Y ,能够快速 计算出从 X 到 Y 的最短 路 .通常 ,预处理所需要 的时间决定了最短 路问题 的 时间复杂度 .文献 [ 1]用序列树 ( seque nce tr ee)的 方法来解决找 a的问题 ,并提出“一个角一个分叉”算法 来构 造序列树 ,用该算法生成的序列树的层数为 n ,并且每一层 的宽度为 O( n) .该算 法的主要 思路是: 给定凸多 面体 P 及其表面 S ,对于 S 上的始点 X ,求沿 S 从 X 到任意点 Y∈ S 的最短路 .首先 ,构造 X 的序列树 ,序列树的根结 点为 X ,非根结点 为具有相同最短路边 序列的点集 ; 其次 ,从序 列树上找出 Y 所对应的结点 ,则由从该结 点出发 到根结点 的所有边构成的序 列即为 X 到 Y 最短路 的边序列 ; 最后 ,根据测地线 性质 ,求出最短路 与该边序 列中 各条边的交点 .
为 了便于讨论 ,我们将半平 面记为 f (l ) ,其中 l 为半平面的 边 ;将半 平面 f ( l)的补记 为 f* ( l ) ,它也是 一个
半平面 ,与 f ( l )位于同一个平面上 ,边相同 ,但方向相反 ;将三角面记为 f ABC ( BC ) (简记为 f ( BC ) ) . 两 个平行半 平面上两 点间的最短 路问题: 即设半平 面 f (l1 )与 f (l2 )相互 平行 ,并且互 不相交 ,并 设点 X∈
( 1) 找起飞点 t 和着落点 l 所在的边 Ym 1 ,Ym1+ 1; ( 2) 找起飞点 t 和着落点 l .
根据文献 [ 6]中关于两条边可视的定义可得:
( 1) 设点 X∈ S1与边 ai∈ S2可视 ,那么 ,ai最多可分成两 段 ,使其中的某段与 X 可视 ,而另一段与 X 不可视 ; ( 2) 设边 a1∈ S1与 a2∈ S2可视 ,那么 ,a1最多可分成 3段 ,使其中的某段 与 a2不可视 ,而另两段与 a2可视 .对于 a2亦然 .
设 P 是一个给定的凸多面体 , S是 P 的表面 ,n 为 P 的顶点数 ,我 们用 n 表示 P 的复杂度 .单个凸多 面体表 面上的最短路问题 ,即给定始点 X∈ S ,对于任意点 Y∈ S ,要求计算沿 S从 X 到 Y 的最短路 . 为了 处理问题方便起见 ,需要将 S 进行 三角剖分 ,得到一 个新的凸多 面体 P′,使 X 也成 为 P′的 顶点 ,这个 过程的时间复杂度为 O (n logn ) [8] .另外 , P′的复杂度不变 ,即 P 的顶点数为 O (n ) .
图 3 两个凸多面体间的最短路
在最短路的 3段子路中 ,第 2段为直线段 ;第 1、 3段属于单个凸 多面体 情形 ,可 使用文献 [ 5]的算法来 计算 .因 此 ,两 个凸多面体 间的最短 路问
题可归结为找起飞 点和着落点的问题 .设最短路所 经过的边序列为 Y=
(Y1 , . . . ,Ym1+ m2 ) ,其中 Y1 , . . . ,Ym1∈ S1 , Ym 1+ 1 , . . . , Ym 1+ m 2∈ S2 , t∈ Ym1 , l∈ Ym1+ 1 , 则该最 短路问 题又可分 为下面 两 个子问题:
本文研究得到 国家自然科学基金、国家 863高科技项目基金和中 国科学院院长特别基金资助 . 作者施海虎 , 1969年 生 , 博 士后 ,讲师 ,主要研究领域为人工智能 ,知识工程 ,计算机动画 ,软件工程 , CA I.
本文通讯联系人: 施海虎 ,青岛 266071,青岛市江西路 11号海信集团技术中心 本文 1997-11-11收到原稿 , 1998-07-20收到修改稿
本文使用如下定义 . ( 1) 点 Y∈ S 被称为 ridg e点 (相对于给定的 始点 X ) ,如果在 S上至少存在两 条从 X 到 Y 的最短路 .我们用 R 表示 S上 所有 ridg e点的集合 . ( 2) 对于任意点 Y∈ S- R ,C( X , Y ) (简记为 C( Y ) )表示从 X 到 Y 的唯一最短路 . ( 3) 序列 a= (a1 , . . . ,am )表示 C(Y )沿 S 穿过的边所构成的边序列 ; f = ( f 0 , . . . , f m )表示 C( Y )沿 S 穿过的
于此情形下迄今为止最好的结果 — — O (n3logn ) .另外 ,将此结果应用到 k> 2的情形后 ,获得的结果为
O(
12i -
1n
2 i
)
.
关 键 词 最短路 ,凸多面体 ,计算几何 ,测地线 , V o ro noi图 .
中图法分类号 T P301
近年来 ,最短路问题 作为运动规划的基 本问题之一 .在机器人、野外航行、工业自 动化和计算 机动画等 领域 中越来越 受到人们的关注 .通常 ,在包含一组已知障 碍物的环境中为一 个给定智能系 统寻找最优 避碍路径 是相 当困难的 .但是 ,当将障碍物看成凸多面体、将智能系统看成移动点时 ,最短路问题就变成可解的了 .
在本文中 ,我们将文献 [1 ]的技术推广到 k= 2的情 形 ,提出一个在 O (n2 )时间内 解决该问题的算法 .本文第 1 节简要介绍 k= 1情况下的最短路问 题 ,第 2节 重点介绍我们在 k= 2情况下的工作 ,最后给出几个 重要结果 (包括 k > 2的情况 ) .
1 单个凸多面体表面上的最短路问题