Мой список:
Разработки программного обеспечения stackoverflow Подкаст
ThoughtWorks - Подкаст Вопросов IT
РЕДАКТИРОВАНИЕ: Пропущенный: Изящный Бросок Кода
y = abs((x++ % 6) - 3);
Это дает треугольную волну с периодом 6, колеблющуюся между 3 и 0.
y = (x++ % 6) < 3 ? 3 : 0;
Это дает правильную прямоугольную волну с периодом 6, колеблющуюся между 3 и 0.
y = 3 * sin((float)x / 10);
Это дает синусоидальную волну с периодом 20 пи
, колеблющуюся между 3 и -3.
Обновление:
To чтобы получить вариацию треугольной волны, которая имеет кривые, а не прямые, вам просто нужно ввести показатель степени в уравнение, чтобы сделать его квадратичным.
Вогнутые кривые (т.е. форма x ^ 2
):
y = pow(abs((x++ % 6) - 3), 2.0);
Вогнутые кривые (например, sqrt (x)
shape):
y = pow(abs((x++ % 6) - 3), 0.5);
В качестве альтернативы использованию функции pow
вы можете просто определить функцию квадрат
и использовать функция sqrt
в math.h
,что, вероятно, немного улучшит производительность.
Кроме того, если вы хотите сделать кривые более крутыми / более мелкими, просто попробуйте изменить индексы.
Во всех этих случаях вы легко сможете настроить константы и добавить коэффициенты масштабирования в нужных местах, чтобы отображать вариации данных сигналов (разные периоды, амплитуды, асимметрии и т. д.).
y = abs( amplitude - x % (2*amplitude) )
Для изменения длины волны нужен коэффициент x
.
Редактировать: То, что я называю амплитудой, на самом деле не амплитуда, а максимальное значение (например, 5, если кривая колеблется между 0 и 5). Амплитуда в математическом смысле вдвое меньше. Но вы поняли.