locked
Problem mit Markierungen

    Frage

  • Ok, ich konnte jetzt entlich mal Anfangen den kleinen Ameisen das Denken beizubringen! :-)

    Meine Ameisen laufen noch Grundsätzlich geradeaus, es sei denn sie Sehen etwas fremdes in ihrer Sichtweite.

    Wenn die ameise ein Zuckerhaufen sieht sprüht sie eine Markierung, nimmt den Zucker und läuft Heim:
    ZielErreicht (Zucker zucker)
    {
        SprüheMarkierung(0,100);
        Nimm(zucker);
        GeheZuBau();
    }

    Und wenn eine Ameise diese Markierung sieht sollte sie sich in dessen Richtung drehen:
    Sieht(Markierung markierung)
    {
        DreheZuZiel(markierung);
    }

    Doch was  ich im Sim sehe ist anders. Die Ameisen die Zucker finden sprühen Ordnungsgemäß diese Markeirung, doch eine Ameise, die diese Markierung sieht Dreht sich weg und läuft weiter (nicht zum Zucker hin)!

    Das weiterlaufen wird ja wohl damit zusammen hängen, dass nach dem Drehen die wartet() funktion aufgerufen wird. Aber wie kommt der Drehwinkel zustande?!?!?! Ich bin auch noch nicht auf eine logig gestoßen!

    Hat jemand ne Ahnung wodran das liegen könnte?
    Samstag, 18. November 2006 17:10

Alle Antworten

  • Moin, moin.

    Also warum deine Ameise den falschen Winkel ansteuert kann ich dir nicht sagen. Ob da ein Problem in der "DreheZuZiel()" vorliegt muss Wolfgang prüfen. Du kannst eine alternative Lösung verwenden die nachweißlich funktioniert ;-)

    DreheInRichtung(Koordinate.BestimmeRichtung(
        this,
        markierung));


    Dabei greifst du auf die Hilfsmethoden der Koordianten-Klasse zurück mit der du den absoluten Winkel zwischen zwei Punkten ermitteln kannst. In diesem fall der Ameise selbst (this) und der Markierung (markierung).

    Weitere Fehlerursache könnte die Tatsache sein, dass du keine weiteren Gehbefehle an die Ameise übermittelst. versuchs mal mit einem GeheGeradeaus(); nach der Drehung? Vielleicht kollidieren da ja Befehle zwischen drehen und warten?
    Montag, 20. November 2006 12:46
  • auf das mit Koordinate.BestimmeRichtung bin ich auch schon gekommen. aber ich frage mich warum das mit DreheZuZiel nicht geht.

    In Warte() hatte ich auch nur den Befehl geheGeradeaus(), also sollts daran ja eigentlich nicht liegen!

    Wenn ich GeheZuZiel() aufrufe klappt das bei den Markierungen auch nicht so ganz!

    Kann das vll daran liegen, dass sich die Markierung schon auflöst (also verschwindet) wenn sich die Ameise noch im Drehen befindet?
    Montag, 20. November 2006 16:32
  • Hi, versuche mal

    DreheZuZiel(markierung.Information);

    Das sollte funktionieren. Da die richtungsinformation nicht in der Markierung, sondern in der Eigenschaft Information der entsprechenden Markierung "gespeichert" ist.

    Ciao SunboX
    Montag, 20. November 2006 21:54
  • @Sunbox: das wird nicht funktionieren, da es um eine allgemeine Markierung ohne Richtungsinformation geht (SprüheMarkierung(0, 100)). Also die Richtungsinformation ist null...
    Dienstag, 21. November 2006 09:26
  • In einem anderen Thread haben wir herausgefunden, daß DreheZuZiel() falsch implementiert ist. Eigentlich sollte genau der von Tom gepostete DreheInRichtung(...) Code drin stehen, aber das steht was anderes. Im nächsten Release wird das dann richtig funktionieren.
    Mittwoch, 17. Januar 2007 16:46