AntMe! - Polarkoordinaten
-
Hallo zusammen,
bin zur Zeit fleißig am Ameisenzüchtenund wollte, wie im Netz so oft erwähnt, Ameisen mit Polarkoordinaten zum Ziel bringen. Ich habe das nun so verwirklicht:
Polarkoordinaten herausfinden:
public static Polarkoordinaten Polarkoordinaten(CoreAnt objekt) { Polarkoordinaten ret = new Polarkoordinaten(); //Objekt zum Zurückgeben ret.Entfernung = Koordinate.BestimmeEntfernung(DB.Bau, objekt); ret.Winkel = Koordinate.BestimmeRichtung(DB.Bau, objekt); return ret; }
Polarkoordinaten in Kartesische umwandeln und umgekehrt:
public static KartesischeKoordinaten KoordinatenUmwandeln(Polarkoordinaten koordinaten) { KartesischeKoordinaten ret = new KartesischeKoordinaten(); ret.X = (float)Math.Cos(koordinaten.Winkel * Math.PI / 180) * koordinaten.Entfernung; ret.Y = (float)Math.Sin(koordinaten.Winkel * Math.PI / 180) * koordinaten.Entfernung; return ret; } public static Polarkoordinaten KoordinatenUmwandeln(KartesischeKoordinaten koordinaten) { Polarkoordinaten ret = new Polarkoordinaten(); if (koordinaten.X == 0.0f) { ret.Winkel = 90.0f; } else { ret.Winkel = (float)Math.Atan(koordinaten.Y / koordinaten.X) * 180 / (float)Math.PI; if (ret.Winkel < 0.0f) { ret.Winkel += 360.0f; } } ret.Entfernung = (float)Math.Sqrt(koordinaten.X * koordinaten.X + koordinaten.Y * koordinaten.Y); return ret; }
Bewegefunktion
public static void GeheZuKoordinaten(Basisameise ameise, Polarkoordinaten ziel) { Polarkoordinaten pAmeise = Polarkoordinaten(ameise); KartesischeKoordinaten kAmeise = KoordinatenUmwandeln(pAmeise); Polarkoordinaten pZiel = ziel; KartesischeKoordinaten kZiel = KoordinatenUmwandeln(pZiel); KartesischeKoordinaten kVektor = new KartesischeKoordinaten(); kVektor.X = kZiel.X - kAmeise.X; kVektor.Y = kZiel.Y - kAmeise.Y; Polarkoordinaten pVektor = KoordinatenUmwandeln(kVektor); ameise.DreheInRichtung((int)pVektor.Winkel); ameise.GeheGeradeaus((int)pVektor.Entfernung); }
Das Problem ist folgendes: Wenn ich nun in der Wartet()-Methode befehle:
Polarkoordinaten koord = new Polarkoordinaten(); koord.Entfernung = 100; koord.Winkel = 45; GeheZuKoordinaten(ameise,koord);
Dann gehen die Ameisen zum Ziel, aber nach einer gewissen Zeitspanne gehen sie weiter in eine andere Richtung, anstatt zu warten.
Wenn jemand sich die Zeit genommen hat, sich meine Quelltexte durchzulesen, der weiß, wo der Fehler liegt, freue ich mich über eine Antwort! :p
danke im voraus
mfg paulrei
-
Was mir beim ersten Überfliegen des Codes auffällt: Die Umrechnung kartesisch nach polar liefert nur Winkel im Bereich -90°..+90° - hat denn C# kein äquivalent zu atan2?
-
Doch, danke, CStoll - jetzt funktioniert's! Wusste ger nicht dass das einen unterschied macht...
-
Okay, noch ein problem: kann man irgendwie die Spielfeldgröße herausfinden, weil die ja je nach anzahl der völker variieren kann??? Oder die entfernung zum rand???