Designfrage zu beweglichen Objekten mit Vektoren



  • Hi!
    Ich arbeite gerade an einem Projekt wo sich viele Objekte bewegen sollen. Daher werde ich diese, ähnlich wie bei den Boids mit autonomen Regeln ausstatten. (siehe auch: http://de.wikipedia.org/wiki/Computeranimation#Gruppensimulation)
    Nun hab ich aber eine (Design-)Frage zu meinem Objekt. Angenommen ich hätte folgendes Objekt:

    class GraphicObject {
        private:
            Vector directionVector; //Richtung
            Vector positionVector; //Position
            Vector speed; //Geschwindigkeit
            void Draw();
        public:
            void Move();
            Vector RunRule1();
            void SetDirectionVector(const Vector &pVector); 
        //etc pp.
    };
    
    //Grundgerüst des Programmes:
    int main() {
      GraphicObject o1,o2,o2; //Drei Objekte erstellen, Konstruktor erstmal egal
      while(...) {
         o1.SetDirectionVector(o1.RunRule1()); 
         o1.move();
         o2.SetDirectionVector(o2.RunRule1());     
         o2.move();
         o3.SetDirectionVector(o3.RunRule1());
         o3.move();
      }
    }
    

    Die neue Richtung des Objektes (damit man z.B. keine anderen Objekte berührt) wird dann in RunRule1 berechnet und als neuer Richtungsvektor gesetzt.
    Wie würde dann die move Funktion aussehen?

    Ich würde sie so implementieren:

    GraphicObject::Move() {
      positionVector = positionVector + (speed * directionVector.UnitVector()); //UnitVector wäre dann der Einheitsvektor vom Richtungvektor, sodass ich wirklich nur eine Richtung hätte
      Draw();
    }
    

    Den Einheitsvektor würde ich deshalb verwenden, da dieser halt vom Betrag her die Länge 1 hat und von daher meine Position wirklich nur um die Geschwindigkeit in der Richtung des Richtungvektors versetzt wird und nicht auch noch um dessen eigene Größe.

    Wie würdet ihr das machen?
    Cya


Anmelden zum Antworten