我正在使用CesiumJs
我有一个四元数(x,y,z,w) 我有一个向量(x,y,z)
我想将四元数乘以向量,基本上目前我有一个旋转,我想将该旋转与向量前进(0,0,1)相乘,以便获得朝向的点,但是CesiumJS当前没有这些功能。
我知道有一种方法可以用四元数乘以向量,在Unity中我曾经这么做过,但我不确定具体怎么做。
我找到了这个公式v' = q * v * (q^-1)
,但是(q^-1)
代表什么?
我正在使用CesiumJs
我有一个四元数(x,y,z,w) 我有一个向量(x,y,z)
我想将四元数乘以向量,基本上目前我有一个旋转,我想将该旋转与向量前进(0,0,1)相乘,以便获得朝向的点,但是CesiumJS当前没有这些功能。
我知道有一种方法可以用四元数乘以向量,在Unity中我曾经这么做过,但我不确定具体怎么做。
我找到了这个公式v' = q * v * (q^-1)
,但是(q^-1)
代表什么?
Marco13的评论是正确的。在Cesium中,四元数通常在与向量相乘之前转换为矩阵,并且存在用于此目的的内置函数。
这里有一个沙堡演示。var position = new Cesium.Cartesian3(0, 0, 1); // x, y, z
// Could instead use:
// var position = Cesium.Cartesian3.UNIT_Z.clone();
var quaternion = new Cesium.Quaternion(0.382683, 0, 0, 0.92388); // x, y, z, w
// Could alternately use: 45 degrees (pi/4 radians) around X
//var quaternion = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_X, Math.PI / 4);
var matrix = Cesium.Matrix3.fromQuaternion(quaternion);
var scratch1 = new Cesium.Cartesian3();
var result = Cesium.Matrix3.multiplyByVector(matrix, position, scratch1);
console.log(result);
// Result will be: (0, -0.7071063400800001, 0.7071079759110002)
// The +Z vector was rotated 45 degrees towards -Y, in a counter-clockwise
// rotation as seen from the +X axis.
Matrix3.fromQuaternion
从四元数创建一个3x3的旋转矩阵,然后像平常一样使用这个矩阵来旋转向量。如果这有帮助(且没有其他人发布答案),我可以尝试将其扩展为答案... - Marco13