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

Math.acos()

Methode

Die statische Methode <code>Math.acos()</code> gibt den Arkuskosinus einer Zahl im Bereich von 0 bis π (in Radiant) zurück.

seit JavaScript ES1 (Baseline: alle Browser) Kategorie: method-property

Signatur

Math.acos(x)

Beschreibung

Math.acos(x) berechnet die Umkehrfunktion des Kosinus. Die Methode liefert also den Winkel θ im Intervall [0, π], für den Math.cos(θ) === x gilt. Das Ergebnis wird immer in Radiant zurückgegeben, nicht in Grad.

Gültig sind nur Eingaben zwischen -1 und 1 (jeweils einschließlich). Für Werte außerhalb dieses Bereichs gibt die Methode NaN zurück. Math.acos(1) ergibt 0, Math.acos(0) ergibt π/2 und Math.acos(-1) ergibt π.

In der Praxis braucht man Math.acos() vor allem in der Geometrie und Grafik. Typische Aufgaben sind den Winkel zwischen zwei Vektoren über das Skalarprodukt zu berechnen, Winkel in Dreiecken mit dem Kosinussatz zu bestimmen oder Entfernungen auf der Kugeloberfläche zu ermitteln (Großkreisdistanz).

Da acos eine statische Methode von Math ist, ruft man sie immer als Math.acos() auf. Math ist kein Konstruktor.

Parameter

Name Typ Default Beschreibung
$x Pflicht number Eine Zahl zwischen -1 und 1 (jeweils einschließlich). Werte, die keine Zahl sind, werden vorher per Typumwandlung in eine Zahl konvertiert.

Rückgabewert

Typ
number
Beschreibung
Der Arkuskosinus von x in Radiant, im Bereich 0 bis Math.PI (jeweils 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.acos(1));    // 0
console.log(Math.acos(0));    // π/2
console.log(Math.acos(-1));   // π
console.log(Math.acos(0.5));  // π/3
console.log(Math.acos(2));    // außerhalb des Bereichs
console.log(Math.acos('0.5')); // String wird umgewandelt
0 1.5707963267948966 3.141592653589793 1.0471975511965979 NaN 1.0471975511965979

Winkel zwischen zwei Vektoren (in Grad)

const winkelZwischen = (a, b) => {
  const dot = a.x * b.x + a.y * b.y;
  const lenA = Math.hypot(a.x, a.y);
  const lenB = Math.hypot(b.x, b.y);
  // Auf [-1, 1] begrenzen, um Rundungsfehler abzufangen
  const cos = Math.min(1, Math.max(-1, dot / (lenA * lenB)));
  return Math.acos(cos) * 180 / Math.PI;
};

console.log(winkelZwischen({ x: 1, y: 0 }, { x: 0, y: 1 }));
console.log(winkelZwischen({ x: 1, y: 1 }, { x: 1, y: 0 }).toFixed(2));
90 45.00

Dreieckswinkel mit dem Kosinussatz

// Seitenlängen a, b, c – gesucht ist der Winkel γ gegenüber von c
const winkelGamma = (a, b, c) =>
  Math.acos((a ** 2 + b ** 2 - c ** 2) / (2 * a * b));

const gammaRad = winkelGamma(3, 4, 5);
console.log(`${(gammaRad * 180 / Math.PI).toFixed(1)}°`);
90.0°

Großkreisdistanz zwischen zwei Städten

const toRad = (deg) => deg * Math.PI / 180;

const distanzKm = (lat1, lon1, lat2, lon2) => {
  const R = 6371; // Erdradius in km
  const cos = Math.sin(toRad(lat1)) * Math.sin(toRad(lat2)) +
    Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.cos(toRad(lon2 - lon1));
  return R * Math.acos(Math.min(1, Math.max(-1, cos)));
};

// Berlin → München
console.log(Math.round(distanzKm(52.52, 13.405, 48.137, 11.575)), 'km');
504 km

// Wichtig · Fallstricke

  • Radiant statt Grad: Das Ergebnis ist in Radiant angegeben. Umrechnen kann man mit rad * 180 / Math.PI.
  • Rundungsfehler führen zu NaN: Berechnete Kosinuswerte wie 1.0000000000000002 liegen durch Gleitkomma-Ungenauigkeit knapp außerhalb von [-1, 1]. Math.acos() gibt dann NaN zurück. Deshalb sollte man das Argument vorher begrenzen, z. B. mit Math.min(1, Math.max(-1, x)).
  • Ungenau nahe ±1: Bei sehr kleinen Winkeln ist acos numerisch ungenau. Für präzise Winkelberechnungen ist Math.atan2(|a×b|, a·b) robuster.
  • Typumwandlung: Math.acos(null) ergibt π/2, weil null zu 0 wird. Math.acos(undefined) ergibt NaN.
  • Die Genauigkeit der letzten Nachkommastellen kann je nach Engine leicht abweichen. Die Methode ist in allen Browsern und in Node.js verfügbar.