2014-02-27 41 views
0

我有对方旁边的形状,有的则是对自身粘贴两次Recangle2D相交的在Java领域,我想弄清楚通过得到两个物体相交的百分率对象粘贴,我编码单个对象与所有其他对象,在那里我会得到这样的90%相比意味着被复制(粘贴两次)
如何找到在Java Recangle2D相交的区域? 矩形的面积是areaRect=width * Height 我想这一点,但没有工作:如何找到

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),例如'比例=(fr1 == 0 || f <= 0)? 0:(f/fr1);如果(比率> 1)返回(1 /比率)* 100'。这将保持0-100之间的值 – Dan