1. Trigonometrikus függvények Java nyelven
Amikor korábban a számok kerekítését tanultuk, megismerkedtünk az osztállyal Math
és néhány módszerével. Most részletesebben megvizsgáljuk ezt az osztályt.
Ahogy a neve is sugallja, az Math
osztály a programozók által leggyakrabban használt matematikai műveletekre vonatkozó metódusokat tartalmaz. Íme a legérdekesebbek:
Módszer | Leírás | |
---|---|---|
|
A szög szinuszát adja vissza d radiánban |
|
|
A szög koszinuszát adja vissza d radiánban |
|
|
A szög tangensét adja vissza d radiánban |
|
|
Az arcszinust adja vissza | |
|
Az arckoszint adja vissza | |
|
Az arctangensét adja vissza | |
|
Visszaadja a hiperbolikus szinust | |
|
A hiperbolikus koszinuszát adja vissza | |
|
A hiperbolikus érintőt adja vissza |
A , és módszerek radiánban kifejezett szöget vesznek fel. A szög fokról radiánra és fordítva történő konvertálására az osztály két speciális módszert kínál:Math.sin()
Math.cos()
Math.tan()
Math
Módszer | Leírás |
---|---|
|
Szöget alakít át fokokból radiánokká |
|
Egy szöget radiánból fokokká alakít át |
Egyébként a metódusokon kívül az osztálynak két állandó változójaMath
is van (az osztály statikus mezői):
Állandó | Leírás |
---|---|
|
A "Pi" állandó egyenlő3.141592653589793 |
|
Az "E" állandó egyenlő2.718281828459045 |
Mindezek a funkciók nagyon hasznosak lehetnek az Ön számára, ha úgy dönt, hogy saját játékokat ír, grafikával dolgozik, vagy egyszerűen kiszámítja az útvonal hosszát a térképen.
Például, ha ki szeretné számolni sin(45°)
, a következőképpen teheti meg:
Math.sin( Math.toRadians(45) )
Íme egy példa:
public class Main
{
public static int N = 10;
public static void drawValue(double y)
{
int value = (int) (y * N) + N;
for (int i = 0; i < 2 * N; i++)
{
char c = i == N ? '|': '.';
if (i == value)
c = '*';
System.out.print(c);
}
System.out.println();
}
public static void main(String[] args)
{
for (int i = 0; i < 10 * N; i++)
{
double x = i * 1.0 / N;
double y = Math.sin(x);
drawValue(y);
}
}
}
2. Algebrai függvények Java nyelven
A legtöbb esetben a középiskolai matematika elég egy programozónak: még szinuszokat és koszinuszokat is nagyon ritkán találunk a kódban. Leggyakrabban játékokkal, térképekkel vagy játékmotorokkal való munka során van rájuk szükség. A programozók 90%-a soha nem találkozik ezzel.
De a geometria mellett a programozóknak néha algebrai függvényeket is kell használniuk. És természetesen az Math
osztály tartalmazza a leggyakoribbakat:
Módszer | Leírás |
---|---|
|
négyzetgyökea |
|
köbgyökea |
|
hatványozás:ab |
|
exponenciális (Euler-szám hatványra emelve):ea |
|
természetes logaritmusa a :ln(a) |
|
10-es bázis logaritmusa a :log10(a) |
|
természetes logaritmusa x + 1 :ln(x + 1) |
|
ex-1 |
Ha szeretné egy szám négyzet- vagy kockagyökét, a sqrt(a)
és cbrt(a)
metódusok az Ön szolgálatában állnak.
A négyzetgyök a következőképpen számítható ki:
Math.sqrt(2)
Ha egy magasabb hatvány gyökerét akarjuk megszerezni, akkor használjuk a hatványozási módszert: a
a hatványhoz ¼
a negyedik gyök, stb.
Math.pow(2, 0.25)
A logaritmusokhoz és kitevőkhöz létezik a log(a)
(természetes logaritmus) és exp(x)
az (exponenciális) módszer. A 10-es alapú logaritmus kiszámításához log10(a)
.
Ha azt szeretné, hogy egy szám logaritmusa b
bázis legyen a
, használja ezt az egyszerű képletet:loga(b) = ln(b) / ln(a)
Hasznos módszerek
Ha olyan számításokat végez, amelyek nagyon kis értékeit tartalmazzák x
, akkor az utolsó két függvény – log1p()
és expm1()
– hasznos lehet az Ön számára.
Ha nagyon kicsi és nagyon nagy double
változókat ad hozzá, gyakran azt tapasztalhatja, hogy a nagyon kis értékeket a rendszer egyszerűen figyelmen kívül hagyja (elveti), mint jelentéktelent. log()
Valójában ez akkor fog megtörténni, ha a és exp()
módszereket használja . Ennek megoldására a programozók olyan függvényeket találtak ki, amelyek csak a "kis jelentős részt" adják vissza.
Példa:
Tegyük fel, hogy ki akarja számítani a természetes logaritmusát 1 + x
, ahol x
van . Ezt a számot nem lehet egyszerűen átadni a metódusnak, mivel ha hozzáadja a és -t , akkor a -t kapja . olyan kis szám, hogy a számok összeadásakor teljesen eldobjuk.10-20
log()
1
10-20
1
10-20
log()
Mivel a matematika gyakran magában foglalja a -hoz közeli számok kiszámítását 1
, a programozók kitaláltak egy módszert a probléma megkerülésére: ahelyett, hogy magát a számot adnák át a metódusnak, csak a -tól való eltérését adják át 1
.
3. Minimum és maximum
Két további hasznos funkció a min(a, b)
és max(a, b)
. Amint valószínűleg már sejtette, az első a minimum két számot adja vissza:
Math.min(a, b)
A második pedig a maximum két számot adja vissza:
Math.max(a, b)
Miért van szükségünk ezekre a függvényekre, ha mindig írhatsz if
vagy akár használhatod is a háromtagú operátort (a < b ? a: b)
?
Minden a kód olvashatóságán múlik. Néha a kód túlterhelt utasításokkal if
, és tömörebb jelölést szeretne használni. Hasonlítsuk össze:
Kód | Leírás |
---|---|
|
Állítás használata if-else (az írás leghosszabb módja) |
|
A háromtagú operátor használata Hátrányok: - terjedelmes kód - a számításokat kétszer hajtják végre |
|
Ez egy nagyszerű módja annak, hogy megírja, de ez egy kicsit felesleges |
|
Pont jó 🙂 |
4. Több szám minimuma és maximuma
min()
Van egy másik nagyszerű módja a és módszerek használatának max()
.
Több szám vagy változó minimumának (vagy maximumának) kiszámításához. Nagyon kényelmes ezeknek a metódusoknak a beágyazott hívása.
Így találhatja meg a minimum 3 számot:
Math.min(a, Math.min(b, c))
És akkor mi van? Nagyon kényelmes: számítsa ki két szám minimumát, majd adja vissza ennek a számnak a minimumát és a harmadik számot.
A legalább négy számot a következő módon kapjuk meg:
Math.min(a, Math.min(b, Math.min(с, d)))
Ennek ellenére egy kicsit érthetőbben leírhatjuk ezt a képletet:
Math.min(Math.min(a, b), Math.min(c, d))
Minden ugyanúgy működik a max()
módszerrel.
if-else
Az operátor vagy háromtagú operátor használata kissé körülményesebbé tenné ezeket a kódrészleteket. De a min()
és max()
módszerek használata egyszerűen tökéletes.
GO TO FULL VERSION