Problem mit Vektor rotieren



  • also ich schreibe gerade an einer vektorklasse, ich habe für jede instanz einen Tail(anfang des vektors) und eine direction(x-bewegung,y-bewegung)

    das problem liegt jetzt beim rotieren:

    bis jetzt habe ich folgendes:

    double hx = this->tail.getXCoord() + sin(angle / 180.0 * PI) * this->getLength();
    

    damit wird ja immer von einem ausgangspunkt gerechnet, aber die richtung des vektors wird da nicht mit einberechnet, nun weiß ich nicht wie ich weiter machen soll :-(, damit richtig rotiert wird



  • Nochmal: Was ist das Problem? Die Rotation ist reine Schul-Geometrie. Mal Dir das doch mal auf.



  • Noch ein Tipp:
    Du solltest Dir Gedanken machen wie ein Vektor definiert ist. Das was du da
    machst, sieht mir ein ganzes Stück anders aus. Ein Vektor hat keinen "Tail",
    sondern nur eine Richtung.
    Wegen der Rotation: Genau, mal es Dir auf.



  • Chuck schrieb:

    Noch ein Tipp:
    Du solltest Dir Gedanken machen wie ein Vektor definiert ist. Das was du da
    machst, sieht mir ein ganzes Stück anders aus. Ein Vektor hat keinen "Tail",
    sondern nur eine Richtung.
    Wegen der Rotation: Genau, mal es Dir auf.

    Wie definierst du "Richtung"?
    Ein Vektor ist lediglich ein Element eines Vektorraumes. 🕶



  • Das weiß ich. Ich bezog mich ja nur auf uhsuhz' "Definition" eines Vektors und
    dessen Komponente "direction", damit er einen besseren Bezug zu dem hat, was
    ich meine. Mit exakteren mathematischen Begrifflichkeiten, so dachte ich,
    verwirre ich ihn nur bzw. gebe ich ihm nicht das Gefühl, auf sein Problem
    einzugehen.



  • @ chuck ja ich weiß dass der vektor keinen Tail hat, aber da es leichter zu handhaben im programm ist, habe ich es dazugefuegt

    Das problem ist dass wir in der schule noch nicht alles gesehen haben von vektoren,... eigentlich haben wir erst die grudbegriffe gesehen in der schule^^



  • wenn du dich für eine numerische berechnung von drehungen im zwei oder dreidimensionalen raum interessierst, hilft dir bestimmt http://de.wikipedia.org/wiki/Drehmatrizen weiter.

    mfg stefan



  • @t0rb3n:
    Ich denke, wenn uhsuhz in der Schule erst bei der Einführung zu Vektoren ist,
    dann bringt ihm das auch nicht weiter.

    Ich denke mit http://www.siggraph.org/education/materials/HyperGraph/modeling/mod_tran/2drota.htm
    könntest du, uhsuhz, aber etwas anfangen.



  • jup danke sehr hilfreich, die seite



  • also habs jetzt hinbekommen 🙂

    Werde mal meine methode posten(ist wahrscheinlich ziemlich ineffizient^^)

    Point temp = this->tail;
    this->tail = origin; 
    double hx = this->getHead().getXCoord() * cos(angle / 180 * PI) - this->getHead().getYCoord() * sin(angle / 180 * PI);
    double hy = this->getHead().getYCoord() * cos(angle / 180 * PI) + this->getHead().getXCoord() * sin(angle / 180 * PI);
    this->tail = temp;
    this->setHead(Point(hx+tail.getXCoord(),hy + tail.getYCoord()));
    


  • Morgen.

    Also wegen der Effizienz kann man sagen:
    1. "angle" sollte im Bogenmaß sein (einfach um Multiplikationen zu sparen)
    2. ich weiß zwar nicht, was "getHead" genau macht, aber warum veränderst du
    "tail"?

    Angenommen "head" wäre jetzt einmal der "richtige" Vektor, also ein Element des
    2dimensionalen Vektorraumes, dann wäre (hx, hy) schon der gedrehte Vektor.

    Weiterhin angenommen, "head" und "tail" sind der "Anfangs-" und "Endpunkt" des
    "richtigen" Vektors, dann müsstest du (hx, hy) zu head und zu tail
    addieren.

    Grüße



  • Also was ich genau mache:

    GetHead errechnet den punkt wo der vektor endet(also die spitze) im 2D Feld

    ich habe zuerst den ausgangspunkt des vektors auf 0,0 im kartensystem gesetzt und dann den vektor gedreht und schließlich wieder den Anfangspunkt zurück auf die aleten koordinaten gesetzt, anschließend addiere ich einfach die werte zu dem anfangspunkt und erhalte so den endpunkt, anschlißend sage ich dem vektor dass er einen neuen endpunkt nehmen soll und dann die neue direction errechnet(Head ist kein element von vektor)



  • Okay, dann ist deine Lösung, außer mit der Sache des Bogenmaßes, die
    effizienteste. Obwohl ich sagen muss, dass mir deine Vektor-Implementation nicht
    gefällt. Aber über Geschmack lässt sich bekanntlich nicht streiten.



  • wäre besser wenn ich tail rausnehmen und nur "direction" speichere, also

    das was man beim vektor mit angibt

    v ( 5 )
    ( 7 )

    die funktionen brauchen dann eben nur einen punkt, sollte ich in 2D rechnen



  • Das kommt ganz darauf an, was du machen willst mit deiner Vektor-Klasse. Ein
    fremder User dieser Klasse würde aber eher die konventionelle Implementation
    erwarten.


Anmelden zum Antworten