-
        

Ergebnis 1 bis 9 von 9

Thema: Linie rotieren

  1. #1

    Linie rotieren

    Anzeige

    Hallo zusammen,

    mit meinem erstem Beitrag in diesem Forum, möchte ich erstmal dieses wiklic gute Forum loben. Ich hab hier schon einiges interssantes gelernt, aber jetzt hab ich ein kleines Problem.

    Ich habe eine G-LCD Display das auch soweit läuft. Ich möchte mir jetzt eine analoge Uhr programmiern und jetzt steh ich vor dem Problem wie ich meine Zeiger drehe. Natürlich kann ich 60 Anfangs und Endkoordinaten in meiner Linefunktion angeben, aber man kann doch sicherlich eine Linie auch per Software um den Anfangspunkt drehen. Also falls von euch sowas jemand schon realisiert hat, würde ich mich sehr über eine kleine Hilfe freuen.

    MFG

    Thorsten

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    50
    Beiträge
    1.195
    google mit computegrafik roation liefert z.B.:

    http://kogs-www.informatik.uni-hambu...ipt/cg-s05.pdf

    Da steht alles drin, was Du wissen möchtest.

    Einfacher ist vielleicht sogar:

    http://www.karto.ethz.ch/education/t...g_hb_1.ppt.pdf

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Du kannst natürlich eine Rotationsmatrix nehmen und das ausrechnen.
    Dann brauchst du allerdings eine Matrix- und Vektor-Arithmetik und zudem Fließpunkt-Arithmetik. Das ist sehr viel aufwändiger, als dir einmal die 60 Werte hinzuschreiben.
    Die Werte sind ja zur Compile-Zeit bekannt. Warum willst du den µC immer wieder Zeug ausrechnen lassen, das schon bekannt ist?
    Disclaimer: none. Sue me.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.11.2004
    Ort
    München
    Alter
    30
    Beiträge
    447
    Hallo,
    Wenn man sich nicht sicher ist was man sucht ist es schwer es in den Pdfs zu finden... Deshalb hier:
    x2 = (x - zenrumx) * cos(winkel) - (y - zenrumy) * sin(winkel) + zenrumx;
    y2 = (x - zenrumx) * sin(winkel) + (y - zenrumy) * cos(winkel) + zenrumy;

    Dabei musst du darauf achten, dass winkel im Bogenmaß vorliegt(Umrechnung von Degree zu Bogenmaß: bog=deg / 180.0 * PI)!

    Wie SprinterSB aber schon gesagt hat sind besonders sin und cos-Berechnungen mit floats sehr Zeitaufwendig in einem AVR. Du solltest daher die 60 Werte generieren lassen und fest einprogrammieren.

    MfG Alex

  5. #5

    Vielen Dank

    echt super, danke für euere Ratschläge.
    Ich dachte ich lasse mir die Werte ausrechenen, dann wäre es ja auch kein Problem die Uhr im Display auf einer anderen Position anzeigen zu lassen, ohne jedes mal alle Werte ausrechnen zu müssen. Oder lieg ich da falsch??

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    30.07.2005
    Beiträge
    87
    Speicher keine absoluten sondern relative Positionen. Dann musst du nur einen Offset auf x und y dazurechnen und kannst die Uhr auf dem ganzen Display verschieben.

  7. #7

    nix kappiert :-)

    @ dermarkus

    Das tut mir jetzt leid, aber zu deiner Antwort benötige ich wohl ein kleines Beispiel um das zu verstehen ?-)

    Thorsten

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    30.07.2005
    Beiträge
    87
    Ok.
    ich meinte das so. Wenn der Uhrmittelpunkt auf der Position (0,0) liegt, dann könnte man die 12 Uhr Position mit (0,1) beschreiben, 3Uhr mit (1,0), 6Uhr (0,-1) und 9Uhr mit (-1,0). Wenn du die Uhr nun auf der Positon (5,5) darstellen möchstest, dann rechnest du auf alle ursprünglichen Position (5,5) drauf. So wird aus
    12Uhr (0,1) -> (5,6)
    3Uhr (1,0) -> (6,5)
    6Uhr (0,-1) -> (5,4)
    9Uhr (-1,0) -> (4,5)
    Wenn du noch nen Faktor einfügst kannst du das ganze auch skalieren.

  9. #9
    @dermarkus

    vielen dank, jetzt hab ich es geschnallt. Werde das auf alle Fälle probieren!

    thorsten

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •