Hi,
hier die Routine, welche prüft, ob das Feld betreten werden darf.
Diese Routine wird innerhalb des A* hier aufgerufen (via udValid()):Code:int Navigation::FeldFrei(int x, int y, void *p) { int i; unsigned long lngOffset; // Daten offset in der Karten char *pointer; // Daten pointer if (x > KARTENGROESSE-2) return false; // Bereichskontrolle x if (y > KARTENGROESSE-2) return false; // Bereichskontrolle y if (x < 2 ) return false; // Zu nah am Rand if (y < 2 ) return false; // Zu nah am Rand pointer = (char*)p; // Pointer von Basisadresse legen lngOffset= x + (y * KARTENGROESSE); // Y Adresse in der Karten ermitteln pointer += lngOffset; // Adresse berechnen if (*pointer > 20) return false; // Mit groesser Sicherheit ein Hindernis ! // Pruefe inneren Roboterbereich / aesserer Bereich erster Teil for(i=0;i<8;i++) { if( *(pointer + InnerArray[i]) > 20 ) // Ist eine Schwellwert überschritten return false; // Ist ein Hindernis im Inneren Kreis if( *(pointer + OuterArray[i]) > 20 ) // Ist eine Schwellwert überschritten return false; // Ist ein Hindernis im aeusseren Kreis } // Pruefe auesseren Roboterbereich for(i=8;i<16;i++) { if( *(pointer + OuterArray[i]) > 20 ) // Ist eine Schwellwert überschritten return false; // Ist ein Hindernis im Aeusseren Kreis } return true; // Feld kann betreten werden }
Die Seite von "Patrick Leste" ist mir bekannt und sie war schon eine gute Hilfe:Code:void CPathFinder::CreateChildren(_asNode *node) { int x = node->x; // X / Y Werte aus performancegruenden int y = node->y; // in lokale Variablen for (int i=-1;i<2;i++) // Durchsuche alle umgebenen Knoten fuer den Weg { for (int j=-1;j<2;j++) // in alle Richtungen { if (i == 0 && j == 0 || // Ist der aktuelle Knoten aktiv ! !udValid(x+i, y+j, m_pCBData)) // oder darf dieses Feld nicht betreten werden { continue; // Dann Schleife hier abbrechen (kein Linkchild) } LinkChild(node, x+i, y+j); } } }
Leider sind die Links für eine "falsche Heuristik" für mich nicht klar genug.
Leider kann ich seine Implemetierung nicht mit der meinigen vergleichen.
Gruss Ritchie
P.S: Fehler in der KostenRoutine gefunden . Überbewertet.







Zitieren

Lesezeichen