2014-02-27 3 views
0

나는 서로 옆에있는 모양을 가지고 있는데, 그 중 일부는 두 번 붙여 넣기가되어 있는데, 두 객체의 교차 비율을 구하는 데 붙여 넣은 객체가 무엇인지 파악하고 싶습니다. 단일 객체를 다른 모든 객체와 비교하기 위해 코딩되었는데, 여기서는 90 %처럼 중복 될 것입니다 (두 번 붙여 넣음).
Java에서 Recangle2D의 교차 영역을 찾는 방법은 무엇입니까? 교차하지만이 의미하는자바에서 Recangle2D의 교차 영역을 찾는 방법

public void perceOf2Rect(Rectangle2D r1,Rectangle2D r2){ 
    Rectangle2D rectArea=new Rectangle2D.Double(); 
    rectArea=r1.getWidth() * r2.getHeight(); 
} 

제가이 방법에 Rectangle2D.intersect 방법

public void compareLists(List<ObjectItem01> objItm1) { 
       for (int i = 0; i < objItm1.size(); i++) { 
       for (int j = 0; j < objItm1.size(); j++) { 
       if (objItm1.get(i).objectID == objItm1.get(j).objectID) { 
         continue; 
       }  
       System.out.println("objID1 "+objItm1.get(i).objectID); 
       System.out.println("objID2 "+objItm1.get(j).objectID); 
       Rectangle2D rect1 =objItm1.get(i).getRect();  
       Rectangle2D rect2 = objItm1.get(j).getRect(); 
       Rectangle2D rectResult = new Rectangle2D.Double(); 
       Rectangle2D.intersect(rect1,rect2,rectResult); 
        testIntersectResult (rect1,rect2,rectResult); 
    }} 
} 

사용하고 난 다른 값을 얻었다 : 사각형의 면적 areaRect=width * Height 난이 시도 하지만 didnt 한 작품 그 교차 부분의 비율을 결정하고 싶다면 교차 부분이 10 %라면 90 %가 중복되는 반면 내 경우는 중복되지 않기 때문에

private void testIntersectResult(Rectangle2D r1, Rectangle2D r2, Rectangle2D rectDest) { 
     System.out.println("beginning of testIntersectResult method"); 
    Rectangle2D.intersect(r1,r2,rectDest); 
    System.out.println("\nRect1:\n "+r1+"\nRect2:\n "+r2+"\nrectResult:\n "+rectDest); 
} 
+1

어쩌면 나는이 질문을 오해하고있다. 그러나 [내장 된 'Rectangle2D # intersect' 메소드] (http://docs.oracle.com/javase/7/docs/api /java/awt/geom/Rectangle2D.html#intersect%28java.awt.geom.Rectangle2D,%20java.awt.geom.Rectangle2D,%20java.awt.geom.Rectangle2D%29)? – Vulcan

+0

나는 그것을 사용하고있다. 단지 각 객체의 백분율 값이 중복 된 모양인지 아닌지를 알아 내고 싶다. – a14

+0

그것은 당신의 질문에 포함시킬 것이었다. : P intersectArea /()를 사용하여 교차의 비율을 찾을 수있다. r1 영역 + r2 영역 - intersectArea)'. – Vulcan

답변

1
public double perceOf2Rect(Rectangle2D r1, Rectangle2D r2){ 
    Rectangle2D r = new Rectangle2D.Double(); 
    Rectangle2D.intersect(r1, r2, r); 

    double fr1 = r1.getWidth() * r1.getHeight();    // area of "r1" 
    double f = r.getWidth() * r.getHeight();     // area of "r" - overlap 
    return (fr1 == 0 || f <= 0) ? 0 : (f/fr1) * 100;   // overlap percentage 
} 
+0

백분율은 100.0에서 시작하여 교차로를 기준으로 증가했지만 0에서 100 % 사이가 아닙니까? – a14

+0

@AboAbdullah 매개 변수/사각형은 무엇입니까? –

+0

결과> 1 (* 100 곱하기 전에) 인 경우 몫을 반전해야합니다. '비율 = (fr1 == 0 || f <= 0)? 0 : (f/fr1); if (ratio> 1) return (1/ratio) * 100'입니다. 0-100 사이의 값을 유지합니다. – Dan

관련 문제