PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Linie rotieren



_Pauly_
02.04.2006, 09:27
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

ogni42
02.04.2006, 09:50
google mit computegrafik roation liefert z.B.:

http://kogs-www.informatik.uni-hamburg.de/~graphik/cg/skript/cg-s05.pdf

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

Einfacher ist vielleicht sogar:

http://www.karto.ethz.ch/education/teaching_courses/geometry_graphic/cg_hb_1.ppt.pdf

SprinterSB
02.04.2006, 13:39
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?

PasstScho
02.04.2006, 14:16
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

_Pauly_
02.04.2006, 16:35
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??

DerMarkus
02.04.2006, 16:54
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.

_Pauly_
02.04.2006, 17:58
@ dermarkus

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

Thorsten

DerMarkus
02.04.2006, 18:21
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.

_Pauly_
02.04.2006, 18:42
@dermarkus

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

thorsten