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.