2009-09-17 4 views
9

다양한 화면상의 스프라이트를 그리는 그리기 함수를 작성했습니다. 이러한 스프라이트는 한 점까지만 중첩 될 수 있습니다. 그것들이 많이 중첩되면 너무 어둡게됩니다. 결과적으로이 스프라이트가 너무 많이 겹쳐 졌는지 감지해야합니다. 운좋게도 문제는 스프라이트가 직사각형으로 처리 될 수 있다는 점에서 단순화되었습니다. 이 직사각형이 얼마나 겹쳐져 있는지 알고 싶습니다. 지금 당장은 하나의 직사각형에있는 각 픽셀을 테스트하여 다른 픽셀이 포함되어 있는지 살펴 봅니다. 나는 이것을 세고 겹치는 비율을 계산합니다. 나는 아마 더 나은, 덜 무차별 한 접근 방식이 있다고 생각합니다. 이것을 결정하기 위해 어떤 알고리즘을 사용할 수 있습니까?두 직사각형의 겹침 비율을 어떻게 계산할 수 있습니까?

저는 wxwidgets를 사용하고 있습니다.

+0

을 지금까지 가지고 무엇입니까? 이 숙제가 있니? – Donut

+0

냄새가 숙제인가요? –

+1

숙제 문제입니까? 또한 "백분율"을보다 명확하게 정의하는 것을 고려해야합니다. 귀하의 질문은 최소한 두 가지 방법으로 해석 할 수 있습니다. 예를 들어, 하나의 사각형 대신 두 개의 사각형이 모두 차지하는 전체 덮여있는 영역의 비율 또는 rect2로 덮여있는 rect1의 면적 비율입니다. – jprete

답변

9

결과는 당신이 중복 비율을 정의하는 방법에 따라 달라집니다, 대칭을 유지하기 위해, 나는 이런 식으로 코딩 것 :

double CalculatePercentOverlap(const wxRect& rect1, const wxRect& rect2) 
{ 
    wxRect inter = rect1.Intersect(rect2); 
    if (inter.IsEmpty()) 
    return 0; 
    return (double)(inter.GetWidth()*inter.GetHeight()) * 2.0/
    (double)(rect1.GetWidth()*rect1.GetHeight() + 
      rect2.GetWidth()*rect2.GetHeight()); 
} 
+0

아하 당신은 훌륭합니다. intersect 함수를 몰랐습니다. 이봐, 사람들은 숙제에 관한 질문처럼 화가 나있다. 나는 내 질문에 너무 간결했다. 그래서 나는 그것을 삭제할 것입니다. 삭제를하면 포인트를 삭제할 수 있습니까? 감사. – max

+0

wxRect 객체가 축과 평행하지 않은 직사각형을 처리합니까? – baumgart

+1

@max - 그의 담당자가 다시 계산되면 포인트가 제거되며, 결국 –

관련 문제