Vektor um einen Punkt drehen, wie?

Neue Frage »

ollo Auf diesen Beitrag antworten »
Vektor um einen Punkt drehen, wie?
Hallöchen...

Ich habe leider nichts zu diesem Thema gefunden, vielleicht könnt ihr mir weiterhelfen:


Ich habe einen Punkt bzw. Vektor im zweidimensionalen Raum, also bspw. (4, 3). Diesen möchte ich um einen anderen Punkt, bspw. (2, 2) drehen um den Winkel ß.
Ich denke mal dass das einfachste ist, zuerst den Angelpunkt zum Nullpunkt zu machen und dann quasi um den Ursprung des Koordinatensystems zu drehen, also wäre mein Vektor (4-2, 3-2) = (2, 1). Später kann man die Koordinaten des Angelpunktes wieder addieren.

Jetzt brauche ich die Formel, die einen Vektor um den Ursprung dreht. Das dürfte wohl irgendwie über eine Matrix mit trigonometrischen Funktionen gehen, nehme ich an. (wenn ich das richtig in Erinnerung habe verwirrt )


Wer kann mir weiterhelfen?
AD Auf diesen Beitrag antworten »

Zunächst mal folgendes: Du kannst einen Punkt um einen anderen Punkt drehen, aber nicht einen Vektor um einen Punkt. Ein Vektor gibt nämlich nur eine Länge und eine Richtung an, ist aber nicht ortsgebunden - wenn du ihn also drehst, dann allenfalls um einen bestimmten Winkel, aber nicht um einen bestimmten Punkt. Letzteres ist dann aber wohl das, was du mit deiner Ursprungsverschiebung gemeint hast.

Zur eigentlichen Sache: http://de.wikipedia.org/wiki/Drehmatrix
ollo Auf diesen Beitrag antworten »

Zitat:
Original von Arthur Dent
Zunächst mal folgendes: Du kannst einen Punkt um einen anderen Punkt drehen, aber nicht einen Vektor um einen Punkt. Ein Vektor gibt nämlich nur eine Länge und eine Richtung an, ist aber nicht ortsgebunden - wenn du ihn also drehst, dann allenfalls um einen bestimmten Winkel, aber nicht um einen bestimmten Punkt. Letzteres ist dann aber wohl das, was du mit deiner Ursprungsverschiebung gemeint hast.


Du hast Recht, ein Vektor hat mathematisch natürlich keine Position im Raum. Es geht bei meinem Problem um das Zeichnen von Vektorgrafiken, da gibt es naturgemäß zu jedem Vektor (der ja eine Linie darstellt) auch einen Offset(-Vektor), der angibt wo diese Linie zu zeichnen ist. Im Endeffekt ist ja ein Punkt auch gleichbedeutend mit einem Vektor, wenn man einen Pfeil vom Ursprung zu diesem Punkt zeichnet...
Hammer

Das war jetzt zwar wohl wieder höchst missverständlich, aber auf jeden Fall danke für die schnelle Hilfe! Mit Zunge
ollo Auf diesen Beitrag antworten »

Hallöchen, es hat den Anschein als wäre das problem noch nicht ganz gelöst...

Ich habe jetzt testweise mal ein und den selben vektor 72 mal um 5° gedreht und zeichnen lassen, aber es kommt keine runde Form dabei raus wie's sein sollte, wie man auf dem angefügten Bild sehen kann...

hier mal der Ausschnitt aus dem Code, der das drehen erledigt:

code:
1:
2:
3:
4:
5:
6:
7:
public function Rotate($flDegree) {
		$flDegree = $flDegree * M_PI / 180;
		$this->flX = ((cos($flDegree) * $this->flX) + (-sin($flDegree) * $this->flY));
		$this->flY = ((sin($flDegree) * $this->flX) + (cos($flDegree) * $this->flY));
	}


ich hoffe er ist verständlich... $flDegree ist der Winkel um den gedreht werden soll (in deg), $flX und $flY sind die Koordinaten.
Ich schätze, dass ich bei der Multiplikation der Matrix mit dem Vektor einen Fehler eingebaut habe, aber wo?
Egal Auf diesen Beitrag antworten »

