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


10

众所周知,单调多边形多边形三角剖分中起着至关重要的作用。

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

给定直线和多边形,是否有一种有效的算法来确定多边形相对于是否为单调?P P LLPPL

Answers:


10

提示:通用简单多边形在且仅当其正好具有一个坐标小于其邻域的顶点时,才相对于轴为单调。这种观察立即提出了时间算法,至少在多边形的任何边都不垂直的情况下。x O n xxO(n)

扰流器

IsMonotone(X [0..n-1],Y [0..n-1])
    local_mins←0
    对于我←0至n-1
        如果(X [i] <X [i + 1 mod n])和(X [i] <X [i-1 mod n])
            local_mins←local_mins +1
    返回(local_mins = 1)

如果您担心多边形可能具有垂直边缘,请使用以下子例程代替比较,X[i] < X[j]以始终打破关系:

IsLess(X, i, j):
    return ((X[i] < X[j]) or (X[i] = X[j] and i < j))

最后,如果是形式的其他行,则修改如下:a x + b y = cLax+by=cIsLess

IsLess(X, Y, i, j):
    Di ← a·X[i] + b·Y[i]
    Dj ← a·X[j] + b·Y[j]
    return ((Dj < Dj) or (Di = Dj and i < j))

1

这是检查多边形是否“水平单调”(即相对于轴)的算法的更非正式,更高级,更直观的解释。x

  1. 在时间(即,仅迭代一次顶点列表)中找到最左边和最右边的顶点(即分别具有最小和最大坐标的多边形的顶点)。øÑ xO(n)

  2. 这两个顶点将多边形的边界分为两条曲线:上链和下链。

  3. 沿每个链从左到右行走,确认不变。这需要时间。øÑ xO(n)

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.