Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
THREE.js根据“设置矩形平行六面体旋转”;“正常”;它的两个面的向量_Three.js_3d_Rotation_Quaternions_Euler Angles - Fatal编程技术网

THREE.js根据“设置矩形平行六面体旋转”;“正常”;它的两个面的向量

THREE.js根据“设置矩形平行六面体旋转”;“正常”;它的两个面的向量,three.js,3d,rotation,quaternions,euler-angles,Three.js,3d,Rotation,Quaternions,Euler Angles,我在3d空间中有一个矩形平行六面体,如下所示: 假设将其放置在轴原点上,当其旋转为(0,0,0)时,其最大面(绿色)位于XY上,其最小面(蓝色)平行于YZ 假设我有两个(正交)向量,V1和V2 V1表示Object3d最大面(绿色面)的法线 V2是最小面(蓝色面)的法线 给定两个新向量,如何在三维空间中旋转这个平行六面体,使其面法线与这些新向量对齐 示例: const V1 = new Vector3(0, 1, 0); const V2 = new Vector3(0, 0, 1); co

我在3d空间中有一个矩形平行六面体,如下所示:

假设将其放置在轴原点上,当其旋转为(0,0,0)时,其最大面(绿色)位于XY上,其最小面(蓝色)平行于YZ

假设我有两个(正交)向量,V1和V2

V1表示Object3d最大面(绿色面)的法线

V2是最小面(蓝色面)的法线

给定两个新向量,如何在三维空间中旋转这个平行六面体,使其面法线与这些新向量对齐

示例:

const V1 = new Vector3(0, 1, 0);
const V2 = new Vector3(0, 0, 1);
const v1 = some_value;
const v2 = some_othen_value; // ortogonal to v1

const q1 = new Quaternion();
q1.setFromUnitVectors(new Vector3(1, 0, 0), v1);

const q2 = new Quaternion();
q2.setFromUnitVectors(new Vector3(0, 0, 1), v2);

parallelepiped.setRotationFromQuaternion(q2.multiply(q1));
在这个配置中,我希望有这个旋转(欧拉梯度):(-90,0,-90)

(生成的实体在XZ上的最大面朝下,在XY上的最小面朝下)

我所尝试的:

const V1 = new Vector3(0, 1, 0);
const V2 = new Vector3(0, 0, 1);
const v1 = some_value;
const v2 = some_othen_value; // ortogonal to v1

const q1 = new Quaternion();
q1.setFromUnitVectors(new Vector3(1, 0, 0), v1);

const q2 = new Quaternion();
q2.setFromUnitVectors(new Vector3(0, 0, 1), v2);

parallelepiped.setRotationFromQuaternion(q2.multiply(q1));
此方法适用于某些配置,但在其他配置中失败严重

失败示例:

V1 = new Vector3(1, 0, 0);
V2 = new Vector3(0, 0, 1);
在本例中,得到的旋转是(0,0,0),但我希望是(0,90,90)

你知道吗