旋转卡壳——凸多边形矢量和

出处:http://blog.csdn.net/acmaker/article/details/3561131

凸多边形矢量和

给定平面上两个凸多边形 P 和 Q , P 和 Q 的矢量和, 记为 P + Q 定义如下:
P + Q = { p + q } 所有的分别属于 P 和 Q 的 p 和 q 。

多边形矢量和在 motion planning 中也称为 Minkowski 总数。 

考虑上述的定义, 许多问题可以通过询问集合 P + Q 的组成, 他拥有的性质等等。 下属结果帮助我们描述多边形矢量和。
  1. P + Q 是一个凸多边形。
  2. 顶点集 P + Q 是顶点集 P 和 Q 的和。
  3. 顶点集 P + Q 是 P 和 Q 间的并踵点对集。
  4. 给定分别有 m 和 n 个顶点的 P 和 Q , P + Q 有不多于 m + n 个顶点。

最后, 下属结论不仅仅描述了这个问题, 同时也提供了一个一个个顶点的增量式计算矢量和的计算方法。 
给定 P + Q 集合的第 k 个向量 z(k), 满足 z(k) = p(i) + q(j)。 构造在 p(i) 和 q(j) 处构造两条平行切线, 使得多边形同时位于各自线的右侧。 两条线分别在 p(i) 和 q(j) 处确定了角 theta(i) 和 phi(j) (如下图所示)

因此下一个向量 z(k+1) 等于:

  • p(i+1) + q(j) 若 theta(i) < phi(j)
  • p(i) + q(j+1) 若 theta(i) > phi(j)
  • p(i+1) + q(j+1) 若 theta(i) = phi(j)

 

 

 

 

 

 

 

 

下述的多边形和他们的矢量和作为一个例子。

 

两个凸多边形。 第一个多边形的边用红色标记, 第二个用蓝色。



 

 

上述多边形的矢量和。 其边的颜色与原多边形的一致。


用上述的结果, 我们十分容易的就能构造出一个算法来计算矢量和。 第一个向量可以是在给定方向上边界向量的和(如 y 轴负方向)。 切线构造后, 在计算角度时候更新, 下一个点就很明确了。 我们需要做的只是同时旋转两条线到新的位置来确定新的角度。 

算法的正确性来自主要的结论; 他是线性时间复杂度的, 因为每一步只有一个所要求的向量和集合中的向量被确定, 并且他们只有 m + n 个, 因此总运行时间是 m + n 。

 

原文地址:http://cgm.cs.mcgill.ca/~orm/vecsum.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值