Signatur
Beschreibung
Math.asin() ist die Umkehrfunktion von Math.sin() auf dem Intervall [−π/2, π/2]. Übergibt man eine Zahl zwischen -1 und 1, liefert die Methode den Winkel im Bogenmaß (Radiant), dessen Sinus diese Zahl ist. Da asin eine statische Methode ist, ruft man sie immer als Math.asin() auf und nicht auf einem selbst erzeugten Objekt.
Gebraucht wird die Methode vor allem in der Geometrie, der Physik und bei Grafik- oder Spieleprogrammierung. Typische Fälle sind: aus Gegenkathete und Hypotenuse einen Winkel berechnen, Brechungswinkel nach dem Snelliusschen Gesetz bestimmen, Neigungswinkel aus Sensordaten (Beschleunigungssensor) ermitteln oder Entfernungen auf der Kugel mit der Haversine-Formel berechnen.
Liegt der Wert außerhalb von [−1, 1], ist das Ergebnis NaN. Nicht-numerische Argumente werden vorher wie bei Number() in eine Zahl umgewandelt. Wer den Winkel in Grad braucht, muss das Ergebnis selbst mit 180 / Math.PI multiplizieren.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $x Pflicht | number | Eine Zahl zwischen -1 und 1 (einschließlich). Andere Typen werden in eine Zahl umgewandelt. |
Rückgabewert
x im Bogenmaß, im Bereich −π/2 bis π/2 (einschließlich). Liegt x außerhalb von [−1, 1] oder lässt es sich nicht in eine Zahl umwandeln, ist das Ergebnis NaN.Beispiele
Grundlegende Werte und Grenzfälle
console.log(Math.asin(0)); // 0
console.log(Math.asin(0.5)); // π/6
console.log(Math.asin(1)); // π/2
console.log(Math.asin(-1)); // -π/2
console.log(Math.asin(-0)); // -0 bleibt erhalten
console.log(Math.asin(1.1)); // außerhalb des Bereichs
console.log(Math.asin('0.5')); // String wird umgewandelt
Winkel eines rechtwinkligen Dreiecks in Grad
const toDegrees = (rad) => rad * (180 / Math.PI);
// Rampe: 1 m Höhe bei 4 m Länge der Schräge
const hoehe = 1;
const schraege = 4;
const winkel = toDegrees(Math.asin(hoehe / schraege));
console.log(`Neigung: ${winkel.toFixed(2)}°`);
Brechungswinkel nach Snellius (Luft → Wasser)
const brechungswinkel = (einfallGrad, n1, n2) => {
const rad = einfallGrad * Math.PI / 180;
const sinT = (n1 / n2) * Math.sin(rad);
// |sinT| > 1 bedeutet Totalreflexion → asin liefert NaN
if (Math.abs(sinT) > 1) return null;
return Math.asin(sinT) * 180 / Math.PI;
};
console.log(brechungswinkel(45, 1.0, 1.33).toFixed(2));
console.log(brechungswinkel(60, 1.33, 1.0)); // Wasser → Luft
Rundungsfehler abfangen mit Clamping
const clamp = (v, min, max) => Math.min(max, Math.max(min, v));
// Durch Gleitkomma-Rechnung minimal über 1 geraten
const wert = 0.1 * 3 / 0.3 + 1e-16 * 3;
console.log(wert, Math.asin(wert));
console.log(Math.asin(clamp(wert, -1, 1)));
// Wichtig · Fallstricke
- Bogenmaß statt Grad: Das Ergebnis ist immer in Radiant. Für Grad mit
180 / Math.PImultiplizieren. - NaN bei Werten außerhalb von [−1, 1]: Schon kleine Gleitkomma-Fehler (z. B.
1.0000000000000002) liefernNaN. Berechnete Eingaben sollte man deshalb vorher mitMath.min/Math.maxauf den Bereich begrenzen. - Eingeschränkter Wertebereich:
asinkennt nur Winkel zwischen −90° und 90°. Um einen Winkel eindeutig über alle vier Quadranten zu bestimmen, istMath.atan2(y, x)besser geeignet. - Genauigkeit: Die Spezifikation schreibt das exakte Ergebnis nicht vor, darum können sich die letzten Nachkommastellen zwischen Engines unterscheiden. In Tests nicht auf exakte Gleichheit prüfen, sondern mit einer Toleranz (z. B.
Number.EPSILON). - Typumwandlung:
Math.asin(null)ergibt0,Math.asin(undefined)undMath.asin('abc')ergebenNaN. BeiBigIntwird einTypeErrorgeworfen. - Wird in allen Browsern und in Node.js unterstützt.