Math.sin: примеры (JAVASCRIPT)

Функция Math.sin в языке JavaScript
Раздел: Математика, Тригонометрия
Math.sin(x (number)): number

Описание и синтаксис

Метод Math.sin() возвращает синус числа. В JavaScript эта функция является статическим методом объекта Math, поэтому она вызывается как Math.sin(x), а не как метод экземпляра.

Функция вычисляет тригонометрический синус угла. Угол должен быть указан в радианах. Если требуется использовать градусы, их необходимо предварительно преобразовать.

Аргумент:
- x: Число, представляющее угол в радианах, для которого вычисляется синус. Если аргумент не является числом, он будет неявно преобразован в число.

Возвращаемое значение:
- Число от -1 до 1, являющееся синусом переданного угла. Для нечисловых аргументов, которые не преобразуются в значимое число (например, строки, не содержащие чисел), возвращается NaN.

Базовые примеры

Примеры вызова функции с разными аргументами.

Стандартный вызов:

console.log(Math.sin(0));
console.log(Math.sin(Math.PI / 2));
console.log(Math.sin(Math.PI));
0
1
1.2246467991473532e-16 (практически 0)

Использование градусов (с преобразованием):

let degrees = 30;
let radians = degrees * (Math.PI / 180);
console.log(Math.sin(radians));
0.49999999999999994

Некорректный аргумент:

console.log(Math.sin("текст"));
NaN

Похожие функции в JavaScript

Math.cos(x): Возвращает косинус угла x в радианах.
Math.tan(x): Возвращает тангенс угла x в радианах.
Math.asin(x): Возвращает арксинус числа x (результат в радианах). Работает в диапазоне от -1 до 1.
Math.sinh(x): Возвращает гиперболический синус числа x.
Функции cos и tan используют ту же систему измерения углов (радианы) и часто применяются вместе с sin для полных тригонометрических расчетов. asin является обратной операцией. sinh относится к гиперболическим функциям и имеет другую математическую природу.

Аналоги в других языках

Python: Функция math.sin(x) из модуля math. Аналогично использует радианы.

import math
print(math.sin(math.pi/2))
1.0

PHP: Функция sin($x). Угол также в радианах.

echo sin(M_PI_2);
1

C/C++: Функция sin(double x) из заголовка math.h или cmath. Работает с радианами.

#include 
printf("%f", sin(M_PI/2));
1.000000

MySQL: Функция SIN(x). Аргумент в радианах.

SELECT SIN(PI()/2);
1

Отличия от JavaScript обычно минимальны и касаются именования и способа вызова. Все перечисленные функции принимают угол в радианах и возвращают число.

Распространенные ошибки

1. Использование градусов без преобразования: Самая частая ошибка - передача значения в градусах.

// Неправильно
console.log(Math.sin(90)); // 90 радиан, а не градусов
// Правильно
console.log(Math.sin(90 * Math.PI / 180)); // Преобразование в радианы
0.8939966636005579
1

2. Ожидание абсолютной точности: Из-за особенностей арифметики с плавающей точкой результат может быть неидеальным.

console.log(Math.sin(Math.PI)); // Ожидается 0
1.2246467991473532e-16 // Очень близко к 0

3. Передача нечисловых строк: Хотя происходит преобразование, оно может дать NaN.

console.log(Math.sin("45")); // Сработает преобразование
console.log(Math.sin("45 градусов")); // Не сработает
0.8509035245341184
NaN

История изменений

Функция Math.sin() присутствует в JavaScript с самых первых версий ECMAScript 1 (1997 год). Ее поведение, сигнатура и алгоритм вычисления оставались стабильными на протяжении всех версий языка.

Основные изменения касались не самой функции, а точности и скорости ее работы в различных движках JavaScript (V8, SpiderMonkey, JavaScriptCore). Современные движки используют высокооптимизированные аппаратные инструкции для вычисления тригонометрических функций, что значительно повысило их производительность.

Стандарт ECMAScript не вносил существенных изменений в работу Math.sin(), гарантируя обратную совместимость.

Расширенные примеры

Генерация простой синусоиды для анимации:

Пример javascript
// Координата Y объекта, движущегося по синусоиде
for (let time = 0; time < 2 * Math.PI; time += 0.5) {
    let amplitude = 50; // Амплитуда
    let y = amplitude * Math.sin(time);
    console.log(`Время: ${time.toFixed(2)}, Y: ${y.toFixed(2)}`);
}
Время: 0.00, Y: 0.00
Время: 0.50, Y: 23.99
Время: 1.00, Y: 42.16
Время: 1.50, Y: 49.87
Время: 2.00, Y: 45.47
Время: 2.50, Y: 29.88
Время: 3.00, Y: 7.05
Время: 3.50, Y: -17.76
Время: 4.00, Y: -37.80
Время: 4.50, Y: -46.60
Время: 5.00, Y: -41.21
Время: 5.50, Y: -22.90
Время: 6.00, Y: -0.28

Создание плавного повторяющегося эффекта (пульсация):

Пример javascript
// Получение значения от 0 до 1 для пульсирующего эффекта
function getPulseValue(t, period = 2000) {
    // t - время в миллисекундах
    let radians = (t % period) / period * 2 * Math.PI;
    // Преобразуем синус из диапазона [-1, 1] в [0, 1]
    return (Math.sin(radians) + 1) / 2;
}
console.log(getPulseValue(0));
console.log(getPulseValue(500)); // Четверть периода при period=2000
console.log(getPulseValue(1000)); // Полпериода
0.5
1
0.5

Вычисление длины противоположенного катета в прямоугольном треугольнике:

Пример javascript
function calculateOppositeSide(angleRadians, hypotenuse) {
    return hypotenuse * Math.sin(angleRadians);
}
let angle = 30 * Math.PI / 180; // 30 градусов в радианах
let sideC = 10; // Гипотенуза
console.log(calculateOppositeSide(angle, sideC));
4.999999999999999

Генерация звуковой волны (упрощенный пример):

Пример javascript
// Генерация семпла синусоидальной волны частотой 440 Гц (нота Ля)
function generateSineWave(frequency, durationMs, sampleRate = 44100) {
    let samples = [];
    let samplesCount = durationMs * sampleRate / 1000;
    for (let i = 0; i < samplesCount; i++) {
        let time = i / sampleRate;
        // 2 * PI * частота * время
        let sample = Math.sin(2 * Math.PI * frequency * time);
        samples.push(sample);
    }
    return samples;
}
// Получим 10 первых семплов для частоты 1 Гц и длительности 1 сек
let wave = generateSineWave(1, 1000, 10);
console.log(wave.slice(0, 5).map(v => v.toFixed(3)));
["0.000", "0.588", "0.951", "0.951", "0.588"]

Проверка области определения:

Пример javascript
// Math.sin() принимает любые числа, включая особые значения
console.log(Math.sin(Infinity));
console.log(Math.sin(-Infinity));
console.log(Math.sin(NaN));
NaN
NaN
NaN

JS Math.sin function comments

En
Math.sin Returns the sine of a number