如何将标量乘法应用于四元数
How to apply a scalar multiplication to a Quaternion
所以,我正在将一些c++转换为javascript,我真的需要知道D3DX是如何定义它们的四元数运算符的。
//Here's the c++ version
D3DXQUATERNION Qvel = 0.5f * otherQuat* D3DXQUATERNION(angVel.x, angVel.y, angVel.z, 0);
//Here's the js quat multiplication
function quat_mul(q1, q2) {
return
[q1.x * q2.w + q1.y * q2.z - q1.z * q2.y + q1.w * q2.x,
-q1.x * q2.z + q1.y * q2.w + q1.z * q2.x + q1.w * q2.y,
q1.x * q2.y - q1.y * q2.x + q1.z * q2.w + q1.w * q2.z,
-q1.x * q2.x - q1.y * q2.y - q1.z * q2.z + q1.w * q2.w]
标量运算quat*0.5f就是这样吗
quat.x *= .5;
quat.y *= .5;
quat.z *= .5;
quat.w *= .5;
根据这个链接,就像你说的(也是在四元数系统中):
inline D3DXQUATERNION& D3DXQUATERNION::operator *= (FLOAT f)
{
x *= f;
y *= f;
z *= f;
w *= f;
return *this;
}
这是一个非常古老的问题,但我可以从已发表的资料中验证这一点:Vince 2011-计算机图形学的四元数,第57-58页。
更简单的形式:
q = [s, v] where s in R and v in R^3
lambda q = [lambda s, lambda v] where lambda in R
在更复杂的记法中:
q = a + bi + cj + dk
q * s = s * a + bi * s + cj * s + dk * s
= s * a + (b * s)i + (c * s)j + (d * s)k
在javascript 中
let quat = [0.4, 0.3, 0.7, 0.1];
function quaternion_scalar_multiplication(quat, s){
quat[0] *= s;
quat[1] *= s;
quat[2] *= s;
quat[3] *= s;
return quat;
}
相关文章:
- 单元测试欧拉到四元数实现失败
- 零四元数和任何向量都不为零的特征积,这是一个错误吗?
- 将四元数旋转的游戏对象旋转另一个四元数时出现问题
- 在OpenGL(GLM/C++)中使用四元数旋转时出现问题
- 想要将 CGAL 与四元数相结合是否合乎逻辑
- Eigen::Quaternion FromTwoVectors() 不返回有效的四元数
- C++四元数方程程序
- 四元数旋转不起作用
- 四元数和翻译
- 使用四元数防止绕某个轴旋转
- 如何使用四元数来描述超过360度的旋转角度?
- 四元数旋转错误
- 为什么我简单的四元数乘法比SSE快
- 特征:将矩阵3d旋转转换为四元数
- 从四元数查看矩阵
- 用四元数绕轴旋转矢量
- 将多态函数应用于每个元组元素的结果类型
- 基于四元数的相机不需要的卷轴
- 在C++中使用1D FFT的四元数FFT
- 如何将标量乘法应用于四元数