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

Math.atan()

Methode

Gibt den Arcustangens einer Zahl im Bogenmaß zurück – einen Winkel im Bereich von <code>-π/2</code> bis <code>π/2</code>.

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

Signatur

Math.atan(x)

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

Typ
number
Beschreibung
Der Arcustangens von 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
0.7853981633974483 0 -0.7853981633974483 1.5707963267948966 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°
5.71 45.00

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
45 -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)));
[ '-0.994', '-0.500', '0.000', '0.500', '0.994' ]

// Wichtig · Fallstricke

  • Bogenmaß statt Grad: Das Ergebnis ist immer im Bogenmaß. Für Grad rechnest du mit rad * 180 / Math.PI um.
  • Quadranten gehen verloren: Math.atan(y / x) liefert für (1, 1) und (-1, -1) denselben Winkel. Für Richtungen und Rotationen nimm Math.atan2(y, x).
  • Typumwandlung: Argumente werden in eine Zahl umgewandelt. Math.atan(null) ergibt 0, Math.atan(undefined) ergibt NaN, und ein BigInt löst einen TypeError aus.
  • 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.