2016-06-25 5 views
1

볼록한 다각형을 선택하고 선을 그어 크기를 조정하여 주어진 사각형에 맞추고 싶습니다.주어진 사각형에 볼록한 다각형을 맞추기

다각형을 1 °와 같이 작은 단계로 돌리고 항상 분수 (최대 수평 거리/최대 수직 거리)를 측정하고 분수 (직사각형 너비/직사각형 높이)에 가장 가까운 부분을 취한 다음 직사각형에 맞도록 크기를 조절하십시오.

"덜 원시적 인"접근 방식이 있는지 궁금합니다. 또한 최대 수평 및 수직 거리를 측정하는 것보다 "최상의 적합성"에 대한 더 나은 정의가있을 수 있습니다. 내 진짜 목적은 이미지 파일을 저장하거나 페이지에 인쇄 할 때 폴리곤을 "보기 좋게"만드는 것입니다.

+0

, 당신의 사각형의 측면 중 하나를 차례로 다각형의 각 가장자리를 정렬 시도해야 당신처럼 보인다 봐 경계 상자 계산을 수행하고 사각형에 맞는 회전이 볼 것 같다 베스트. 사람들이 직사각형에 맞춰 폴리곤 가장자리를 멋지게보고 기분이 좋아 보이기 때문에 "좋아 보인다"고해야합니다. – samgak

답변

3

rotating calipers과 같은 방법을 사용할 수 있습니다. enter image description here

회전하는 캘리퍼스 알고리즘은 두 개의 평행선이있는 정다운 정점 쌍을 찾으면 4 개의 수직선 - 경계 사각형이 필요합니다.

첫 번째 버텍스를 선택하고 반 대 버티스를 찾습니다. 첫 번째 버텍스는 첫 번째 캘리퍼스 쌍입니다.
두 번째 캘리퍼스 쌍을 첫 번째 캘리퍼 쌍과 수직으로 만듭니다.
다음 antipodal 쌍이 발견 될 때까지 (두 번째 캘리퍼스 사이 또는 두 번째 캘리퍼스 사이) - 다음 극점 각도를 결정합니다.
캘리퍼스를 계속 회전시킵니다.

경계 사각형의 너비와 높이가 극단 점 사이에서 연속적으로 달라집니다. 너비/높이 비율도 계속됩니다. 따라서 i 번째 극점 W/H < P와 (i + 1) 번째 극점 W/H> P에서 P가 필요한 비율이면, 구간 i..i + 1은 필요한 P 값 (Bolzano's theorem).

해결책이있는 간격 (있는 경우)을 발견하면이 각도 간격 (삼각 방정식)에서 캘리퍼 너비 비율을 계산하고 정확한 각도 값을 얻으십시오. 삼각 방정식은 직관적으로

Sin(A)/Sin(A + Pi/2) = F 
or 
Sin(A)/Cos(A) = Tan(A) = F