locked
Problem (oder Bug) mit DreheZuZiel()

    Frage



  • Hallo,

    verstehe die entweder die Funktion DreheZuZiel() oder die Bedeutung des Variable Restwinkel nicht. Wenn man folgenden Code ausführt(in diesem Beispiel wird angenommen das beim Start gilt: Richtung=270 RestWinkel =0;).

    CodeBeispiel:

      GeheZuBau(); //setzt Variable Ziel auf das Objekt bau
      DreheZuZiel(Ziel);//dreht die Ameise in Richtung ziel

    jetzt sollte angenommen werden, dass sich die Ameise noch nicht bewegt hat, und deswegen die Richtung immer noch auf 270 steht, und der RestWinkel auf 225 geht(wenn Drehsinn mathematisch positiv).

    Das ist aber nicht der Fall. Die Richtung bleibt wie erwartet, jedoch der RestWinkel wird 90.
    Debuggt man DreheZuZiel() erfährt man folgendes:

    /// <summary>
    /// Dreht das Insekt in die Richtung des angegebenen Ziels.
    /// </summary>
    /// <param name="ziel">Ziel</param>
    public void DreheZuZiel(IKoordinate ziel) {
        RestWinkel = ziel.Koordinate.Richtung - koordinate.Richtung;
    }

    Werte aus dem Debugger:

    ziel.Koordinate.Richtung=0
    koordinate.Richtung=270
    Abgezogen kommt dann -270 Grad raus, was 90 Grad entspricht. Es wird also richtig gerechnet, aber warum mit diesen Werten?

    Ok, ich versteh natürlich warum ziel.Koordinate.Richtung=0 ist. Der Bau hat keine Richtung in die er sich bewegen könnte. Aber warum ist die Rechnung so? Da müsste doch mit Koordinate.BestimmeRichtung(...) gearbeitet werden oder?

    Also, wenn mir das mal einer Erklären könnte. Große Verwirrung.

    Gruß Joe
    Mittwoch, 29. November 2006 20:15

Alle Antworten

  • Hallo Joe,

    Wie es scheint, hast Du einen Bug gefunden. Die Methode DreheZuZiel() sollte wohl besser in etwa so aussehen:

    public void DreheZuZiel(IKoordinate ziel) {
      DreheInRichtung(Koordinate.BestimmeRichtung(this, ziel));
    }

    Wenn ich darüber nachdenke, habe ich DreheZuZiel() selbst glaube ich nie benutzt. Nach einem GeheZuBau() ist es nämlich nicht nötig, sich extra dorthin zu drehen. Das Feld Ziel eines Insekts (nicht der Parameter ziel der Methode von eben) wird durch GeheZu(...) bzw. GeheZuBau() gesetzt und das Drehen zu diesem Ziel erfolgt dann automatisch. Gut, daß es das Forum gibt :-)

    Gruß,
    Wolfgang

    PS: Uwe, T-Shirt ;-)

    Mittwoch, 29. November 2006 22:08
  • Hi,

    naja für meinen Anwendungsfall ist es nötig. Warum verrat ich nicht(noch nicht).

    Bedeutet es dass das in einer späteren Version verbessert wird?


    Gruß Joe
    Donnerstag, 30. November 2006 08:19