如何测试多边形相对于任意线是否为单调?


16

定义:多边形的平面被称为相对于直线单调,如果每线正交相交最多两次。大号大号PPLLP

给定多边形,是否可以确定是否存在任何线,使得多边形相对于是单调的?如果是,怎么办?大号P 大号PLP大号

以前,我问了一个相关的问题(在那里,我问如何确定多边形是单调相对于一个特定的行),但现在我感兴趣的情况下,当是提供或预先规定。大号


为什么不仅仅旋转/移动坐标系,使大号成为X轴,然后再次运行旧算法?附加工作应在易于处理Ø1个
HdM 2012年

4
@HdM:没有将L行作为输入的一部分。
伊藤刚(Tsuyoshi Ito)2012年

Answers:


16

有可能的。

考虑您的多边形并考虑“凹”顶点。它们精确地定义了哪些线将与多边形相交两次以上。在下图中,我标记了禁止角度的间隔(红色)。如果将它们放在一起并在红色光盘上看到一个孔,则存在授权角度(蓝色)。所述多边形是然后相对于斜率的任何线单调- 1 /黄褐色δ(绿色)。δ-1个/棕褐色δ

小行星

现在是算法。

是多边形的第i个顶点。首先计算绝对角度α边缘v v + 1和内角β顶点v 。使用所有好的编程语言中可用的功能vi=(xi,yi)iαi(vivi+1)βiviatan2

β = α + 1 - α + { 0  ,如果  α + 1α 2 π  如果  α + 1 < α

αi=atan2(yi+1yi,xi+1xi)
βi=αi+1个-α一世+{0 如果 α一世+1个α一世2π 如果 α一世+1个<α一世

扭转顶点的顺序,如果他们不向逆时针方向顺序,即,如果不为负。(小号= - 2 π:逆时针,š = 2 π:顺时针方向)。s=一世β一世-ñπs=-2πs=2π

下面只对本内角大于大π即,β Ĵ > π。我照片中的红色。我们的目标是找到一个角度δ,是不是在Ĵ [ α Ĵ + 1α Ĵ ]π。即,使得对于所有Ĵ使得β Ĵ > πmπβj>πδj[αj+1,αj]πjβj>π

(δ<αj+1αj<δ) if αj+1<αj
(αj<δ<αj+1) if αj<αj+1

αjαj[0,π)πδ

O(n2)αj mod πγ1,γmδ{γ12,γ1+γ22,,γm1+γm2,γm+π2}.

If you have find some δ then L exists and is of slope 1/tanδ. Otherwise P is not monotonous.


What software did you use to make that illustration?
jojman

@jojman I don't remember but it had to be GIMP, I can't remember any other program I would have used back then.
jmad
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.