볼록 다각형 내에서 최대 면적 직사각형을 찾는 방법은 무엇입니까?


21

이 글에서 우리는 볼록 다각형 내부 에서 최대 면적 직사각형 을 찾는 방법에 대한 알고리즘 / 아이디어 를 찾고 있습니다.

다음 그림에서 숫자는 적합 된 사각형의 영역입니다. 도시 된 바와 같이, 원하는 직사각형은 각 치수에서 변할 수 있고 임의의 각도 일 수있다.

편집하다:

여기서 언급 한대로 언급 된 문제를 처리하는 방법에 대한 명확한 아이디어가 없습니다. 그럼에도 불구하고, 우리 는 최대 면적 직사각형이 하나의 모서리 가 다각형의 모서리에 정렬 된 것 (물론 동일한 길이의 모서리 일 필요는 없음) 중 하나 일 수 있다고 생각 합니다 .

여기에 이미지 설명을 입력하십시오


1
사용중인 소프트웨어를 지정할 수 있습니까? 또한 지금까지의 작업 또는이를 해결하기 위해 수행 한 일반적인 접근 방식을 게시하십시오. 누군가 당신이 이미 한 일을 향상시킬 수 있습니다. 내 경험상 "파란색"이라는 질문을 게시하는 것보다 훨씬 유용한 답변을 얻을 수 있습니다.
Martin


@Martin Software : 필요한 경우 프로그래밍이 Python시작됩니다 Fortran. 우리는 우리의 이전 게시물을 기반으로하는 추측이 여기에 또한 의해 위에서 언급 한 whuber그 답이 될 것이다 다각형과 공통 모서리를 가진 사각형이 될 수 있습니다.
개발자

1
귀하의 문제는 정말 흥미로운 것이며, 여기여기 에서 해결 알고리즘을 찾을 수 있다고 생각 합니다 .
nickves

1
@nickves 링크 감사합니다. 알고리즘에 대한 약간의 설명으로이 정보를 답으로 입력 하시겠습니까? 받아들이는 것이 좋은 대답이 될 것입니다.
개발자

답변:


4

주석을 작성하기에는 너무 큰 메모 (이것은 명백한 알고리즘을 제안하지는 않지만) :

펀치 라인 (EDITED) : 최대 영역 사각형의 두 꼭지점이 다각형의 경계에 있어야합니다 (예 : 가장자리를 따라 또는 꼭지점). 최대 영역 사각형이 사각형이 아닌 경우 다각형의 경계에 3 개 이상의 꼭짓점이 있어야합니다.

나는 네 단계로 나 자신에게 그것을 증명했다.

참고 # 1 : 최대 영역 사각형의 적어도 하나의 꼭짓점은 항상 다각형의 경계에 있습니다. 이것은 명백하지만 증거는 다음과 같이 진행될 수 있습니다 (모순). 다각형 경계에 정점이없는 "최대"사각형이 있다고 가정합니다. 즉, 각 정점 주위에 최소한의 공간이 있어야합니다. 따라서 직사각형을 약간 확장하여 최대 값과 모순 될 수 있습니다.

# 2 참고 : 적어도 두 개의 최대 영역 사각형의 정점은 다각형의 경계에 거짓말을 항상합니다. 증거는 다음과 같이 진행될 수 있습니다 (모순으로) : 경계에 하나의 꼭지점이있는 "최대"사각형이 있다고 가정합니다 (주 # 1에서 보장). 해당 정점에 인접하지 않은 두 모서리를 고려하십시오. 끝 점이 경계에 없기 때문에 각 주변에 약간의 공간이 있습니다. 따라서이 모서리 중 하나가 "압출"되어 다각형의 영역이 확장되고 최대치와 모순 될 수 있습니다.

참고 # 3 : 다각형의 경계에 놓이는 최대 영역 사각형의 대각선으로 마주 보는 두 개의 정점이 있습니다. (우리는 노트 # 2에서 적어도 두 개가 있지만 반드시 서로 교차하는 것은 아니라는 것을 알고 있습니다.) 그러나 모순으로 다시 두 개의 경계 정점이 인접하면 반대쪽 가장자리 (두 정점 모두 경계에 있음)이 약간 돌출되어 직사각형의 면적이 증가하고 최대 값과 모순 될 수 있습니다.

참고 # 4 : (편집 됨) 최대 영역 사각형이 사각형이 아닌 경우 정점 중 3 개가 다각형의 경계에 놓입니다.

증명하기 위해, 그렇지 않은 경우, 즉 최대 영역 사각형이 정사각형이 아니지만 두 정점 만 다각형의 경계에 있다고 가정하십시오. 더 큰 사각형을 구성하여 최대 값과 모순되는 방법을 보여 드리겠습니다.

사각형의 꼭지점 전화 A, B, C,와 D. 일반성을 잃지 않고, 그 가정 BD다각형 경계에있는 두 가지이다. 이후 AC다각형의 내부에있는, (주위에 동그라미로 표시 주위에 약간의 호기심있다 AC아래 그림은). 이제 직사각형 주변 원 및 슬라이드 지점 그릴 AC동일한 양만큼 원형 주위에 약간 (만드는 A'하고 C', 아래 그림 참조) 때문에 새로운 사각형 그A'BC'D원래 사각형보다 사각형입니다. 이 프로세스는 원래 다각형 내에 있고 더 넓은 영역을 가진 새 사각형을 만듭니다. 이것은 모순이므로 증명이 완료됩니다.

