2010-11-22 3 views
0

J'ai créé la méthode blindSearch afin d'écrire l'algorithme convexHull. mais cela ne fonctionne pas bien, et ne supprime pas les points internes. Pourriez vous m'aider s'il vous plait?aide pour l'exécution d'un algorithme

public Point pnt[] = new Point[1000000]; 
public Point temp[] = new Point[1000000]; 
private int count = 0; 
private int pointCount = 0; 
Point point1; 
Point point2; 
Point point3; 
Point temp1; 
Point temp2; 

....

et la méthode blindSearch:

 public void blindSearch() 
    { 
     if(pointCount<3) 
     { 
     if(pointCount == 1) 
      System.out.print("Done!"); 
     else if(pointCount == 2) 
     { 
      point1 = pnt[0]; 
      point2 = pnt[1]; 
      draw2points(this.getGraphics()); 

     } 
    } 
    for(int i = 0; i<pointCount - 2 ; i++) 
    { 
     for (int j = 1; j<pointCount - 1; j++) 
     { 
      for (int k = 2; k<pointCount ; k++) 
      { 
       Point p1 = pnt[i]; 
       Point p2 = pnt[j]; 
       Point p3 = pnt[k]; 
       point1 = p1; 
       point2 = p2; 
       point3 = p3; 

       for(int m = 3; m <pointCount ; m++) 
       { 
        if(det(point1, point2, point3, p[m])) 
        { 
         remove(m); 
        } 

       } 

      } 
     } 
    } 
    for(int i = 0; i<count - 1;i++) 
    { 
     for(int j = 1; j<count; j++) 
     { 
      temp1 = temp[i]; 
      temp2 = temp[j]; 
      finaDrawing(this.getGraphics()); 
     } 
    } 

} 
private void finaDrawing(Graphics graphics) { 
    graphics.drawLine(temp1.x, temp1.y, temp2.x, temp2.y); 

} 
public boolean det(Point pt1, Point pt2, Point pt3, Point pt4) 
    { 
     int det1 = pt1.x*(pt2.y-pt4.y)-pt2.x*(pt1.y-pt4.y)+pt4.x*(pt1.y-pt2.y); 
     int det2 = pt2.x*(pt3.y-pt4.y)-pt3.x*(pt2.y-pt4.y)+pt4.x*(pt2.y-pt3.y); 
     int det3 = pt3.x*(pt1.y-pt4.y)-pt1.x*(pt3.y-pt4.y)+pt4.x*(pt3.y-pt1.y); 
     if (det1>0 && det2>0 && det3>0) 
      return true; 
      else 
       return false; 


    } 
    public void remove(int n) 
    { 
     for(int i = 0; i<count; i++) 
     { 
      if(temp[i] == pnt[n]) 
      { 
       for(int j = i+1;j<count; j++) 
       { 
        temp[j-1] = temp[j]; 
       } 
       count--; 

      } 

     } 

    } 

Répondre

2

Vous devez utiliser equals au lieu de == pour comparer les objets point. == vérifie que les deux valeurs se réfèrent au même objet, ce qui n'est pas toujours ce que vous voulez.

if(temp[i].equals(pnt[n])){ 

} 
+0

Je l'ai fait mais il n'a pas changé –