2014-02-27 7 views
0

У меня есть фигуры рядом друг с другом, некоторые из них вставляются дважды на себя, я хочу выяснить, какой объект вставляется через получение процента пересечения двух объектов, i закодированный для сравнения одного объекта со всеми другими объектами, где я получу как 90% означает, что дублируется (вставлено дважды)
Как найти область пересечения Recangle2D в java? площадь прямоугольника areaRect=width * Height я попытался это, но не работал:Как найти область пересечения Recangle2D в java

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); 
    }} 
} 

в этом методе я получил разные значения, значит, есть пересечение, но я хотите определить процент этого пересечения, потому что, если пересечение составляет 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/(r1Area + r2Area - 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), например. 'ratio = (fr1 == 0 || f <= 0)? 0: (f/fr1); if (ratio> 1) return (1/ratio) * 100'. Это будет поддерживать значения между 0-100 – Dan

Смежные вопросы