3d-rotation um den Ursprung
Ich weiß es gibt viele Fragen über die 3d-Drehung, die bereits beantwortet wurden hier aber alle von Ihnen scheinen befassen sich mit Rotations-Matrizen und Quaternionen in OpenGL (und ich weiß nicht wirklich, wenn ich die gimbal-lock). Ich brauche, um die 3d-Koordinaten EX:(x,y,z) eines Punktes, werden müssen immer den gleichen Abstand, ich nenne es "d" für jetzt, die von der Herkunft. Die einzige information, die ich als Eingang ist der deltax und deltay der Maus über den Bildschirm. So weit hier ist, was ich versucht habe:
Erste:
thetaxz+=(omousex-mouseX)/( width );
thetaxy+=(omousey-mouseY)/( height);
(thetaxy ist der Winkel im Bogenmaß auf der x -, y-Achse und thetaxz auf der x -, z-Achse)
(Ich Grenze die beiden Winkel, so dass, wenn Sie weniger als oder gleich 0 ist Sie gleich 2*PI)
Zweite:
pointX=cos(thetaxz)*d;
pointY=sin(thetaxy)*d;
(pointX ist der Punkt die x-Koordinate und Spitze ist die y)
Dritte:
if(thetaxz)<PI){
pointZ=sqrt(sq(d)-sq(eyeX/d)-sq(eyeY/d));
}else{
pointZ=-sqrt(abs(sq(d)-sq(eyeX/d)-sq(eyeY/d)));
}
(sq() ist eine Funktion, die Quadrate und abs() ist eine absolute value-Funktion)
(pointZ sollte der Punkt z-Koordinate und es ist außer bei der Kreuzung zwischen der positiven z-Hemisphäre und negativen z-Hemisphäre. Wie es nähert sich dem Rand der Punkt wird weiter gedehnt, als die Distanz, die es angeblich immer auf der x-und y-und die scheinbar zufällig um 0.1-0.2 Bogenmaß von thetaxz die z-Koordinate wird NAN oder undefined)
Ich habe darüber nachgedacht für eine Weile, und ehrlich ich bin Schwierigkeiten haben, sich zu verziehen, meinen Kopf um das Konzept der Quaternionen-und Rotations-Matrizen jedoch, wenn Sie mir zeigen, wie man mit Ihnen erzeugen die tatsächlichen Koordinaten ich wäre froh, zu lernen. Ich würde trotzdem lieber, wenn ich könnte einfach einige Trigonometrie in wenigen Achse. Vielen Dank im Voraus für jede Hilfe, und wenn Sie mehr Informationen benötigen, bitte einfach Fragen.
Hinweis/last-minute-Idee: ich denke, dass es möglicherweise etwas zu tun mit der z-position Auswirkungen auf die x-und y-Positionen zurück, aber ich bin mir nicht sicher.
EDIT: ich zeichnete ein Diagramm:
- Ich bin mir nicht 100% das ist genau das, was Sie wollen, aber ich denke, vielleicht möchten Sie sich in gluUnProject, um die Umwandlung von 2D Koordinaten in 3D-lieben basiert auf einer Kamera-Matrizen. Tun Sie dies für einen Punkt auf der in der Nähe von & Kamera der Gegenseite Sie Ebenen, und verwenden Sie dann einige trig zu finden, den Punkt auf die resultierende Linie, die den gewünschten Abstand vom Ursprung. Beachten Sie, dass es 0, 1 oder 2 Lösungen für dieses problem, obwohl, je nach Linie
- Können Sie das ursprüngliche problem ein wenig klarer, vielleicht mit einem Bild?
- Hinzugefügt habe ich ein Bild verlinken, da ich nur 1 rep, weil ich bin neu auf dieser Seite.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wirklich wollen, dass jeder Erfolg in diesem, du wirst in den sauren Apfel beißen und erfahren Sie mehr über Drehung Matrizen und /oder Quaternionen Rotationen. Möglicherweise gibt es andere Möglichkeiten, das zu tun, was Sie wollen, aber rotation Matrizen und Quaternionen-Rotationen verwendet werden, einfach weil Sie weit verbreitet und unter den einfachsten Mitteln auszudrücken und Anwendung von Rotationen auf Vektoren. Jede andere Darstellung jemand mit oben kommen kann, wird wohl immer ein komplexer Neuformulierung einer oder beide von diesen. Es kann In der Tat gezeigt werden, drehen ist ein lineare transformation und so kann ausgedrückt werden als eine matrix. Quaternionen Rotationen sind nur eine vereinfachte Methode der rotierenden Vektoren in 3D, und daher haben die gleichen matrix-Darstellungen.
Sagte, es klingt wie Sie interessiert sind, greifen Sie ein Objekt in Ihrer Szene mit der Maus klicken und drehen in eine Natürliche Art und Weise. Wenn das der Fall ist, sollten Sie sich die ArcBall - Methode (es gibt zahlreiche Beispiele möchten Sie vielleicht vorbei zu schauen). Dies noch erfordert, dass Sie wissen, somehting der Quaternionen. Sie finden auch, dass ein zumindest minimales Verständnis der grundlegenden Aspekte von lineare algebra hilfreich sein wird.
Update: Basierend auf das Diagramm und die Kommentare, die es enthält, es sieht aus wie alles, was Sie wirklich versuchen zu tun ist, zu konvertieren Sphärische Koordinaten zu Kartesische Koordinaten. Solange wir uns einig über die Schreibweise, das ist einfach. Lassen θ der Winkel, die Sie aufrufen XY, das heißt, der Winkel zwischen der X-Achse rotiert um die Z-Achse; dies nennt man den azimuth-Winkel und wird im Bereich [0, 2π) Bogenmaß oder [0°, 360°). Sei φ ein Winkel zwischen der x-Y-Ebene und dem Vektor; dies nennt man den Höhenwinkel und wird im Bereich [-π/2, +π/2] oder [-90°, +90°], und es entspricht dem Winkel, den Sie hier aufrufen der XZ-Winkel (Drehung in der XZ-Ebene um die Y-Achse). Es gibt auch andere Konventionen, so stellen Sie sicher, dass Sie konsistent ist. Trotzdem, der Umbau ist einfach: