2012-11-05 6 views
0

QPolygon 내부에 완전히 포함 된 정사각형 세트를 찾는 방법을 찾고 있는데, 이는 반드시 볼록하지는 않습니다. 내 순진 접근 방식은 지금까지 다음과 같습니다 : 나는 결과를 시각화하면 다음과 같습니다QPolygon에 완전히 포함 된 사각형 찾기?

QRectF boundingRect(mShape->boundingRect()); 
for (int x = boundingRect.x() - 1; x < boundingRect.width(); x++) 
{ 
    for (int y = boundingRect.y() - 1; y < boundingRect.height(); y++) 
    { 
     QRectF rect(x, y, 1, 1); 
     QPolygonF cell(rect); 
     QPolygonF intersection = mShape->polygon().intersected(cell); 
     if (!intersection.empty()) 
     { 
      // Cell is fully contained 
     } 
    } 
} 

:

Cells intersecting with the polygon are not left out

이것은 내가 세포가 교차하는 것을 제외하고, 원하는 거의이다 다각형의 "외곽선"이 없어야합니다. 누구나 폴리곤 내부에 완전히있는 사각형을 어떻게 구성 할 수 있었는지 좋은 아이디어가 있습니까?

+0

'cell.subtracted (mShape-> polygon());'빈 폴리곤이 완전히 포함되어 있으면 빈 폴리곤을 반환하고, 바깥에 뭔가가 있으면 빈 폴리곤을 반환하지 않아야합니다. –

답변

1

큰 폴리곤이 볼록하다는 가정하에 (예를 들어) 정사각형의 네 모서리가 모두 큰 폴리곤 안에 있는지 확인하면 충분합니다. 더 큰 다각형에 containsPoint 메서드를 사용하십시오.

+0

아, 죄송 합니다만, 다각형이 반드시 볼록하지는 않다는 것을 잊어 버렸습니다. 하지만 힌트를 주셔서 감사합니다. 볼록한 폴리곤은 속도가 빠를 수도 있습니다. –

+0

그렇다면 사각형 폴리곤에서 더 큰 폴리곤을 뺄 수 있습니다. 결과가 빈 다각형이면 사각형은 전체적으로 더 큰 다각형 안에 있습니다. 이것을하기 전에 네 구석을 확인하는 것도 좋은 아이디어 일 것입니다. – john

+0

만세, 고마워. 그것은 트릭을했다. –

관련 문제