Signatur
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
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!
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));
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));
// Wichtig · Fallstricke
- Radiant statt Grad: Der häufigste Fehler ist, Grad direkt zu übergeben.
Math.sin(90)ergibt0.8939…, nicht1. Vorher mit* Math.PI / 180umrechnen. - Gleitkomma-Ungenauigkeit: Weil
Math.PInur eine Näherung ist, liefertMath.sin(Math.PI)1.22e-16statt0. 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 einenTypeError; vorher mitNumber()umwandeln. - Kompatibilität: in allen Browsern und Node.js-Versionen verfügbar.