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)); // Ожидается 01.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(), гарантируя обратную совместимость.
Расширенные примеры
Генерация простой синусоиды для анимации:
// Координата 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
Создание плавного повторяющегося эффекта (пульсация):
// Получение значения от 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
Вычисление длины противоположенного катета в прямоугольном треугольнике:
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
Генерация звуковой волны (упрощенный пример):
// Генерация семпла синусоидальной волны частотой 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"]
Проверка области определения:
// Math.sin() принимает любые числа, включая особые значения
console.log(Math.sin(Infinity));
console.log(Math.sin(-Infinity));
console.log(Math.sin(NaN));NaN NaN NaN