Итак, я хочу создать поле 2D-потока в файле three.js из рабочего примера в p5.js. Это оригинальный исходный код:Создать вектор3 с определенным заголовком
var inc = 0.1; //Increment of noise
var yoff = 0;
var scl = var; //Scale of noise field
var cols = rows = 10;
for(var y = 0; y < rows; y++)
{
var xoff = 0;
for(var x = 0; x < cols; x++)
{
var index = x + y * cols;
var angle = noise(xoff, yoff) * TWO_PI; //Create angle with Perlin noise
var v = p5.Vector.fromAngle(angle); //Create new vector from angle
v.setMag(0.1); //set magnitude of vector
flowfield[index] = v;
xoff += inc;
stroke(0, 50);
strokeWeight(1);
push();
translate(x * scl, y * scl);
rotate(v.heading());
line(0, 0, scl, 0);
pop();
}
yoff += inc;
}
Теперь я хочу повторить функцию p5.Vector.fromAngle() в three.js.
Насколько я понимаю, мне нужно создать вектор, а затем повернуть вектор вокруг оси z, используя .applyQuaternion (quaternion). Однако я вращаю вектор вокруг центра и не изменяю его заголовок.
var vector = new THREE.Vector3(100, 100, 0);
var angle = Math.random() * Math.PI * 2;
var quaternion = new THREE.Quaternion();
quaternion.setFromAxisAngle(new THREE.Vector3(0, 0, 1), Math.PI/2);
vector.applyQuaternion(quaternion);
Я не уверен, что понял вас правильно, извинения, если нет. Вектор можно рассматривать как указатель от центра («происхождение») до определенной точки в 3D-пространстве. Таким образом, единственный способ поворота вектора - это происхождение. Это может помочь, если вы добавите какое-то объяснение, что вы пытаетесь сделать, каково ожидаемое поведение и что вы получаете вместо этого. –
Несомненно, я добавлю его к исходному вопросу. – IIMaxII