Drehen Sie ein 3D - Punkt, um ein weiteres

Ich habe eine Funktion in meinem Programm dreht sich ein Punkt (x_p, y_p, z_p), der um einen anderen Punkt (x_m, y_m, z_m) durch die Winkel w_nx & w_ny. Die neuen Koordinaten werden gespeichert in der globalen Variablen x_n, y_n, und z_n. Rotation um die y-Achse (also die änderung Wert der w_nx - so, dass die y - Werte sind nicht beschädigt) funktioniert, aber sobald ich eine rotation um die x - oder z - Achse ändern Sie den Wert von w_ny) die Koordinaten sind nicht genau mehr. Ich bemerkte auf der Linie ich denke, mein Fehler ist, aber ich kann nicht herausfinden, was falsch mit, dass-code.

Kann mir jemand helfen?

void rotate(float x_m, float y_m, float z_m, float x_p, float y_p, float z_p, float w_nx ,float w_ny)
    {
        float z_b = z_p - z_m;
        float x_b = x_p - x_m;
        float y_b = y_p - y_m;
        float length_ = sqrt((z_b*z_b)+(x_b*x_b)+(y_b*y_b));
        float w_bx = asin(z_b/sqrt((x_b*x_b)+(z_b*z_b))) + w_nx;
        float w_by = asin(x_b/sqrt((x_b*x_b)+(y_b*y_b))) + w_ny; //<- there must be that fault
        x_n = cos(w_bx)*sin(w_by)*length_+x_m;
        z_n = sin(w_bx)*sin(w_by)*length_+z_m;
        y_n = cos(w_by)*length_+y_m;
    }
  • Wenn Ihr mit opengl ich bin sicher, dass eine Grafik-Bibliothek hätte eine matrix und Vektoren implantation, die Sie verwenden können. drehen Sie einen Punkt über eine matrix vereinfachen Sie Ihren Algorithmus.
  • Meinst du die "Umsetzung"? 😉
  • Wenn Sie nicht bereits vertraut mit dem Begriff, Sie sollten Lesen, auf "Gimbal Lock". Ich kann nicht sofort sagen, ob dein code könnte darunter leiden, aber es ist ein häufiger Fehler, wenn du tust diese Art der rotation mit "Euler-Winkel".
  • ich habe versucht, zu verwenden glrotatef, aber es dreht sich nur die Zeichnung, nicht die Koordinaten der Eckpunkte, und ich brauche, um zu drehen Sie die Koordinaten, um zu prüfen, Kollisionen!
InformationsquelleAutor Andi Faust | 2012-11-07
Schreibe einen Kommentar