Signatur
Beschreibung
Math.atan() ist eine statische Methode des Math-Objekts. Sie berechnet den Winkel θ im Bogenmaß, für den Math.tan(θ) === x gilt. Das Ergebnis liegt immer im offenen Intervall -π/2 bis π/2 (also zwischen -90° und 90°).
Weil atan eine statische Methode ist, rufst du sie immer als Math.atan() auf und nie über eine Instanz. Math ist kein Konstruktor.
Typische Einsatzfälle sind Steigungswinkel (z. B. „Wie steil ist eine Rampe mit 10 % Steigung?“), Winkel aus einem Verhältnis von Gegenkathete zu Ankathete oder weiche Sättigungsfunktionen in Animationen. Brauchst du den Winkel eines Punktes (x, y) im vollen Kreis, nimm Math.atan2(y, x). Math.atan(y / x) kann nicht erkennen, in welchem Quadranten der Punkt liegt, und scheitert bei x === 0.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $x Pflicht | number | Eine beliebige Zahl, z. B. ein Tangenswert oder ein Steigungsverhältnis. Andere Typen werden vorher in eine Zahl umgewandelt. |
Rückgabewert
x im Bogenmaß, zwischen -π/2 und π/2. Ist x Infinity, kommt π/2 heraus, bei -Infinity -π/2. NaN ergibt NaN, -0 ergibt -0.Beispiele
Grundlegende Werte
console.log(Math.atan(1)); // π/4
console.log(Math.atan(0)); // 0
console.log(Math.atan(-1)); // -π/4
console.log(Math.atan(Infinity)); // π/2
console.log(Math.atan('abc')); // NaN
Steigungswinkel einer Rampe in Grad
const toDegrees = (rad) => rad * 180 / Math.PI;
// Steigung in Prozent -> Winkel in Grad
const slopeAngle = (percent) => toDegrees(Math.atan(percent / 100));
console.log(slopeAngle(10).toFixed(2)); // Rampe mit 10 %
console.log(slopeAngle(100).toFixed(2)); // 100 % = 45°
Warum atan2 für Richtungen besser ist
const x = -1, y = -1; // Punkt im 3. Quadranten
const naive = Math.atan(y / x); // Vorzeichen heben sich auf
const correct = Math.atan2(y, x);
console.log((naive * 180 / Math.PI).toFixed(0)); // falsch: 45
console.log((correct * 180 / Math.PI).toFixed(0)); // richtig: -135
Weiche Begrenzung eines Wertes (Soft-Clamp)
// Bildet beliebige Werte weich auf den Bereich -1 bis 1 ab
const softClamp = (v) => (2 / Math.PI) * Math.atan(v);
console.log([-100, -1, 0, 1, 100].map(v => softClamp(v).toFixed(3)));
// Wichtig · Fallstricke
- Bogenmaß statt Grad: Das Ergebnis ist immer im Bogenmaß. Für Grad rechnest du mit
rad * 180 / Math.PIum. - Quadranten gehen verloren:
Math.atan(y / x)liefert für(1, 1)und(-1, -1)denselben Winkel. Für Richtungen und Rotationen nimmMath.atan2(y, x). - Typumwandlung: Argumente werden in eine Zahl umgewandelt.
Math.atan(null)ergibt0,Math.atan(undefined)ergibtNaN, und ein BigInt löst einenTypeErroraus. - Genauigkeit: Wie genau das Ergebnis ist, hängt von der Implementierung ab. Die letzten Nachkommastellen können sich zwischen den Engines unterscheiden. Vergleiche deshalb mit einer Toleranz (z. B.
Number.EPSILON) statt mit===. - Kompatibilität: Wird von allen Browsern und von Node.js unterstützt.