Signatur
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
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
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));
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)}°`);
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');
// 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 wie1.0000000000000002liegen durch Gleitkomma-Ungenauigkeit knapp außerhalb von[-1, 1].Math.acos()gibt dannNaNzurück. Deshalb sollte man das Argument vorher begrenzen, z. B. mitMath.min(1, Math.max(-1, x)). - Ungenau nahe ±1: Bei sehr kleinen Winkeln ist
acosnumerisch ungenau. Für präzise Winkelberechnungen istMath.atan2(|a×b|, a·b)robuster. - Typumwandlung:
Math.acos(null)ergibtπ/2, weilnullzu0wird.Math.acos(undefined)ergibtNaN. - Die Genauigkeit der letzten Nachkommastellen kann je nach Engine leicht abweichen. Die Methode ist in allen Browsern und in Node.js verfügbar.