suche "drehfunktion" -Programmiersprache egal
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
anfangen
code
denkfehler
double
drehen
file
funktion
funktioniert fehler
getestet code
grad
http
paar
punkt
rechnen
rotation
schieben
url
ursprung
vektor
winkel
-
Ich möchte eine Funktion in Freebasic schreiben/haben die einen beliebigen Punkt x,y um eine beliebige Achse x,y um soundsoviel Grad dreht .
Da es hier ja eher um ein Mathematisches Problem geht ist die Programmiersprache egal.
Ich kann das ja dann entsprechend umschreiben.
Mal in pseudocode:
function drehe(punktX,punktY,AchseX,AchseY,drewinkel) { ...derCode... return x,y } p(x,y) = drehe(4,-6,9,200,45) /* drehe punkt(4,-6) um den Punkt(9,200) in einem Winkel von 45° */
thnks
Beitrag zuletzt geändert: 1.2.2010 23:03:29 von simuliertes -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich bin ja kein Mathe-Profi, aber hilft dir das evt. weiter?
http://olli.informatik.uni-oldenburg.de/Grafiti3/grafiti/flow5/page9.html
Sieht recht brauchbar aus mit den Skizzen dabei -
Ich fand das mal interessant und hab mich durch ein Paar Wikiartikel gekramt. Hier mal ein Pseudocode, vielleicht kannst du damit was anfangen. (Ist nicht getestet)
// Wir rechnen mit Vektoren Vektor { int x; int y; } // Vektoraddition function add(Vektor v1, Vektor v2) { return new Vektor ( x: v1.x + v2.x, y: v1.y + v2.y ); } // Vektor umkehren function invert(Vektor v) { return new Vektor ( x: -v.x, y: -v.y ); } // P ist der Punkt, R der Punkt um den rotiert wird, Angl der Winkel, gedreht wird mathematisch positiv function rotate(Vektor P, Vektor R, Angl) { // P in den Ursprung schieben => PU Vektor PU = add(P, invert(R)); // ist soviel wie substract(P, R); // Rotation durchführen Vektor Rotated = new Vektor( x: cos(Angl)*PU.x - sin(Angl)*PU.y, y: sin(Angl)*PU.x + cos(Angl)*PU.y ); // Und das ganze wieder zurückverschieben return add(Rotated, R); }
Ich hoffe ich hab das alles richtig überlegt... -
nikic schrieb:
Ich fand das mal interessant und hab mich durch ein Paar Wikiartikel gekramt. Hier mal ein Pseudocode, vielleicht kannst du damit was anfangen. (Ist nicht getestet)
(..)
Ich hoffe ich hab das alles richtig überlegt...
Also ich habe (ohne den sinn zu verstehen) einfach mal Deinen Pseudocode in Freebasic übersetzt:
'' Wir rechnen mit Vektoren '' Vektoraddition function add(x1,y1,x2,y2) as vektor dim v as vektor v.x=x1 + x2 v.y=y1 + y2 return v end function '' Vektor umkehren function invert(x1,y1) as vektor dim v as vektor v.x= 0-x1 v.y= 0-y1 return v end function '' P ist der Punkt, R der Punkt um den rotiert wird, Angl der Winkel, gedreht wird mathematisch positiv function rotate(Px,Py,Rx,Ry, Angl) as vektor dim v as vektor '' P in den Ursprung schieben => PU PU_X = add(Px,Py, invert(Rx,Ry).x,invert(Rx,Ry).y).x PU_Y = add(Px,Py, invert(Rx,Ry).x,invert(Rx,Ry).y).y '' Rotation durchführen xR= cos(Angl)*PU_X - sin(Angl)*PU_Y yR= sin(Angl)*PU_X + cos(Angl)*PU_Y '' Und das ganze wieder zurückverschieben v.x = add(xR,yR, Rx,Ry).x v.y = add(xR,yR, Rx,Ry).y return v end function
Also entweder habe ich einen fehler beim "übersetzen" gemacht oder da war ein Denkfehler bei DIr..
Hier das Fertige exe-Programm zum ausprobiere:
DOWNLOAD ME
EDIT:
ES FUNKTIONIERT!!!
Fehler lag bei mir, freebasic möchte das man bei den funktionen cos/tan in Bogenmaß statt Grad angibt!
''in BOGENMAß umwandeln dim as double ANGL_BOGENM = ANGL * PI / 180 '' Rotation durchführen xR= cos(ANGL_BOGENM)*PU_X - sin(ANGL_BOGENM)*PU_Y yR= sin(ANGL_BOGENM)*PU_X + cos(ANGL_BOGENM)*PU_Y
DOWNLOAD "DREHEN.EXE"
DAnke nikic, top!
Beitrag zuletzt geändert: 2.2.2010 1:21:07 von simuliertes -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage