Rotation eines punktes um den ursprung
-
Ich suche eine Formel, mit der ich für einen Punkt die Koordinaten so neu berechnen kann, als würde ich sie im Winkel alpha um den ursprung drehen.
ich hab schon folgende Formel gefunden, aber die ist irgendwie fehlerhaft.
Je größer der Winkel ist, desto verzerrter ist das ergebnis.
je größer der winkel wird, desto komischer wird das ergebnis
hier ist ein kleines testprogramm, um zu verdeutlichen, wie das ergebnis aussieht.#include <iostream> #include <string> #include "GL/glfw.h" #include <cmath> using namespace std; void rotate_xy(double &x, double &y, double dir); int main(int argc, char** argv) { glfwInit(); glfwOpenWindow(640,480,0,0,0,0,0,0,GLFW_WINDOW); gluOrtho2D(-320,320,-240,240); glViewport(0,0,640,480); //koordinaten vom bekannten Haus des Nikolaus double pos[][2] = { {-100,-100}, { 100, 100}, {-100, 100}, { 0, 200}, { 100, 100}, { 100,-100}, {-100, 100}, {-100,-100}, { 100,-100}, }; //zeichnet die koordinaten; glBegin(GL_LINE_STRIP); for (int i = 0; i < 9; i++) glVertex2dv(pos[i]); glEnd(); //kleine rotationen funktionieren in etwa for (int i = 0; i < 9; i++) { rotate_xy(pos[i][0],pos[i][1],.1); } glColor3ub(0,255,0); glBegin(GL_LINE_STRIP); for (int i = 0; i < 9; i++) glVertex2dv(pos[i]); glEnd(); //größere überhaupt nicht for (int i = 0; i < 9; i++) { rotate_xy(pos[i][0],pos[i][1],1.); } glColor3ub(255,0,0); glBegin(GL_LINE_STRIP); for (int i = 0; i < 9; i++) glVertex2dv(pos[i]); glEnd(); bool running = true; while (running){ glfwSwapBuffers(); if (glfwGetKey(GLFW_KEY_ESC))// || !); running = false; if (!glfwGetWindowParam(GLFW_OPENED)) running = false; } glfwTerminate(); } void rotate_xy(double &x, double &y, double dir){ x = x*cos(dir)-y*sin(dir); y = y*cos(dir)+x*sin(dir); }
linker braucht -lGLU -lGL -lglfw -lX11 unter Linux.
oder ein screenshot, damit ihr euch die arbeit nicht machen müsst.
Edit:
bitte kein Beitrag mit glRotate posten, ich hab meinen Grund, warum das hier im Mathe Forum drin ist.
-
Implementierungsfehler in rotate_xy. Du benutzt x in der zweiten Formel, obwohl du es in der Zuweisung davor gerade verändert hast, x stellt also jetzt x' dar.
-
oh danke, ich werds gleich neu ausprobieren
edit:
klappt
-
ich glaube diesen fehler macht jeder beim ersten mal, der sollte nen eigenen namen bekommen *hehe*