Da bi bilo lakse za testiranje algoritma napravio sam primer. Pretrazivanje se odvija kada korisnik pritiska tastere strelica gore, dole, levo i desno. U gornjem delu mi je jos i nekako ok, ali mi se odredjivanje suseda u donjem delu ne svidja. Primer izgleda ovako:
Algoritam za odredjivanje suseda je u zadnjoj metodi klase Polygon:
public static int NextPolygon(List<Polygon> polygons, int current, Keys direction)
{
if(polygons != null && polygons.Count > 0 && current >= 0 && current < polygons.Count) {
Point currentCenter = polygons[current].Center;
int min_index = -1;
double min_dist = -1;
for(int i = 0; i < polygons.Count; i++) {
if((direction == Keys.Up && polygons[i].Center.Y < (currentCenter.Y - 4)) ||
(direction == Keys.Down && polygons[i].Center.Y > (currentCenter.Y + 4)) ||
(direction == Keys.Left && polygons[i].Center.X < (currentCenter.X - 4)) ||
(direction == Keys.Right && polygons[i].Center.X > (currentCenter.X + 4))) {
double dist = PointDistance(currentCenter, polygons[i].Center);
if(min_dist < 0 || dist < min_dist) { min_dist = dist; min_index = i; }
}
}
return min_index;
}
return -1;
}
Poligoni se sastoje od 4 tacke. Metodi se prosledjuje lista svih poligona, indeks tekuceg i kojeg suseda trazimo.
U mom algoritmu sam trazio najmanje rastojanje od poligona i to samo od poligona koji se nalaze na zeljenoj strani (ako se trazi gore onda samo ako je centar poligona iznac centra tekuceg, itd...)
Ako poligon nije pronadjen vraca se -1.
Ako neko zna bolje resenje neka postavi.
Primer je napisan u C#.
[Ovu poruku je menjao DarkMan dana 25.10.2007. u 13:47 GMT+1]