Ваш код рисует только одну синусоидальную волну.
Я советую вам эти пункты:
_Если вам нужна другая (одновременная) волна, вы должны использовать разные значения x / y в точке рисования.
_В качестве цикла анимации вы используете $ (document) .ready (function (), это не лучший способ сделать это. Для анимации вы должны установить setInterval или способ лучше использовать requestAnimationFrame, который предназначен для создания анимации. В каждом Цикл анимации рисует 4 линии синуса, я забуду про шаг для использования объектов, который я считаю лучше, но это не важно. У меня нет времени, чтобы попробовать ваш код, но что он делает при использовании requestAnimationFrame (start () ) вместо $ document.ready?
Очевидно, в каждом аниматве очистить место рисования, используя clearRect (ширина, высота); например.
_ 4 шага добавляют +1 к +4 к y в том же декартовом уравнении. В синусоидальной кривой, которая на самом деле не будет видна человеческим глазом, потому что это действительно небольшое изменение. Вы можете использовать разностные уравнения, используя разностные синусоидальные уравнения для каждого шага / объекта, то есть Math.sin (y) +10 или Math.sin (y) * 10 и т. Д. ... или даже различное значение инкрементации для каждого разностного объекта.
Я буду избегать преобразования и использовать цикл for для увеличения значения x и получения значения y с помощью sin (x) и любого уравнения, которое вам нужно, это личный выбор, но он не будет писать строку .translate () и будет использовать нормальные координаты. вместо перемещенных координат вы легко увидите в console.log реальные координаты в области холста.
_ Как и в предыдущем случае, вы можете отбросить проверяющие IF в начале программы, если вы используете объекты в массиве (и зацикливаете их) и устанавливаете styleColor и вес каждого из 4 объектов.
Надеюсь, это поможет, нет времени писать чистый код.