Irgendwie konnte ich dazu nichts finden.
Ich habe einen Vektor
erstervekotr = vector(a,b,c)
Ich möchte diesen um 22,5 Grad gegen den Uhrzeigersinn drehen.
Dabei soll der y-Wert (b) immer gleich bleiben.
1.
norm(vector)
2.
... ?
3.
aneu = ...?
bneu = ...?
4.
zweitervektor = vector(aneu,b,cneu)
Ich komme leider nicht weiter.
Gruß kame
Vektor-Rotation
Öhm. Dein Text ist unverständlich.
Ansonsten...es scheint sich bei deinem Problem um ein reines Mathe-Problem zu handeln. Führe also den Vorgang per Hand auf Papier mit einem Bleistift aus und übertrage das ganze nach Python.
Python respektiert die Gesetze der Mathematik, ehrlich!
Ansonsten...es scheint sich bei deinem Problem um ein reines Mathe-Problem zu handeln. Führe also den Vorgang per Hand auf Papier mit einem Bleistift aus und übertrage das ganze nach Python.
Python respektiert die Gesetze der Mathematik, ehrlich!
Nun ja zumindest in den Grenzen, die einem die endliche Darstellung von gebrochenen Zahlen innerhalb des Rechners auferlegen.
wenn y gleich bleiben soll, ist das eine rotation in einer ebene, womit du polarkoordinaten nehmen kannst und einen vektor(x,y) drehen kannst, wobei y in diesem fall dann z des 3d ist.
also, stichwort: polarkoordinate
aus v3d(x,y,z) machst du ein v2d(x,y) mit v2d(x=v3d.x, y=v3d.z)
rechnest nun v2d in polarkoordinaten um, rotierst es dort, und rechnest wieder zurück.
also, stichwort: polarkoordinate
aus v3d(x,y,z) machst du ein v2d(x,y) mit v2d(x=v3d.x, y=v3d.z)
rechnest nun v2d in polarkoordinaten um, rotierst es dort, und rechnest wieder zurück.
Code: Alles auswählen
from decimal import Decimal
eventuell hilft dir das
wobei hier keine rücksicht auf rad/deg oder normierung nehme, weil es nur ein codesnippet aus einem 2d ballerspiel ist.
den rest musst du mit hilfe des mathebuches lösen.
Code: Alles auswählen
def rot(self, angle):
x = self.vector[0] * math.cos(angle) - self.vector[1] * math.sin(angle)
y = self.vector[0] * math.sin(angle) + self.vector[1] * math.cos(angle)
den rest musst du mit hilfe des mathebuches lösen.
Vielen Dank erstmal.
Das habe ich bisher. Aber die Vektoren sind noch nicht gleich lang.
Muss ich jetzt noch was zurückrechnen? Oder habe ich einen Fehler gemacht?
@g4borg
Deinen zuletzt geposteten Kommentar verstehe ich leider noch nicht so richtig. Hmmm.
Code: Alles auswählen
from visual import *
# Erster Vektor
axis = vector(0.8,0.6,0.9)
cylinder(pos=(0,0,0), axis=axis, radius=0.05, color=color.red)
# Neuer Vektor
axisnew = vector(0,0,0)
# 3-D Polarkoordinatenberechnung
r = sqrt(axis.x**2+axis.y**2+axis.z**2)
r_0 = sqrt(axis.x**2+axis.z**2)
phi = acos(axis.z/r_0)
theta = acos(r_0/r)
print "r:", r, "r_0:", r_0, "phi:", phi, "theta:", theta
# 2-D
axis2d = vector(axis.x,axis.z)
r2d = sqrt(axis.x**2+axis.z**2)
alpha = asin(axis.z/r2d) # Winkelbestimmung
alphaneu = alpha + pi/2
x = cos(alphaneu)*sqrt(axis.x**2+axis.y**2)
z = sin(alphaneu)*sqrt(axis.x**2+axis.y**2)
cylinder(pos=(0,0,0), axis=(x,axis.y,z), radius=0.05, color=color.green)
Muss ich jetzt noch was zurückrechnen? Oder habe ich einen Fehler gemacht?
@g4borg
Deinen zuletzt geposteten Kommentar verstehe ich leider noch nicht so richtig. Hmmm.
Doch es funktioniert jetzt mit deiner (g4borg) Variante. Vielen Dank!
http://paste.pocoo.org/show/32128/
Ich hab mal den ganzen Code gepostet. Irgendwie klappt das noch nicht mit der Drehung des Schiffes.
Die relevante Stelle findet ihr in Zeile 95!
Ihr braucht das Visual-Modul um den Code ausfuehren zu koennen. Ich wuerde mich sehr freuen wenn mir jemand weiterhelfen koennte.
Uebrigens, bei einem Klick auf die Wellen entsteht ein neues Wellenzentrum.
Und wenn man die Pfeiltasten drueckt, dreht sich das Schiff. Aber eine Sache ist faul.
Gruss kame
Ich hab mal den ganzen Code gepostet. Irgendwie klappt das noch nicht mit der Drehung des Schiffes.
Die relevante Stelle findet ihr in Zeile 95!
Ihr braucht das Visual-Modul um den Code ausfuehren zu koennen. Ich wuerde mich sehr freuen wenn mir jemand weiterhelfen koennte.
Uebrigens, bei einem Klick auf die Wellen entsteht ein neues Wellenzentrum.
Und wenn man die Pfeiltasten drueckt, dreht sich das Schiff. Aber eine Sache ist faul.
Gruss kame
Wie wär's denn mal mit Dokumentation lesen?
Auf der Inhaltsseite gibt's einen Link der mit Rotating an Object beschriftet ist. Oh Wunder, die Objekte haben eine `rotate()`-Methode. Wer hätte das gedacht.
Und eine allgemeine Funktion um Vektoren zu drehen gibt's in dem Modul auch.
Auf der Inhaltsseite gibt's einen Link der mit Rotating an Object beschriftet ist. Oh Wunder, die Objekte haben eine `rotate()`-Methode. Wer hätte das gedacht.
Und eine allgemeine Funktion um Vektoren zu drehen gibt's in dem Modul auch.
Dokumentationen lesen ist das eine. Aber sich erinnern ist das andere. Ich habe sogar in einem anderen Programm schon einmal die Rotate-Funktion benutzt, aber....
Viele Dank fuer den Tipp. Alles funktioniert jetzt bestens.
Viele Dank fuer den Tipp. Alles funktioniert jetzt bestens.