Gyakorlati alapok
Rozsdás szögfüggvények adatbekérésből
A trigonometrikus, más néven szögfüggvények eredetileg egy derékszögű háromszög egyik szöge (a lenti képen c és b közötti) és oldalai hányadosai közötti összefüggéseket írják le. A szögfüggvények alapvető fontosságúak a hétköznapi geometriai számításoknál, a periodikus jelenségek leírásakor (körmozgás, akusztika, stb.), valamint a műszaki élet számos területén.
Adott tehát egy derékszögű háromszög 2 befogója (a és b)...
...amelyből Pithagorasz tétele alapján képesek vagyunk kiszámolni c átfogó értékét:
a2 + b2 = c2
Ezután már minden adat rendelkezésünkre áll a szögfüggvények meghatározásához. A kérdéses szöget hagyományosan görög alfával jelölik (α), ettől én most eltekintek és egyszerűen szögnek nevezem:
-
sin szög = a / c
-
cos szög = b / c
-
tg szög = a / b
-
ctg szög = b / a
-
sec szög = c / b
-
csc szög = c / a
A futtatható Java-kód nem lesz nehéz, hiszen alapelemei már kellő mélységben ismertetésre kerültek például a Pithagorasz tétele egyszerű adatbekéréssel című fejezetben. Az érthetőség végett a műveleteket elemeire bontottam és nem sűrítettem, így lesz a cNegyzet és c külön double típusú változóban:
double cNegyzet = (a * a) + (b * b);
double c = Math.sqrt(cNegyzet);
Ez ugyan több memóriát foglal és kissé lassúbb (milliszekundumban mérve), viszont a kód legalább olvasható marad a Tisztelt Olvasó számára és ez a legfontosabb. Persze külön házi feladat lehet a kód optimalizálása, azaz tömörebb megfogalmazása.
A System.out.println() függvényben lévő \n jel sortörést okoz kiíráskor; nélküle 1 sorban íródott volna ki az összes szögfüggvény.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Kérem, hogy adja meg az egyik oldalhosszt
(a)!");
String oldal = in.nextLine();
double a = Double.parseDouble(oldal);
System.out.println("Kérem, hogy adja meg az egyik oldalhosszt
(b)!");
oldal = in.nextLine();
double b = Double.parseDouble(oldal);
double cNegyzet = (a * a) + (b * b);
double c = Math.sqrt(cNegyzet);
System.out.println("C értéke: " + c);
System.out.println("Szögfüggvényei: "
+ "\nsin szög = " + a/c
+ "\ncos szög = " + b/c
+ "\ntg szög = " + a/b
+ "\nctg szög = " + b/a
+ "\nsec szög = " + c/b
+ "\ncsc szög = " + c/a);
}
}
Végeredmény (például):
Kérem, hogy adja meg az egyik oldalhosszt (a)!
3
Kérem, hogy adja meg az egyik oldalhosszt (b)!
4
C értéke: 5.0
Szögfüggvényei:
sin szög = 0.6
cos szög = 0.8
tg szög = 0.75
ctg szög = 1.3333333333333333
sec szög = 1.25
csc szög = 1.6666666666666667
A fenti kód "kézzel" barkácsolta össze a szögfüggvények értékeit. Most nézzük meg, hogy a Java alkotói által alkotott, beépített szögfüggvények (java.math.*;) ugyanazon eredményeket dobják-e ki. Ehhez először veszünk egy azonos befogóhosszokkal rendelkező háromszöget (a = b), mert ekkor α szög 45 fok.
Végeredmény (például):
Kérem, hogy adja meg az oldalhosszt (a = b)!
4
C értéke: 5.656854249492381
Szögfüggvényei:
sin szög = 0.7071067811865475
cos szög = 0.7071067811865475
tg szög = 1.0
ctg szög = 1.0
sec szög = 1.4142135623730951
csc szög = 1.4142135623730951
A probléma, hogy nem tudjuk közvetlenül fokban (degree) használni a Java beépített szögfüggvényeit, mert azok double típusú radiánt várnak. Természetesen erre a Java alkotói is gondoltak, így a csomagban elérhető fok-radián váltó is (Math.toRadians()), először tehát ezt kell használnunk, majd a radiánértéket betenni a szögfüggvényekbe.
import java.util.Scanner;
import java.math.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Kérem, hogy adja meg az oldalhosszt (a =
b)!");
String oldal = in.nextLine();
double a = Double.parseDouble(oldal);
double b = a;
double c = Math.sqrt((a * a) + (b * b));
double radian = Math.toRadians(45);
System.out.println("C értéke: " + c);
System.out.println("Szögfüggvényei: "
+ "\nsin szög = " + Math.sin(radian)
+ "\ncos szög = " + Math.cos(radian)
+ "\ntg szög = " + Math.tan(radian));
}
}
Végeredmény (például):
Kérem, hogy adja meg az oldalhosszt (a = b)!
4
C értéke: 5.656854249492381
Szögfüggvényei:
sin szög = 0.7071067811865475
cos szög = 0.7071067811865476
tg szög = 0.9999999999999999
A kézi szögfüggvények közül hirtelenjében 3 darabot találtam meg a matematikai csomagban: a szinusz, a koszinusz és a tangens függvényeket. Az értékek egyeznek azzal a kis, elhanyagolható különbséggel, hogy tangens értéke csak közelítőleg 1 (tg szög = 0.9999999999999999); ez nagy valószínűséggel a lebegőpontos számokkal történő számoláskor fellépő szórások eredménye. (Már csak azért is, mert tangens értéke a jelen esetben a/b szerint 4/4 = 1.)