四元数乘法定义明确,我称之为“汉密尔顿积”:
// hamilton product
vec4 qmul(in vec4 q1, in vec4 q2) {
return vec4(
q1.w * q2.xyz + q2.w * q1.xyz - cross(q1.xyz, q2.xyz),
q1.w*q2.w - dot(q1.xyz, q2.xyz)
);
}
但是,为了实现qtanh()
四元数函数,我们需要除法。到目前为止,我已经找到了这个,并且工作正常。你能不能帮我理解一下,这是从哪里来的?
// division
// https://www.boost.org/doc/libs/1_67_0/boost/math/quaternion.hpp
vec4 qdiv(in vec4 q1, in vec4 q2) {
float denominator = dot(q2,q2);
return vec4(
vec3(
-q1.w*q2.x+q1.x*q2.w-q1.y*q2.z+q1.z*q2.y,
-q1.w*q2.y+q1.x*q2.z+q1.y*q2.w-q1.z*q2.x,
-q1.w*q2.z-q1.x*q2.y+q1.y*q2.x+q1.z*q2.w
),
q1.w*q2.w + dot(q1.xyz, q2.xyz)
) / denominator;
}
此外,就我试图实现 tanh() 而言,您是否知道更多的计算增值税,而不是划分 sinh 和 cosh?对于实数,我曾经使用以下公式: tanh(x)=-1+2/(1+exp(-x))
. 这仅涉及单个指数微积分,而不是两个..