C# - Matematikai függvények használata

forráskód letöltése
E példában néhány matematikai függvényt vizsgálunk meg, melyek segítségével különféle számítások révén igen egyszerűen kirajzolhatunk egy működőképes analóg órát.
A C#-ban található egy Math nevű osztály. Ezen belül megtaláljuk a leggyakrabban használatos matematikai függvényeket, mint például a szögfüggvények, vagy akár a PI értékét.
A feladatot úgy valósítjuk meg, hogy a Form hátterére végezzük el az aktuális idő figyelembevételével az óra mutatóinak kirajzolását. Egy Timer komponens segítségével pedig másodpercenként újrarajzoltatjuk a Form-ot, így jutunk a működőképes órához.
A megvalósításhoz szükségünk lesz a PI értékének 180-ad részére. Ez majd a fok és a radián közötti átváltáshoz lesz szükséges.
        double pi180 = Math.PI / 180;
Például az óramutató kirajzolása a következőképpen történik: első lépésként lekérdezzük az órát a DateTime osztályt felhasználva. Az aktuális óra számából ki kell számítanunk, hogy a mutató hány fokos szögben áll. Ehhez az értékét szorozni kell 30-al. Erre azért van szükség, mert egy analóg óra esetén 12 órát tud mutatni egy teljes kör alatt. Mivel egy kör 360 fok, így a 12 órát 30 fokonként kell léptetnünk, hogy az eredmény helyes legyen. Szükség van még arra is, hogy kivonjunk 90-et a kapott számból. Mivel rajzolásnál a nulla fok egy vízszintes vonal lenne, ezért a kapott eredményt 90 fokkal el kell forgatnunk az óra járásával ellentétes irányban, hiszen a nulla óra az egy függőleges vonallal jeleníthető meg.
        i = DateTime.Now.Hour * 30 - 90;
A mutató kirajzolásához ki kell számítanunk a végpontjának x, y koordinátáját. Az x-et megkapjuk a szám koszinuszából. A Math osztály Cos függvényét használhatjuk erre, mely radiánban várja az adott értéket. Mivel eddig fokban számoltunk, így ezt most át kell váltanunk, mely egy egyszerű szorzással elvégezhető: szoroznunk kell a fok értékét PI / 180-al, hogy megkapjuk ugyanazt radiánban. Az így kiszámított értékét szorozzuk 50-el ennyi lesz a rajzolandó mutató vonalának hossza. Mivel az óra közepét a 100 – 100 koordinátára helyezzük, így még hozzá kell adnunk a kapott értékhez 100-at, hogy el is toljuk a megfelelő pozícióba.
        x = (float) Math.Cos(i * pi180) * 50 + 100;
Az y koordináta számítása csak annyiban tér el, hogy itt szinuszt használunk, melyhez a Math osztály Sin függvénye tartozik.
        y = (float) Math.Sin(i * pi180) * 50 + 100;
Végül nem marad más hátra, mint egy vonal rajzolása a 100 – 100 koordinátából a számított x, y-ba.
        p.Color = Color.Red;
        p.Width = 6;
        g.DrawLine(p, 100f, 100f, x, y);
A perc és a másodperc mutatók megrajzolása hasonló a fenti algoritmushoz. Egyetlen különbség az első lépésnél van a fok meghatározásánál. Mivel mind a másodpercből, mind a percből 60 van, így egy teljes körhöz, vagyis a 360 fokhoz elegendő hattal szorozni, vagyis hat fokonként léptetni a mutatókat.
        i = DateTime.Now.Minute * 6 - 90;