Da der Code an und für sich eine korrekte Umsetzung des Drehmatrixproblems ist nehme ich an das der eigentliche Fehler woanders liegen muss.
AD Auf diesen Beitrag antworten »

Typischer Fehler, ich stell mal den korrigierten Code rein:

code:
1:
2:
3:
4:
5:
6:
7:
public function Rotate($flDegree) {
		$flDegree = $flDegree * M_PI / 180;
		$tempX = ((cos($flDegree) * $this->flX) + (-sin($flDegree) * $this->flY));
		$this->flY = ((sin($flDegree) * $this->flX) + (cos($flDegree) * $this->flY));
                $this->flX = $tempX;
	}


(Ich kenne die Sprache nicht, deswegen fehlt eventuell die Deklaration der Zwischenvariable $tempX.)
 
 
ollo Auf diesen Beitrag antworten »

Argh!

Also ich programmiere ja nun schon ziemlich lange. Aber manche Flüchtigkeitsfehler macht man dann doch immer mal wieder, nur eben nicht alle 2 Wochen, sondern alle 2 Jahre...

Wenn ich bei alle 2 Dekaden angelangt bin, bin ich vorerst zufrieden (und vermutlich ca. 80)...

Danke! Das war natürlich der Fehler! Hammer
AD Auf diesen Beitrag antworten »

Mach dir nichts draus - ich hab einen ähnlich banalen Fehler selbst mal in einem Beispielcode der doch ziemlich angesehenen Computer-Zeitschrift c't entdeckt. Augenzwinkern
ollo Auf diesen Beitrag antworten »

Das ist es ja gerade, bei anderen findet man solche Fehler meist viel leichter als wenn man sie selbst gemacht hat. Derjenige der das Listing geschrieben hat war sich wahrscheinlich auch sicher, dass alles stimmt... und hat ganz bestimmt genug Ahnung und Erfahrung.
Nur die Leser werden wohl etwas dumm aus der Wäche geschaut haben... erst verwirrt , dann böse ..

Darum auch Diplomarbeiten u.Ä. niemals nur selbst Korrektur lesen... Die anderen werden dir dann schon Forum Kloppe , dann bügelt man's aus und kann Prost ...

So 'tschuldigung für diesen unnötigen, OT-Post mit zuvielen Smilies... Wink

--------------------------

Aber noch was zum Thema:
Ich könnte jetzt noch ein paar andere Methoden brauchen, um Informationen über einen Vektor zu bekommen bzw. diesen zu manipulieren.

Wie ich an die Länge eines Vektors komme, weiß ich, aber wie geht das umgekehrte? Also dass ich bspw. angeben kann, dieser Vektor soll eine Länge von 3 statt 4 haben. Wie berechnen sich die neuen Koordinaten?

Hab's mit Phytagoras versucht, bringt aber nix.

Ach, mir fällt gerade was ein: ich müsste zuerst den Winkel des Vektors ausrechnen, dann einen neuen mit der gewünschten Länge erzeugen und um diesen Winkel drehen. Ist das die einfachste Lösung?
AD Auf diesen Beitrag antworten »

Wenn du den Vektor in Koordinatendarstellung gegeben hast, ist eine Winkelberechnung vollkommen unnötig: Falls dein Vektor ist und die gewünschte neue Länge, dann ist



ein Vektor in derselben Richtung wie in der gewünschten Länge.
ollo Auf diesen Beitrag antworten »

Aua...

Da hätte ich auch selbst drauf kommen können... unglücklich

Tausend Dank nochmal, ich muss schon sagen, superhilfsbereite Community hier!!!
Bzw. hier jetzt hauptsächlich der zerfrettelte Grunzwanzling Arthur... Ich schreibe bei Gelegenheit mal eine Ode an einen kleinen grünen Vektor, den ich eines morgens in meiner Achselhöhle fand... Augenzwinkern
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »