Start · Sprachen · JavaScript · Referenz · Math.asin()

Math.asin()

Methode

Die statische Methode <code>Math.asin()</code> gibt den Arkussinus einer Zahl im Bogenmaß zurück, also den Winkel im Bereich −π/2 bis π/2, dessen Sinus <code>x</code> ist.

seit JavaScript ES1 – Baseline: alle Browser, Node.js Kategorie: method-property

Signatur

Math.asin(x)

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

Typ
number
Beschreibung
Der Arkussinus von 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
0 0.5235987755982989 1.5707963267948966 -1.5707963267948966 -0 NaN 0.5235987755982989

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)}°`);
Neigung: 14.48°

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
32.12 null

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)));
1.0000000000000002 NaN 1.5707963267948966

// Wichtig · Fallstricke

  • Bogenmaß statt Grad: Das Ergebnis ist immer in Radiant. Für Grad mit 180 / Math.PI multiplizieren.
  • NaN bei Werten außerhalb von [−1, 1]: Schon kleine Gleitkomma-Fehler (z. B. 1.0000000000000002) liefern NaN. Berechnete Eingaben sollte man deshalb vorher mit Math.min/Math.max auf den Bereich begrenzen.
  • Eingeschränkter Wertebereich: asin kennt nur Winkel zwischen −90° und 90°. Um einen Winkel eindeutig über alle vier Quadranten zu bestimmen, ist Math.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) ergibt 0, Math.asin(undefined) und Math.asin('abc') ergeben NaN. Bei BigInt wird ein TypeError geworfen.
  • Wird in allen Browsern und in Node.js unterstützt.