Квадратичные, безьевые и синусоидальные кривые не будут хорошо соответствовать кривой фильтра. Их можно спорить, но я не рекомендую.
Если эти кривые должны быть динамическими, я рекомендую найти фактические функции для фильтров и использовать lineTo (x, y) столько раз, сколько вы сочтете нужным.
Если у вас есть математическая функция, запрограммированная в javascript-функцию, вы можете сделать следующее.
context.beginPath();
for(var i = startX; i<endX; i++)
context.lineTo(i, myCurve(i));
context.lineWidth = 5;
context.strokeStyle = 'black';
context.stroke();
Единственная причина, по которой это не делается, заключается в том, что вы беспокоитесь о проблемах с производительностью или о том, что ваш холст очень большой.
Если это так, вероятно, вы должны использовать предварительно вычисленную кривую. Кривые Безье хорошо работают для такого рода работ.
Если вам нужна динамика кривой и у вас есть вышеупомянутые проблемы с производительностью, вам нужно найти математика и выяснить, как сопоставить независимые функции кривым Безье. Это можно сделать, но для этого требуется довольно много алгебры.
Я нашел формулу для фильтра высоких частот, но я не думаю, что любая из этих подсказок в этом контексте https://en.wikipedia.org/wiki/High-pass_filter – Asperger
Я что-то нашел! https://en.wikipedia.org/wiki/Filter_(signal_processing) – Asperger
Я думаю, что вы правы. Это большой объем работы. Я думаю, что beziercurves являются самыми близкими, которые я могу получить тогда. Это не будет точно, но, по крайней мере, будет выглядеть похожим. По меньшей мере, фильтры с высоким и низким пропусканием можно эмулировать. Изменение Q (ширина полосы) немного сложно запрограммировать динамически. Несколько эмулирующих кривых с грехом хорошо работает, хотя http://jsfiddle.net/5v4judqf/5/, особенно изменяя Q (ширина полосы) – Asperger