C 以更直接的方式围绕轴和特定轴心点旋转?
目前这是可行的,它是通过转换到原点,旋转,然后转换回IIRC来实现的。然而,无论你是使用乘法还是使用更有效的方法进行翻译,它似乎都没有达到应有的效率。我正在寻找一种更直接的方法来围绕一个特定的轴心点旋转。这能做到吗 再说一次,我追求的是逻辑,所以这是C这个事实并不重要C 以更直接的方式围绕轴和特定轴心点旋转?,c,performance,math,matrix,rotational-matrices,C,Performance,Math,Matrix,Rotational Matrices,目前这是可行的,它是通过转换到原点,旋转,然后转换回IIRC来实现的。然而,无论你是使用乘法还是使用更有效的方法进行翻译,它似乎都没有达到应有的效率。我正在寻找一种更直接的方法来围绕一个特定的轴心点旋转。这能做到吗 再说一次,我追求的是逻辑,所以这是C这个事实并不重要 inline matrix_float4x4 Translate(const float X, const float Y, const float Z) { return (matrix_float4x4){
inline matrix_float4x4 Translate(const float X, const float Y, const float Z) {
return (matrix_float4x4){
.columns = {
{1, 0, 0, 0},
{0, 1, 0, 0},
{0, 0, 1, 0},
{X, Y, Z, 1}
}
};
}
matrix_float4x4 Rotate(const float Radians, const float X, const float Y, const float Z, const float CX, const float CY, const float CZ) {
const float Sin = sinf(Radians), Cos = cosf(Radians), T = 1-Cos, SinX = Sin*X, SinY = Sin*Y, SinZ = Sin*Z, TX = X*T, TY = Y*T, TZ = T*Z;
return matrix_multiply(matrix_multiply(Translate(CX, CY, CZ), (matrix_float4x4){
.columns = {
{Cos+(X*TX), (Y*TX)+SinZ, (Z*TX)-SinY, 0},
{(X*TY)-SinZ, Cos+(Y*TY), (Z*TY)+SinX, 0},
{(X*TZ)+SinY, (Y*TZ)-SinX, Cos+(Z*TZ), 0},
{0, 0, 0, 1}
}
}), Translate(-CX, -CY, -CZ));
}