Analog klocka för grafisk LCD (2 / 4 steg)
Steg 2: Lite teori.
Istället för att se en klocka som en uppsättning rörliga händer, har vi att föreställa sig det som en uppsättning av koncentriska cirklar. En hand är då en linje mellan centrum och en punkt på en av dessa kretsar.
En hand kommer alltid att vid en viss vinkel till sin utgångspunkt (12 o klockan).
Om vi lägger till ett Cartegian koordinatsystem (ni vet, X och Y-axeln - grejen) och vi placera centrum av cirkeln på sitt ursprung (0,0), då kan vi skapa en rätvinklig triangel. Den berömda grekiska kollega, herr Pythagoras, berättade för oss att vi kan bestämma längden på hypotenusan i en rätvinklig triangel med följande ekvation:
a2 + b2 = c2
Som hypotenusan råkar vara våra radie och mitten av cirkeln är också ursprunget till det koordinerade systemet, kan vi konstatera följande:
R2 = X2 + Y2
Vi vet R som det är radien av vår krets. Så det måste finnas ett sätt att beräkna X och Y. Det enda som vi behöver för det är lite trigonometri.
Jag kunde höra några av er stöna när höra ordet trigonometri. Men trust me det är inte så svårt som det låter.
Kanske minns du den mnemonic SOHCAHTOA från din matte klasser på skolan. Om du också komma ihåg vad det innebär, då vet du allt vad du behöver veta för detta. Om inte, då jag ska förklara det här.
SOHCAHTOA stativ för:
Sinus = motsatt / hypotenusan
Cosinus = intilliggande/hypotenusan
Tangens = motsatt / angränsande
För nu kan vi glömma tangens som vi inte behöver det.
Vi vet att hypotenusan är samma som våra radie så vi kan byta dem. Det enda vi behöver nu är en vinkel att arbeta med. Vet vi något? Ja, i själva verket kan vi beräkna alla tre av dem om vi vill.
Vi vet säkert att en av dem är 90degr. Eftersom det är en rätvinklig triangel men vi kan inte använda som en. Men, som jag sade i början, en hand kommer alltid att vara vid en viss vinkel till det är stirrande punkt och vi kan enkelt beräkna det meta.
vinkel = åtgärder * 360 (full cirkel) / max mängd steg
Så i fall av sekunder och minuter räcker blir detta:
vinkel = minuter (eller SEK) * 360 / 60 eller vinkel = minuter (eller SEK) * 6
Vid timmarna blir det:
vinkel = timmar * 360 / 12 eller vinkel = timmar * 30
Denna vinkel är det sista vi behövde för att beräkna X och Y. (om du vill beräkna den 3: e vinkeln bara 180 minus två vet vinklar och du har en 3: e).
Kan sätta ihop allting nu och fylla i vad vi redan vet:
synd vinkel = mittemot / radie
cos vinkel = intilliggande/radie
Är det samma som beskärningen av koordinatsystemet som vertex vinkel:
synd vinkel = y/radie
cos vinkel = x / radie
eller
x = radie * cos vinkel
y = radie * synd vinkel
Men vad händer om vertex vinkel ligger inte på beskärningen? Sedan måste vi ta koordinaterna för denna punkt i ekvationen.
x = en + radie * cos vinkel
y = b + radie * synd vinkel
Så nu vet vi koordinaterna för slutpunkten för vår hand!
Tja... Euhh... inte helt ännu... det finns ett litet problem:
Om du skulle skriva en kod med dessa ekvationer skulle du få en klocka som börjar klockan 3 och kör motsols. Det beror på att våra kantiga beräkningar är i förhållande till x-axeln och de som vi behöver för klockan borde vara i förhållande till y-axeln. Luckely med lite matematiska magi, problemet är löst mycket snabbt:
x = en + radie * synd vinkel
y = b - radie * cos vinkel
Vad som hänt här är att vi bytt relationen till axeln genom att byta ut sin och cos och vi ändrade riktning från moturs till medurs genom att ändra + till-.
Detta var teorin, i nästa steg ska vi lägga som i praktiken.