2

저는이 겉으로보기에는 간단한 문제로 꽤 오랫동안 고심하고 있습니다. 나는 일련의 점들 (나는 convex hull로 단순화시켰다)을 받았고, 나의 임무는 그들 모두를 포함하고있는 사각형 (반드시 축 정렬은 아님)을 찾고, 여분의 공간이 없다는 것이다. 포인트 주위에 꼭 끼워야 함) 가능한 최대 둘레를가집니다. 최소한의 것을 찾는데 아무 문제가 없었습니다. 그러나 이것은 균열이 더 힘들다고 판명되었습니다. 최소 경계 사각형을 검색 할 때 직사각형의 변의 하나가 항상 선체의 변 중 하나와 정렬된다는 가정을 사용할 수 있었지만 여기서는 그러한 경우가 없습니다. 나는 고통스러운 명백한 것을 놓치고 있습니까? 내가 지금까지 올 수있는 유일한 방법은 직사각형의면에 투영하고 함수를 최대화하기 위해 삼각 함수를 사용할 수 있다면 대칭 쌍의 점을 테스트하는 것입니다.하지만 방금 계산을 잃어 버렸습니다.점 집합에 대한 최대 둘레 경계 사각형

미리 감사드립니다.

+0

사용한 알고리즘에 대한 링크를 게시 할 수 있습니까? 최소 경계 사각형을 45도 회전시키고 점 –

+0

(min (x), max (y)), (max (x), min (y))에 맞게 확장 할 수 있다고 생각합니다. – BLUEPIXY

답변

1

먼저, 점 집합의 볼록 선체를 계산하십시오.

이제 다각형을 회전시키고 가장 작은 축으로 둘러싸인 사각형을 계산하는 방법에 대해 생각해보십시오. 위쪽 점, 왼쪽 점, 오른쪽 점 및 아래쪽 점은 볼록한 선체 주위를 시계 방향으로 한 꼭지점에서 다음 꼭지점으로 진행합니다.

가능한 모든 각도로 명시 적으로 시도 할 수 없습니다. 그러나 스윕 라인 트릭을 수행 할 수 있습니다. 각도가 주어지면 다각형을 회전 한 후 위쪽, 왼쪽, 아래쪽 및 오른쪽 점을 계산할 수 있으며 위쪽, 왼쪽, 아래쪽 및 오른쪽 점 중 첫 번째 점을 사용하여 각도를 회전하여 ID를 변경할 수 있습니다. 다각형. 따라서 위쪽, 왼쪽, 아래쪽 및 오른쪽의 현재 선택 사항이 올바른 범위의 각도를 얻을 수 있습니다. 또한, 다음 올바른 선택, 왼쪽, 아래쪽 및 오른쪽을 알고 있습니다.

합법적으로 위쪽, 왼쪽, 아래쪽 및 오른쪽을 선택하는 경우 고정 된 a 및 b에 대한 a sin (theta) + b * cos (theta)의 최대 값을 세타. a * sin (theta) + b * cos (theta) = sqrt (a^2 + b^2) cos (theta - arctan (b/a))을 기억하자. 당신은 당신의 간격의 경계에서 함수를 평가하고 미분이 0 일 때 (arctan (b/a)와 pi 사이의 정수 배), 당신은 황금이다.