Здравствуйте, я пытаюсь создать волновую картину на поверхности цилиндра.Волны должны вращаться с вращением поверхности.и таким образом, период синуса движется по кругу, а амплитуды представляют собой длинные насыпи на поверхности.Вот несколько фотографий, чтобы лучше объяснить, что я имею в виду.
Это то, что я пытаюсь получить вид цилиндра сверху вниз, чтобы он выглядел примерно так: 
это вид сверху моего цилиндра.Я бы хотел, чтобы волна меняла направление при вращении круга, чтобы она выглядела одинаково со всех сторон.

Я чувствую, что я очень близок, я просто не уверен, что кватернионили угол для умножения на вектор:
var geometry = this.threeDHandler.threeD_meshes[0].geometry;
var vec3 = new THREE.Vector3(); // temp vector
for (let i = 0; i < geometry.vertices.length; i++) {
vec3.copy(geometry.vertices[i]); // copy current vertex to the temp vector
vec3.setX(0);
vec3.normalize(); // normalize
//part i'm confsude about
const quaternion = new THREE.Quaternion();
const xPos = geometry.vertices[i].x;
//trying to twist the sine around the circle
const twistAmount = 100;
const upVec = new THREE.Vector3(0, 0, 1);
quaternion.setFromAxisAngle(
upVec,
(Math.PI / 180) * (xPos / twistAmount)
);
vec3.multiplyScalar(Math.sin((geometry.vertices[i].x* Math.PI) * period) * amplitude) // multiply with sin function
geometry.vertices[i].add(vec3); // add the temp vector to the current vertex
geometry.vertices[i].applyQuaternion(quaternion);
}
geometry.verticesNeedUpdate = true;
geometry.computeVertexNormals();