[ DarkMan @ 24.10.2007. 18:50 ] @
Napisao sam neki svoj algoritam da odredim susedni poligon ali nisam bas zadovoljan. 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: [att_img] Algoritam za odredjivanje suseda je u zadnjoj metodi klase Polygon: Code: 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] |