2015-09-06 57 views
2

我的屏幕絕對點列表像波紋管:如何比較絕對座標

355.2599 : 408.4894 
353.31705 : 409.43512 
341.44516 : 418.35184 
329.3344 : 427.5607 
314.9433 : 435.21622 
304.6277 : 440.36212 
292.61746 : 444.36887 

,我有一些其他的點象下面這樣:

160.66528 : 513.35834 
319.33472 : 230.71161 
304.3659 : 479.40076 

我怎麼能知道第二點是在第一點? 例如,當不同的點數小於10 dp時,應該返回found;

private boolean checkValidate(List<Point> first, List<Point> second) 
{ 
    int accuracy = Helper.dpToPixel(this, 10); 
    int pointSize = first.size(); 
    int pointFlag = 0; 
    List<Boolean> poinsValidation = new ArrayList<>(); 
    for(Point line : second) 
    { 
     if(pointSize != 0 && pointFlag < pointSize) 
     { 
      if(Math.abs(first.get(pointFlag).x - line.x) <= accuracy && Math.abs(first.get(pointFlag).y - line.y) <= accuracy) 
      { 
       poinsValidation.add(true); 
       pointFlag++; 
      } 
     } 

    } 
    if(poinsValidation.size() == first.size()) 
    { 
     return true; 
    } 
    return false; 
} 
+0

您的相關代碼在哪裏? –

+1

我已經添加了。謝謝 –

+0

因爲我想知道所有的第一點是否被識別或者沒有 –

回答

0

我會建議通過這兩個數組嵌套循環。雖然嵌套循環並不是首選,但在這個階段,我想不出另一種方式來做到這一點。

private boolean checkValidate(List<Point> first, List<Point> second) 
{ 
    int accuracy = Helper.dpToPixel(this, 10); 
    int pointSize = first.size(); 
    int pointSize2 = second.size(); 
    int pointFlag = 0; 

    List<Boolean> poinsValidation = new ArrayList<>(); 
    for(Point line : second) 
    { 
     for(Point points: first){ 
      if(pointSize != 0 && pointSize2 != 0 && pointFlag < pointSize) 
      { 
       if(Math.abs(points.x - line.x) <= accuracy && Math.abs(points.y - line.y) <= accuracy) 
       { 
        poinsValidation.add(true); 
        pointFlag++; 
       } 
      } 
     } 

    } 
    if(poinsValidation.size() == first.size()) 
    { 
     return true; 
    } 
    return false; 
} 

讓我知道這是否有幫助。