Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
C 以更直接的方式围绕轴和特定轴心点旋转?_C_Performance_Math_Matrix_Rotational Matrices - Fatal编程技术网

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){

目前这是可行的,它是通过转换到原点,旋转,然后转换回IIRC来实现的。然而,无论你是使用乘法还是使用更有效的方法进行翻译,它似乎都没有达到应有的效率。我正在寻找一种更直接的方法来围绕一个特定的轴心点旋转。这能做到吗

再说一次,我追求的是逻辑,所以这是C这个事实并不重要

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));
}