2012-05-25 2 views
1

나는 사용자가 여전히 만질 수있을 정도로 화면 경계 내에있는 CGPath의 양을 볼 수 있어야하는 iOS 응용 프로그램에서 작업하고 있습니다. 문제는 코너가 모퉁이에있을 때 경로가 구석에있을 때 일반적으로 사용하는 모든 방법 (그리고 내가 시도 할 수있는 모든 방법)이 실패한다는 것입니다. 여기 CGPath가 교차하는 영역 찾기 CGRect

은 그림이다 : enter image description here

내가 화면에 얼마나 많은 그 모양이다 계산할 수있는 방법

?

+0

정확히 무엇을 찾으십니까? 오버랩의 면적 (정사각형 포인트)을 측정 하시겠습니까? 또는 겹치는 부분 만 포함하고있는 경로 나 마스크를 원하십니까? 또는 다른 것? –

+0

CGPath가 완전히 일반화되어 있습니까? 아니면 다이어그램에 표시된 것처럼 다각형으로 보장됩니까? – Tommy

+0

@robmayoff 가능한 경우, 면적을 정사각형으로 측정하고 싶습니다. – daveMac

답변

3

명백한 대답은 픽셀 페인팅에 의해 경험적으로 또는 폴리곤 클리핑에 의해 분석적으로 수행됩니다.

경험적으로 진행하려면 뷰포트의 크기를 CGBitmapContext으로 만들고 (0, 0, 0)과 같은 알려진 색상으로 지우고, 다른 알려진 색상 인 폴리곤 (예 : 1, 1, 1) 그러면 비트 맵 컨텍스트의 모든 픽셀을 실행하고 찾은 총 수를 더합니다. 아마도 꽤 비싸지 만 저해상도 컨텍스트를 사용하면 도움이되는 경우보다 근사한 결과를 얻을 수 있습니다.

분석을 계속 진행하려면 described here과 같은 다각형 클리핑 알고리즘을 실행하여 원본에서 새 폴리곤 (실제로는 화면에있는 부분)을 파생시킵니다. 그런 다음 일반 수식 중 하나를 사용하여 그 영역을 얻습니다.

그것은 오목 아닌 볼록 다각형 클립 실제로 훨씬 쉽게, 그래서 당신의 폴리곤은 고정 된 형태의 경우 다음과 같은 ear clipping 또는 decomposition to monotone edges를 삼각 측량 알고리즘을 사용하고 클리핑 및 면적 계산을 수행하는 것이 좋습니다 원본보다는 오히려.

0

당신은이 방법을 사용하여 근사치를 얻을 수 :

  • 하자 등록이 모양의 경계 상자와 화면의 교차
  • 는 등록에 N 임의의 지점을 선택하고 그들이에 포함되어 있는지 확인 수를 형상
  • 는 형상의 영역은 사용자가 재사용의 크기에 기초하여 상기 파라미터 N을 선택할 수/* (포인트 수가 형상 포함) (등록 영역)이 N

을 추정 할 수있다 좋은 좋은 빠른 근사치를 얻으려면