<small id='HRyBG'></small><noframes id='HRyBG'>

      <i id='HRyBG'><tr id='HRyBG'><dt id='HRyBG'><q id='HRyBG'><span id='HRyBG'><b id='HRyBG'><form id='HRyBG'><ins id='HRyBG'></ins><ul id='HRyBG'></ul><sub id='HRyBG'></sub></form><legend id='HRyBG'></legend><bdo id='HRyBG'><pre id='HRyBG'><center id='HRyBG'></center></pre></bdo></b><th id='HRyBG'></th></span></q></dt></tr></i><div id='HRyBG'><tfoot id='HRyBG'></tfoot><dl id='HRyBG'><fieldset id='HRyBG'></fieldset></dl></div>

    1. <legend id='HRyBG'><style id='HRyBG'><dir id='HRyBG'><q id='HRyBG'></q></dir></style></legend>
      <tfoot id='HRyBG'></tfoot>

          <bdo id='HRyBG'></bdo><ul id='HRyBG'></ul>
      1. 反转 4x4 矩阵

        时间:2023-08-03

        <legend id='HkWf4'><style id='HkWf4'><dir id='HkWf4'><q id='HkWf4'></q></dir></style></legend>
          <tbody id='HkWf4'></tbody>

              • <bdo id='HkWf4'></bdo><ul id='HkWf4'></ul>
                  <i id='HkWf4'><tr id='HkWf4'><dt id='HkWf4'><q id='HkWf4'><span id='HkWf4'><b id='HkWf4'><form id='HkWf4'><ins id='HkWf4'></ins><ul id='HkWf4'></ul><sub id='HkWf4'></sub></form><legend id='HkWf4'></legend><bdo id='HkWf4'><pre id='HkWf4'><center id='HkWf4'></center></pre></bdo></b><th id='HkWf4'></th></span></q></dt></tr></i><div id='HkWf4'><tfoot id='HkWf4'></tfoot><dl id='HkWf4'><fieldset id='HkWf4'></fieldset></dl></div>

                  <small id='HkWf4'></small><noframes id='HkWf4'>

                  <tfoot id='HkWf4'></tfoot>
                • 本文介绍了反转 4x4 矩阵的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我正在寻找有关如何反转 4x4 矩阵的示例代码实现.我知道有高斯消除、LU 分解等,但我没有详细研究它们,我只是在寻找执行此操作的代码.

                  I am looking for a sample code implementation on how to invert a 4x4 matrix. I know there is Gaussian eleminiation, LU decomposition, etc., but instead of looking at them in detail I am really just looking for the code to do this.

                  语言最好是 C++,数据以列优先顺序排列在 16 个浮点数的数组中.

                  Language ideally C++, data is available in array of 16 floats in column-major order.

                  推荐答案

                  这里:

                  bool gluInvertMatrix(const double m[16], double invOut[16])
                  {
                      double inv[16], det;
                      int i;
                  
                      inv[0] = m[5]  * m[10] * m[15] - 
                               m[5]  * m[11] * m[14] - 
                               m[9]  * m[6]  * m[15] + 
                               m[9]  * m[7]  * m[14] +
                               m[13] * m[6]  * m[11] - 
                               m[13] * m[7]  * m[10];
                  
                      inv[4] = -m[4]  * m[10] * m[15] + 
                                m[4]  * m[11] * m[14] + 
                                m[8]  * m[6]  * m[15] - 
                                m[8]  * m[7]  * m[14] - 
                                m[12] * m[6]  * m[11] + 
                                m[12] * m[7]  * m[10];
                  
                      inv[8] = m[4]  * m[9] * m[15] - 
                               m[4]  * m[11] * m[13] - 
                               m[8]  * m[5] * m[15] + 
                               m[8]  * m[7] * m[13] + 
                               m[12] * m[5] * m[11] - 
                               m[12] * m[7] * m[9];
                  
                      inv[12] = -m[4]  * m[9] * m[14] + 
                                 m[4]  * m[10] * m[13] +
                                 m[8]  * m[5] * m[14] - 
                                 m[8]  * m[6] * m[13] - 
                                 m[12] * m[5] * m[10] + 
                                 m[12] * m[6] * m[9];
                  
                      inv[1] = -m[1]  * m[10] * m[15] + 
                                m[1]  * m[11] * m[14] + 
                                m[9]  * m[2] * m[15] - 
                                m[9]  * m[3] * m[14] - 
                                m[13] * m[2] * m[11] + 
                                m[13] * m[3] * m[10];
                  
                      inv[5] = m[0]  * m[10] * m[15] - 
                               m[0]  * m[11] * m[14] - 
                               m[8]  * m[2] * m[15] + 
                               m[8]  * m[3] * m[14] + 
                               m[12] * m[2] * m[11] - 
                               m[12] * m[3] * m[10];
                  
                      inv[9] = -m[0]  * m[9] * m[15] + 
                                m[0]  * m[11] * m[13] + 
                                m[8]  * m[1] * m[15] - 
                                m[8]  * m[3] * m[13] - 
                                m[12] * m[1] * m[11] + 
                                m[12] * m[3] * m[9];
                  
                      inv[13] = m[0]  * m[9] * m[14] - 
                                m[0]  * m[10] * m[13] - 
                                m[8]  * m[1] * m[14] + 
                                m[8]  * m[2] * m[13] + 
                                m[12] * m[1] * m[10] - 
                                m[12] * m[2] * m[9];
                  
                      inv[2] = m[1]  * m[6] * m[15] - 
                               m[1]  * m[7] * m[14] - 
                               m[5]  * m[2] * m[15] + 
                               m[5]  * m[3] * m[14] + 
                               m[13] * m[2] * m[7] - 
                               m[13] * m[3] * m[6];
                  
                      inv[6] = -m[0]  * m[6] * m[15] + 
                                m[0]  * m[7] * m[14] + 
                                m[4]  * m[2] * m[15] - 
                                m[4]  * m[3] * m[14] - 
                                m[12] * m[2] * m[7] + 
                                m[12] * m[3] * m[6];
                  
                      inv[10] = m[0]  * m[5] * m[15] - 
                                m[0]  * m[7] * m[13] - 
                                m[4]  * m[1] * m[15] + 
                                m[4]  * m[3] * m[13] + 
                                m[12] * m[1] * m[7] - 
                                m[12] * m[3] * m[5];
                  
                      inv[14] = -m[0]  * m[5] * m[14] + 
                                 m[0]  * m[6] * m[13] + 
                                 m[4]  * m[1] * m[14] - 
                                 m[4]  * m[2] * m[13] - 
                                 m[12] * m[1] * m[6] + 
                                 m[12] * m[2] * m[5];
                  
                      inv[3] = -m[1] * m[6] * m[11] + 
                                m[1] * m[7] * m[10] + 
                                m[5] * m[2] * m[11] - 
                                m[5] * m[3] * m[10] - 
                                m[9] * m[2] * m[7] + 
                                m[9] * m[3] * m[6];
                  
                      inv[7] = m[0] * m[6] * m[11] - 
                               m[0] * m[7] * m[10] - 
                               m[4] * m[2] * m[11] + 
                               m[4] * m[3] * m[10] + 
                               m[8] * m[2] * m[7] - 
                               m[8] * m[3] * m[6];
                  
                      inv[11] = -m[0] * m[5] * m[11] + 
                                 m[0] * m[7] * m[9] + 
                                 m[4] * m[1] * m[11] - 
                                 m[4] * m[3] * m[9] - 
                                 m[8] * m[1] * m[7] + 
                                 m[8] * m[3] * m[5];
                  
                      inv[15] = m[0] * m[5] * m[10] - 
                                m[0] * m[6] * m[9] - 
                                m[4] * m[1] * m[10] + 
                                m[4] * m[2] * m[9] + 
                                m[8] * m[1] * m[6] - 
                                m[8] * m[2] * m[5];
                  
                      det = m[0] * inv[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12];
                  
                      if (det == 0)
                          return false;
                  
                      det = 1.0 / det;
                  
                      for (i = 0; i < 16; i++)
                          invOut[i] = inv[i] * det;
                  
                      return true;
                  }
                  

                  这是从 GLU 库的MESA 实现中解除的.

                  This was lifted from MESA implementation of the GLU library.

                  这篇关于反转 4x4 矩阵的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:计算用箭头和鼠标移动的对象 下一篇:如何在 C++ 中实现贝塞尔曲线?

                  相关文章

                  最新文章

                • <i id='U1cCQ'><tr id='U1cCQ'><dt id='U1cCQ'><q id='U1cCQ'><span id='U1cCQ'><b id='U1cCQ'><form id='U1cCQ'><ins id='U1cCQ'></ins><ul id='U1cCQ'></ul><sub id='U1cCQ'></sub></form><legend id='U1cCQ'></legend><bdo id='U1cCQ'><pre id='U1cCQ'><center id='U1cCQ'></center></pre></bdo></b><th id='U1cCQ'></th></span></q></dt></tr></i><div id='U1cCQ'><tfoot id='U1cCQ'></tfoot><dl id='U1cCQ'><fieldset id='U1cCQ'></fieldset></dl></div>

                      <legend id='U1cCQ'><style id='U1cCQ'><dir id='U1cCQ'><q id='U1cCQ'></q></dir></style></legend>
                      <tfoot id='U1cCQ'></tfoot>
                        <bdo id='U1cCQ'></bdo><ul id='U1cCQ'></ul>
                    1. <small id='U1cCQ'></small><noframes id='U1cCQ'>