Autor Beitrag
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Mi 30.09.09 18:49 
Folgendes Problem:
Bei meiner Wegsuche unterteile ich die sehr große Karte in kleinere Rechteckige Teile
Da die Karte in Gebiete unterteil ist, die durch teleporter verbunden sind, klappt das recht gut
das problem: ich hab 2 verschachtelte gebiete:tmp

jetzt komme ich mit meinen schönen rechtecken nicht mehr hin und es ergeben sich einige probleme:
1) ich muss wege auf validität überprüfen: sprich: schneidet eine streck den rand des gebiets. wenn ja->fehler da weg außerhalb gebiet (u.U. Wasser)
wie kann ich das machen?
2) ich muss wissen, ob ein rechteck (ganz oder teilweise) in dem gebiet liegt
3) ich muss für eine beliebige strecke die schnittpunkt mit den ausrenrändern des gebietes ermitteln

meine idee war, statt eines TRect für die gebietsbezeichnung ein array of Trect zu nehmen
dann kann ich für 1) & 3) jeweils die schnittpunkte mit den außenrändern überprüfen und fertig
und bei 2) kann ich einfach die rectangle collisionsprüfung für alle rechtecke des gebietes ausführen (summe breiten/h.<=breite/h. umschließendes rechteck)

Problem: wie bekomme ich raus, was von den rechtecken der außenrand ist? ist ja manchmal sogar nur ein teil einer strecke


vl stattdessen ein polygon nehmen (array of TPoint)?
wie mach ich dann aber 2)?
Einloggen, um Attachments anzusehen!
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Mi 30.09.09 20:05 
Ich denke mal du möchtest herausfinden ob bei in dem konkreten "grob unterteilten" Kartenfeld eine detailiertere Wegsuche nötig ist.
Da Du auf der Basis A* - Wegsuche arbeitest kann ja kein Wegpunkt innerhalb der unerlaubten Region 1 liegen, solch einen Wegpunkt hättest Du ja nie hinzugefügt. Die Strecke kann also nicht in das Rechteck hinein sondern wenn überhaupt hindurch führen. Dann kannst Du also genauso gut eine Gerade an Stelle der Strecke verwenden. Die Aufgabe lautet also "schneidet eine Gerade ein Rechteck". Ich nehme an das die Strecke zu den Kanten des grösseren, erlaubten Rechtecks führen und die Gerade sich als "y= mx + b" bzw "x = (y-b)/m" relativ zur linken unteren Ecke des erlaubten Rechtecks darstellen läßt (Sonderfall m = 0 sollte einfach zu behandeln sein). Du setzt die x-Koordinaten des Rechtecks ein und erhältst zwei Punkte, gleiches mit den y-Koordinaten.
Diese über x- bzw. y-Koordinate ermittelten Punkte dürfen nicht "vermischt sein". Auf dem Papier erkennst Du das schneller als ich es hier erklären kann, wenn Du die Koordinaten eines erlaubten und verbotenen Rechtecks auf eine Gerade projezierst.

Grüsse, Dirk
Flamefire Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Do 01.10.09 11:30 
das problem ist das erstellen der wegpunkte ;-)
das rechteck "1" geht links noch weiter. ist also ebnfalls eine "L"-Form
gegeben ist nur Gebiet 2

beim erstellen betrachte ich erst einmal die linien der objekte
darum muss ich wissen, ob das objekt min. ansatzweise im gebiet liegt oder nicht (optimierung)
später auch ob ein punkt in dem gebiet liegt
dann brauch ich die schnittpunkte einer strecke mit den rändern des gebietes
und letzten endes noch die info, ob es einen solchen schnittpunkt gibt