다각형이 선과 관련하여 모노톤인지 어떻게 테스트합니까?


10

모노톤 폴리곤폴리곤 삼각 분할 에서 중요한 역할을하는 것으로 잘 알려져 있습니다.

정의 : 다각형 평면에서이 직선에 대한 모노톤라고 의 경우 직교 모든 라인, 교차의 최대 두 번.L L PPLLP

선 과 다각형 가 주어지면 다각형 가 대해 모노톤 인지를 결정하는 효율적인 알고리즘이 있습니까?P P LLPPL

답변:


10

힌트 : 좌표가 이웃보다 작은 정점이 정확히 하나 인 경우에만 일반적인 단순 다각형은 축 과 관련하여 모노톤입니다 . 이 관찰 은 최소한 다각형의 모서리가 수직이 아닌 경우 -시간 알고리즘을 즉시 제안합니다 .x O ( n )xxO(n)

스포일러 아호이 :

IsMonotone (X [0..n-1], Y [0..n-1])
    local_mins ← 0
    i ← 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. 시간 에서 가장 왼쪽과 오른쪽 꼭짓점 (즉, 각각 최소와 최대 좌표 를 갖는 다각형의 꼭짓점)을 찾습니다 (즉, 꼭짓점 목록을 한 번만 반복).O ( N )xO(n)

  2. 이 두 정점은 다각형의 경계를 두 개의 곡선, 즉 상부 체인과 하부 체인으로 나눕니다.

  3. 좌표가 감소하지 않는지 확인하면서 각 체인을 따라 왼쪽에서 오른쪽으로 걷습니다 . 시간 이 걸립니다 .O ( N )xO(n)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.