새로운 사각형 만들기

그 증거를 믿기 위해서는 원에 새겨진 사각형의 면적이 "더 정사각형"이 될수록 증가한다는 것을 스스로에게 확신시켜야합니다 (즉, 가장자리 길이의 차이가 더 작아짐). 새 선이 모두 안에 있도록 다각형이 볼록해야합니다. 그리고 다른 작은 세부 사항이 깔개 아래에 휩쓸 릴 수도 있지만 모든 것이 잘 작동한다고 확신합니다.


다른 두 정점을 "흔들기"하면 사각형이 아닌 사각형이 만들어 지므로 # 4는 비린내가 있습니다.
whuber

참된. 그러나 네 번째 예의 시각화는 옳지 않습니다 (두 정점이 다각형 경계에 있으면 더 이상 늘릴 수 없습니다). 그래도 설명하는 방법을 정확히 찾을 수는 없지만 (댓글을 쓰려고했지만 너무 지저분했습니다), 나는 당신이 옳다고 믿습니다.
Saryk

# 4에 대한 반례가 있다고 생각합니다. 내가 찾은 것은 보여주기 위해 관련된 계산을 취합니다. 가장 단순한 것은 불규칙한 육각형의 교란입니다 (두 개의 반대쪽 모서리가 약간 잘린 사각형).
whuber

노트 # 4는 비린내가 있다고 동의했다. 오늘 저녁 자세히 살펴보고 고치거나 제거하겠습니다.
csd

+1 어려움의 좋은 해결책입니다. 편집 해 주셔서 감사합니다!
whuber

3

나는 질문에서 당신의 녹색 노트에 대해 매우 빠르고 무시 무시한 스케치를했습니다. 의견으로 게시 할 수 없으므로 답변이 아닌 경우에도 답변을 작성해야했습니다.
아래 이미지에는 최대 면적 사각형 (완벽하지는 않지만 아이디어를 제공하기 위해 페인트로 만든 스케치 일 뿐임)이 있다고 생각합니다. 검은 색 plygon의 테두리 ...
그러나 나는 틀릴 수있다.
페인트로 만든 빠른 스케치


3
좋은 지적 (+1). 그럼에도 불구하고 훨씬 간단한 반례가 있습니다. 일반 팔각형 내에 최대 면적 직사각형을 쓰는 문제를 고려하십시오. 솔루션의 모서리가 팔각형의 교점과 일치하고이 솔루션이 모서리에 정렬 된 내접 된 사각형보다 훨씬 크다는 것을 쉽게 알 수 있습니다 (먼저 팔각형 원 내에서 최대 정사각형을 찾아서 쉽게 증명할 수 있음).
whuber

실제로 (지금 막 큰 의구심을 가지고 있습니다), 이 다각형의 가장 작은 외부 사각형 ( 이 게시물 의 사각형 )은 측면 중 하나와 같은 방향을 얻지 못했습니까? (나는 그것을 나의 빨간 사각형과 같은 방향으로 볼 것이다)
Saryk

3
그 다각형은 볼록하지 않습니다. 원래 질문은 볼록 다각형으로 제한됩니다.
csd

2
@csd 좋은 지적이지만, 내 반례가 보여주는 것처럼 Saryk는 여전히 옳습니다. Saryk, 최소 영역 경계 사각형에는 문제가 없습니다. 볼록 껍질의 측면을 포함해야한다는 것을 쉽게 증명할 수 있습니다. (볼록 다각형의) 직사각형에 포함 된 최대 영역에는 경계에 닿는 두 개의 정점이 필요합니다.
whuber

2

대부분의 다른 알고리즘은 볼록한 다각형으로 새겨진 최대 영역 직선 직사각형을 발견하고 복잡도를 나타 O(log n)냅니다. 최대 면적 폴리곤이 측면 중 하나와 정렬되어 있다고 생각하지 않습니다. 폴리곤 n시간을 회전하기 만하면되기 때문에 복잡합니다. O(n log n)간단한 연구에서 그렇게 쉬웠다는 말을 찾으십시오.

그러나, Knauer 등의 볼록 다각형의 가장 큰 내접 사각형 종이 . al.은 정답에 가까이 갈 수있는 근사 알고리즘을 설명합니다.

알고리즘을 이해하는 가장 좋은 방법은 알려진 축 정렬 최대 영역 다각형 중 하나를 기반으로 구축 한 다음 폴리온 공간 내부의 점을 무작위로 샘플링하고 임의의 샘플에서 여러 개의 축을 생성하며 해당 축을 반복하여 축을 적용합니다 알고리즘을 각각에 맞춘 다음 해당 세트에서 가장 큰 사각형을 반환합니다.


첫 문장에 오타가 있을까요? 단순히 좌표를 읽는 것이 O (n) 연산이기 때문에 O (log (n)) 알고리즘이있을 수 없습니다!
whuber

링크가 죽었습니다
dangerousdave

1
@dangerousdave-오래 지속되는 대체 링크를 찾았습니다.
lreeder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.