kostenloser Webspace werbefrei: lima-city


suche "drehfunktion" -Programmiersprache egal

lima-cityForumProgrammiersprachenSonstige Programmiersprachen

  1. Autor dieses Themas

    simuliertes

    Kostenloser Webspace von simuliertes

    simuliertes hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    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 :thumb:
  4. 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...
  5. Autor dieses Themas

    simuliertes

    Kostenloser Webspace von simuliertes

    simuliertes hat kostenlosen Webspace.

    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! :thumb:

    Beitrag zuletzt geändert: 2.2.2010 1:21:07 von simuliertes
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!