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

Math.sin()

Methode

Gibt den Sinus des Winkels <code>x</code> (im Bogenmaß/Radiant) als Zahl zwischen -1 und 1 zurück.

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

Signatur

Math.sin(x)

Beschreibung

Math.sin() ist eine statische Methode des Math-Objekts. Sie berechnet den Sinus eines Winkels, der im Bogenmaß (Radiant) angegeben wird. Das Ergebnis liegt immer im geschlossenen Intervall von -1 bis 1. Da Math kein Konstruktor ist, wird die Methode immer direkt als Math.sin() aufgerufen.

Typische Einsatzgebiete sind Animationen (Wellen-, Pendel- und Schwingbewegungen), Kreis- und Polarkoordinaten im Canvas oder in SVG, Audiosynthese (Sinustöne über die Web Audio API) sowie Geometrie- und Physikberechnungen.

Wichtig: Winkel in Grad müssen vorher umgerechnet werden: radiant = grad * Math.PI / 180. Werte, die keine Zahl sind, werden zuerst per Typumwandlung in eine Zahl konvertiert (z. B. "1" → 1, null → 0).

Parameter

Name Typ Default Beschreibung
$x Pflicht number Winkel im Bogenmaß (Radiant). Nicht-numerische Werte werden in eine Zahl umgewandelt.

Rückgabewert

Typ
number
Beschreibung
Der Sinus von x im Bereich -1 bis 1. Bei NaN, Infinity oder -Infinity ist das Ergebnis NaN; -0 ergibt -0.

Beispiele

Grundlegende Werte und Grad-Umrechnung

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

console.log(Math.sin(0));            // 0
console.log(Math.sin(Math.PI / 2));  // 1
console.log(Math.sin(toRad(30)));    // ca. 0.5
console.log(Math.sin(Math.PI));      // kein exaktes 0!
0 1 0.49999999999999994 1.2246467991473532e-16

Punkte auf einem Kreis berechnen (Polarkoordinaten)

const punkteAufKreis = (anzahl, radius, cx = 0, cy = 0) =>
  Array.from({ length: anzahl }, (_, i) => {
    const winkel = (i / anzahl) * 2 * Math.PI;
    return {
      x: +(cx + radius * Math.cos(winkel)).toFixed(2),
      y: +(cy + radius * Math.sin(winkel)).toFixed(2)
    };
  });

console.log(punkteAufKreis(4, 10));
[ { x: 10, y: 0 }, { x: 0, y: 10 }, { x: -10, y: 0 }, { x: 0, y: -10 } ]

Schwebende Animation mit requestAnimationFrame

const box = document.querySelector('.box');
const amplitude = 20;   // Pixel
const frequenz = 0.5;   // Schwingungen pro Sekunde

const animiere = (zeit) => {
  const t = zeit / 1000;
  const y = amplitude * Math.sin(2 * Math.PI * frequenz * t);
  box.style.transform = `translateY(${y}px)`;
  requestAnimationFrame(animiere);
};

requestAnimationFrame(animiere);

Sonderfälle und Typumwandlung

console.log(Math.sin('1'));       // String wird umgewandelt
console.log(Math.sin(null));      // null → 0
console.log(Math.sin(Infinity));
console.log(Math.sin(undefined));
console.log(Object.is(Math.sin(-0), -0));
0.8414709848078965 0 NaN NaN true

// Wichtig · Fallstricke

  • Radiant statt Grad: Der häufigste Fehler ist, Grad direkt zu übergeben. Math.sin(90) ergibt 0.8939…, nicht 1. Vorher mit * Math.PI / 180 umrechnen.
  • Gleitkomma-Ungenauigkeit: Weil Math.PI nur eine Näherung ist, liefert Math.sin(Math.PI) 1.22e-16 statt 0. Ergebnisse nicht mit === vergleichen, sondern mit einer Toleranz, z. B. Math.abs(a - b) < Number.EPSILON * 10, oder für die Ausgabe runden.
  • Implementierungsabhängige Genauigkeit: Die Spezifikation schreibt keine bitgenauen Ergebnisse vor. Zwischen Engines (V8, SpiderMonkey, JavaScriptCore) können sich die letzten Nachkommastellen unterscheiden – für deterministische Simulationen oder Netzwerk-Synchronisation relevant.
  • Große Argumente: Bei sehr großen Werten (z. B. 1e22) sinkt die Aussagekraft, da der Abstand zwischen darstellbaren Gleitkommazahlen größer als eine ganze Periode (2π) wird.
  • BigInt: Math.sin(1n) wirft einen TypeError; vorher mit Number() umwandeln.
  • Kompatibilität: in allen Browsern und Node.js-Versionen verfügbar.