{"rsdb":{"rid":"156028","subhead":"","postdate":"0","aid":"117132","fid":"49","uid":"1","topic":"1","content":"
\n

\u7528C++<\/a>\u5b9e\u73b0\u77e9\u9635\u8fd0\u7b97\uff1a<\/strong>\u6700\u8fd1\u5b66\u4e60\u8fc7\u7a0b\u4e2d\u7528\u5230\u77e9\u9635\uff0c\u8fd9\u91cc\u6c47\u603b\u4e00\u4e0b\u7528\u5230\u7684\u77e9\u9635\u7684\u5404\u79cd\u8fd0\u7b97\u3002\u5305\u62ec\uff1a\u6c42\u8f6c\u7f6e\u77e9\u9635\uff084*4\uff09\uff1b\u6c42\u77e9\u9635\u7684\u4e58\u79ef\uff084*4_4*4\uff09\u6c42\u9006\u77e9\u9635\uff083*3\uff09\u3002<\/p> \n

52.1\u6c42\u77e9\u9635\u7684\u4e58\u79ef\uff084*4_4*4\uff09<\/h3> \n
\n \n
\n

\u6211\u4eec\u7a0b\u5e8f\u4e2dA\u3001B\u90fd\u662f4*4\u7684\u77e9\u9635\u3002<\/p> \n

\n

C++<\/a>\u4ee3\u7801\u5982\u4e0b\uff1a<\/strong><\/p> \n

\r\nbool matrix_4_4_multiply_4_4(const float matrix1[4][4], const float matrix2[4][4], float (&result)[4][4]) {\r\n\/\/\u6c42\u4e24\u4e2a4*4\u77e9\u9635\u7684\u4e58\u79ef\r\n        for (int k=0; k<4; k++) {\r\n            for (int i=0; i<4; i++) {\r\n                result[i][k] = 0.0;\r\n                for (int j=0; j<4; j++) {\r\n                    result[i][k] = result[i][k] + matrix1[i][j]*matrix2[j][k];\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n}\r\n\r\n    int main(){\r\n        float matrix1[4][4] = {{1, 2, 3, 4}, {2, 3, 4, 5}, {3, 4, 5, 6}, {4, 5, 6, 7}};\r\n        float matrix2[4][4] = {{2, 3, 4, 5}, {3, 4, 5, 6}, {4, 5, 6, 7}, {5, 6, 7, 8}};\r\n        float result[4][4];\r\n        matrix_4_4_multiply_4_4(matrix1, matrix2, result);\r\n        std::cout << \"matrix1:\" << endl;\r\n        for (int i=0; i<4; i++) {\/\/\u6253\u5370matrix1\r\n            for (int j=0; j<4; j++) {\r\n                std::cout << matrix1[i][j] << \"   \";\r\n            }\r\n            std::cout << endl;\r\n        }\r\n        std::cout << endl;\r\n        std::cout << \"matrix2:\" << endl;\r\n        for (int i=0; i<4; i++) {\/\/\u6253\u5370matrix2\r\n            for (int j=0; j<4; j++) {\r\n                std::cout << matrix2[i][j] << \"   \";\r\n            }\r\n            std::cout << endl;\r\n        }\r\n        std::cout << endl;\r\n        std::cout << \"matrix1 multiply matrix2:\" << endl;\r\n        for (int i=0; i<4; i++) {\/\/\u6253\u5370matrix1\u548cmatrix2\u7684\u4e58\u79ef\r\n            for (int j=0; j<4; j++) {\r\n                std::cout << result[i][j] << \"   \";\r\n            }\r\n            std::cout << endl;\r\n        }\r\n    }\r\n<\/pre> \n    

\u8f93\u51fa\u7ed3\u679c\u5982\u4e0b\uff1a<\/strong><\/p> \n \n
\n

52.2\u6c42\u8f6c\u7f6e\u77e9\u9635\uff084*4\uff09<\/h3> \n
\n

<\/p> \n

<\/p> \n

\u6211\u4eec\u7a0b\u5e8f\u4e2d\u7528\u5230\u76844*4\u7684\u77e9\u9635\u7684\u8f6c\u7f6e\u3002<\/p> \n

C++\u4ee3\u7801\u5982\u4e0b\uff1a<\/strong><\/p> \n

\r\nbool get_matrix_transpose_4_4(const float matrix[4][4], float (&result)[4][4]) {\r\n    for (int i=0; i<4; i++) {\r\n        for (int j=0; j<4; j++) {\r\n            result[j][i] = matrix[i][j];\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\r\nint main(){\r\n        float matrix3[4][4] = {{1, 2, 3, 4}, {3, 4, 5, 6}, {5, 6, 7, 8}, {7, 8, 9, 0}};\r\n        float transpose[4][4];\r\n        get_matrix_transpose_4_4(matrix3, transpose);\r\n\r\n        std::cout << \"matrix3:\" << endl;\r\n        for (int i=0; i<4; i++) {\r\n            for (int j=0; j<4; j++) {\r\n                std::cout << matrix3[i][j] << \"   \";\r\n            }\r\n            std::cout << endl;\r\n        }\r\n        std::cout << endl;\r\n        std::cout << \"transpose:\" << endl;\r\n        for (int i=0; i<4; i++) {\r\n            for (int j=0; j<4; j++) {\r\n                std::cout << transpose[i][j] << \"   \";\r\n            }\r\n            std::cout << endl;\r\n        }\r\n    }\r\n<\/pre> \n    

\u8f93\u51fa\u7ed3\u679c\u5982\u4e0b\uff1a<\/strong><\/p> \n \n

52.3 \u6c42\u9006\u77e9\u9635\uff083*3\uff09<\/h3> \n

\u6c42\u9006\u77e9\u9635\u53ef\u4ee5\u7528\u4f34\u968f\u77e9\u9635\uff0c\u4e5f\u53ef\u4ee5\u7528\u521d\u7b49\u53d8\u6362\u3002\u6211\u4eec\u8fd9\u91cc\u662f\u7528\u4f34\u968f\u77e9\u9635\u7684\u65b9\u6cd5\u6765\u6c42\u9006\u77e9\u9635\u3002<\/p> \n

\u4ee3\u6570\u4f59\u5b50\u5f0f\uff1a<\/strong><\/p> \n \n

\u4f34\u968f\u77e9\u9635\uff1a<\/strong><\/p> \n \n

\u884c\u5217\u5f0f\u7684\u8ba1\u7b97\uff1a<\/strong><\/p> \n

\uff08\u56e0\u4e3a\u6211\u4eec\u8fd9\u91cc\u7528\u5230\u7684\u662f3*3\u7684\u77e9\u9635\uff0c\u6240\u4ee5\uff0c\u8fd9\u91cc\u53ea\u8003\u86513\u9636\u884c\u5217\u5f0f\uff09<\/p> \n \n

\u6c42\u9006\u77e9\u9635\uff1a<\/strong><\/p> \n \n

<\/p> \n

<\/p> \n

C++\u4ee3\u7801\u5982\u4e0b\uff1a<\/strong><\/p> \n

\r\nbool get_matrix_inverse_3_3(const float m[3][3], float (&inverse)[3][3]) {\r\n        float det_m = m[0][0]*m[1][1]*m[2][2] + m[0][1]*m[1][2]*m[2][0] + m[0][2]*m[1][0]*m[2][1] -\r\n                      m[0][2]*m[1][1]*m[2][0] - m[0][0]*m[1][2]*m[2][1] - m[0][1]*m[1][0]*m[2][2];\r\n        if (fabs(det_m) < 1e-6) {\r\n            return false;\r\n        }\r\n        else {\r\n            vec3 a = (1\/det_m)*vec3(m[1][1]*m[2][2] - m[1][2]*m[2][1],\r\n                                    m[1][2]*m[2][0] - m[1][0]*m[2][2],\r\n                                    m[1][0]*m[2][1] - m[1][1]*m[2][0]);\r\n            vec3 b = (1\/det_m)*vec3(m[0][2]*m[2][1] - m[0][1]*m[2][2],\r\n                                    m[0][0]*m[2][2] - m[0][2]*m[2][0],\r\n                                    m[0][1]*m[2][0] - m[0][0]*m[2][1]);\r\n            vec3 c = (1\/det_m)*vec3(m[0][1]*m[1][2] - m[0][2]*m[1][1],\r\n                                    m[0][2]*m[1][0] - m[0][0]*m[1][2],\r\n                                    m[0][0]*m[1][1] - m[0][1]*m[1][0]);\r\n            get_matrix_3_3(a, b, c, inverse);\r\n            return true;\r\n        }\r\n}\r\n\r\nint main(){\r\n        float matrix4[3][3] = {{1, 0, 1}, {2, 1, 0}, {-3, 2, -5}};\r\n        float inverse[3][3];\r\n        get_matrix_inverse_3_3(matrix4, inverse);\r\n        std::cout << \"matrix4:\" << endl;\r\n        for (int i=0; i<3; i++) {\r\n            for (int j=0; j<3; j++) {\r\n                std::cout << matrix4[i][j] << \"    \";\r\n            }\r\n            std::cout << endl;\r\n        }\r\n        std::cout << endl;\r\n        std::cout << \"inverse:\" << endl;\r\n        for (int i=0; i<3; i++) {\r\n            for (int j=0; j<3; j++) {\r\n                std::cout << inverse[i][j] << \"    \";\r\n            }\r\n            std::cout << endl;\r\n        }\r\n}\r\n<\/pre> \n    
\n

\u8f93\u51fa\u7ed3\u679c\u5982\u4e0b\uff1a<\/strong><\/p> \n \n
\n <\/div>\n <\/div>\n <\/div>\n<\/dd>","orderid":"0","title":"\u7528C++\u5b9e\u73b0\u77e9\u9635\u8fd0\u7b97","smalltitle":"","mid":"0","fname":"c++\u7f16\u7a0b\u57fa\u7840","special_id":"0","bak_id":"0","info":"0","hits":"534","pages":"1","comments":"0","posttime":"2017-01-18 08:15:03","list":"1484698503","username":"admin","author":"","copyfrom":"","copyfromurl":"","titlecolor":"","fonttype":"0","titleicon":"0","picurl":"https:\/\/www.cppentry.com\/upload_files\/","ispic":"0","yz":"1","yzer":"","yztime":"0","levels":"0","levelstime":"0","keywords":"
\u5b9e\u73b0<\/A> \u77e9\u9635<\/A> \u8fd0\u7b97<\/A>","jumpurl":"","iframeurl":"","style":"","template":"a:3:{s:4:\"head\";s:0:\"\";s:4:\"foot\";s:0:\"\";s:8:\"bencandy\";s:0:\"\";}","target":"0","ip":"14.17.22.31","lastfid":"0","money":"0","buyuser":"","passwd":"","allowdown":"","allowview":"","editer":"","edittime":"0","begintime":"0","endtime":"0","description":"\u7528C++\u5b9e\u73b0\u77e9\u9635\u8fd0\u7b97","lastview":"1714078872","digg_num":"6320","digg_time":"0","forbidcomment":"0","ifvote":"0","heart":"","htmlname":"","city_id":"0"},"page":"1"}