1. Trigonometrische Funktionen in Java
Als wir uns zuvor mit dem Runden von Zahlen befassten, machten wir uns mit der Math
Klasse und einigen ihrer Methoden vertraut. Wir werden uns diese Klasse nun genauer ansehen.
Wie der Name schon sagt, Math
enthält die Klasse Methoden für die von Programmierern am häufigsten verwendeten mathematischen Operationen. Hier sind die interessantesten:
Methode | Beschreibung | |
---|---|---|
|
Gibt den Sinus des Winkels d im Bogenmaß zurück |
|
|
Gibt den Kosinus des Winkels d im Bogenmaß zurück |
|
|
Gibt den Tangens des Winkels d im Bogenmaß zurück |
|
|
Gibt den Arkussinus zurück | |
|
Gibt den Arkuskosinus zurück | |
|
Gibt den Arkustangens zurück | |
|
Gibt den hyperbolischen Sinus zurück | |
|
Gibt den hyperbolischen Kosinus zurück | |
|
Gibt den hyperbolischen Tangens zurück |
Die Methoden , und nehmen einen Winkel an, der im Bogenmaß ausgedrückt wird. Um einen Winkel von Grad in Bogenmaß und umgekehrt umzurechnen, bietet die Klasse zwei spezielle Methoden:Math.sin()
Math.cos()
Math.tan()
Math
Methode | Beschreibung |
---|---|
|
Konvertiert einen Winkel von Grad in Bogenmaß |
|
Konvertiert einen Winkel vom Bogenmaß in Grad |
Neben Methoden Math
verfügt die Klasse übrigens auch über zwei konstante Variablen (statische Felder der Klasse):
Konstante | Beschreibung |
---|---|
|
Die Konstante „Pi“ ist gleich3.141592653589793 |
|
Die Konstante „E“ ist gleich2.718281828459045 |
Alle diese Funktionen können für Sie sehr nützlich sein, wenn Sie Ihre eigenen Spiele schreiben, mit Grafiken arbeiten oder einfach die Länge eines Pfades auf einer Karte berechnen möchten.
Wenn Sie beispielsweise berechnen möchten sin(45°)
, gehen Sie wie folgt vor:
Math.sin( Math.toRadians(45) )
Hier ist ein Beispiel:
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. Algebraische Funktionen in Java
In den meisten Fällen reicht einem Programmierer High-School-Mathematik aus: Sogar Sinus- und Kosinuswerte kommen im Code nur sehr selten vor. Am häufigsten werden sie bei der Arbeit mit Spielen, Karten oder Game-Engines benötigt. 90 % der Programmierer stoßen nie darauf.
Aber neben der Geometrie müssen Programmierer manchmal auch algebraische Funktionen verwenden. Und natürlich Math
enthält die Klasse die häufigsten:
Methode | Beschreibung |
---|---|
|
Quadratwurzel vona |
|
Kubikwurzel vona |
|
Potenzierung:ab |
|
exponentiell (Eulers Zahl potenziert):ea |
|
natürlicher Logarithmus von a :ln(a) |
|
Logarithmus zur Basis 10 von a :log10(a) |
|
natürlicher Logarithmus von x + 1 :ln(x + 1) |
|
ex-1 |
Wenn Sie die Quadrat- oder Kubikwurzel einer Zahl ermitteln möchten, stehen Ihnen die Methoden sqrt(a)
und cbrt(a)
zur Verfügung.
Die Quadratwurzel kann wie folgt berechnet werden:
Math.sqrt(2)
Wenn Sie eine Wurzel einer höheren Potenz erhalten möchten, verwenden Sie die Potenzierungsmethode: a
hoch ¼
ist die vierte Wurzel usw.
Math.pow(2, 0.25)
Für Logarithmen und Exponenten gibt es die Methoden log(a)
(natürlicher Logarithmus) und exp(x)
(Exponential). Um den Logarithmus zur Basis 10 zu berechnen, haben wir log10(a)
.
Wenn Sie möchten, dass der Logarithmus einer Zahl b
die Basis hat a
, verwenden Sie diese einfache Formel:loga(b) = ln(b) / ln(a)
Nützliche Methoden
Wenn Sie Berechnungen mit sehr kleinen Werten von durchführen x
, können die letzten beiden Funktionen – log1p()
und expm1()
– für Sie nützlich sein.
Beim Hinzufügen sehr kleiner und sehr großer double
Variablen werden Sie oft feststellen, dass sehr kleine Werte einfach ignoriert (verworfen) werden, da sie unbedeutend sind. Tatsächlich wird dies passieren, wenn Sie die Methoden log()
und verwenden exp()
. Um dieses Problem zu lösen, haben Programmierer Funktionen entwickelt, die nur den „kleinen signifikanten Teil“ zurückgeben.
Beispiel:
Angenommen , Sie möchten den natürlichen Logarithmus 1 + x
von berechnen . Sie können diese Zahl nicht einfach an die Methode übergeben, denn wenn Sie and hinzufügen , erhalten Sie . ist eine so kleine Zahl, dass sie beim Addieren der Zahlen vollständig verworfen wird.x
10-20
log()
1
10-20
1
10-20
log()
Da es in der Mathematik häufig darum geht, den Wert von Zahlen nahe bei zu berechnen 1
, haben Programmierer eine Möglichkeit gefunden, dieses Problem zu umgehen: Anstatt die Zahl selbst an die Methode zu übergeben, übergeben Sie nur deren Differenz von 1
.
3. Minimum und Maximum
Zwei weitere nützliche Funktionen sind min(a, b)
und max(a, b)
. Wie Sie wahrscheinlich bereits vermutet haben, gibt die erste das Minimum von zwei Zahlen zurück:
Math.min(a, b)
Und der zweite gibt das Maximum von zwei Zahlen zurück:
Math.max(a, b)
Warum brauchen wir diese Funktionen, wenn Sie if
den ternären Operator immer schreiben oder sogar verwenden können (a < b ? a: b)
?
Es geht um die Lesbarkeit des Codes. Manchmal ist Ihr Code mit Anweisungen überladen if
und Sie möchten eine kompaktere Notation verwenden. Lass uns vergleichen:
Code | Beschreibung |
---|---|
|
Eine Anweisung verwenden if-else (der längste Weg, sie zu schreiben) |
|
Verwendung des ternären Operators Nachteile: – umfangreicher Code – Berechnungen werden zweimal durchgeführt |
|
Das ist eine tolle Art, es zu schreiben, aber es ist ein wenig überflüssig |
|
Genau richtig 🙂 |
4. Minimum und Maximum mehrerer Zahlen
Es gibt noch eine weitere großartige Möglichkeit, die min()
und max()
-Methoden zu verwenden.
Zur Berechnung des Minimums (oder Maximums) mehrerer Zahlen oder Variablen. Es ist sehr praktisch, diese Methoden verschachtelt aufzurufen.
So finden Sie das Minimum von 3 Zahlen:
Math.min(a, Math.min(b, c))
Na und? Es ist super praktisch: Berechnen Sie das Minimum von zwei Zahlen und geben Sie dann das Minimum dieser Zahl und der dritten Zahl zurück.
Das Minimum von vier Zahlen erhält man auf die gleiche Weise:
Math.min(a, Math.min(b, Math.min(с, d)))
Allerdings können wir diese Formel etwas klarer formulieren:
Math.min(Math.min(a, b), Math.min(c, d))
Für die Methode funktioniert alles gleich max()
.
Die Verwendung des if-else
Operators oder ternären Operators würde diese Codefragmente etwas umständlicher machen. Aber die Verwendung der min()
und- max()
Methoden ist einfach perfekt.
GO TO FULL VERSION