當前位置: 首頁>>代碼示例>>C#>>正文


C# MatrixFixed.GetRow方法代碼示例

本文整理匯總了C#中SceneLibrary.MatrixFixed.GetRow方法的典型用法代碼示例。如果您正苦於以下問題:C# MatrixFixed.GetRow方法的具體用法?C# MatrixFixed.GetRow怎麽用?C# MatrixFixed.GetRow使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在SceneLibrary.MatrixFixed的用法示例。


在下文中一共展示了MatrixFixed.GetRow方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。

示例1: Determinant

        public static float Determinant(MatrixFixed M, bool balance)
        {
            int n = M.Rows;
            //assert(M.Columns() == n);

            switch (n)
            {
                case 1: return M[0, 0];
                case 2: return Determinant(M[0], M[1]);
                case 3: return Determinant(M[0], M[1], M[2]);
                case 4: return Determinant(M[0], M[1], M[2], M[3]);
                default:
                    if (balance)
                    {
                        MatrixFixed tmp = new MatrixFixed(M);
                        float scalings = 1;
                        for (int t = 0; t < 5; ++t)
                        {
                            float rn;
                            // normalize rows.
                            for (uint i = 0; i < n; ++i)
                            {
                                rn = tmp.GetRow((int)i).RMS();
                                if (rn > 0)
                                {
                                    scalings *= rn;
                                    tmp.ScaleRow((int)i, 1.0f / rn);
                                }
                            }
                            // normalize columns.
                            for (uint i = 0; i < n; ++i)
                            {
                                rn = tmp.GetColumn((int)i).RMS();
                                if (rn > 0)
                                {
                                    scalings *= rn;
                                    tmp.ScaleColumn((int)i, 1.0f / rn);
                                }
                            }
                            /*
                            #if 0
                                    // pivot
                                    for (int k=0; k<n-1; ++k) {
                                      // find largest element after (k, k):
                                      int i0 = k, j0 = k;
                                      abs_t v0(0);
                                      for (int i=k; i<n; ++i) {
                                        for (int j=k; j<n; ++j) {
                                          abs_t v = std::abs(tmp[i][j]);
                                          if (v > v0) {
                                            i0 = i;
                                            j0 = j;
                                            v0 = v;
                                          }
                                        }
                                      }
                                      // largest element is in position (i0, j0).
                                      if (i0 != k) {
                                        for (int j=0; j<n; ++j)
                                          std::swap(tmp[k][j], tmp[i0][j]);
                                        scalings = -scalings;
                                      }
                                      if (j0 != k) {
                                        for (int i=0; i<n; ++i)
                                          std::swap(tmp[i][k], tmp[i][j0]);
                                        scalings = -scalings;
                                      }
                                    }
                            #endif
                            */

                        }
                        float balanced_det = (new QR(tmp)).Determinant();
                        //std::clog << __FILE__ ": scalings, balanced_det = " << scalings << ", " << balanced_det << std::endl;
                        return (float)(scalings) * balanced_det;
                    }
                    else
                        return (new QR(M)).Determinant();
            }
        }
開發者ID:kasertim,項目名稱:sentience,代碼行數:80,代碼來源:SceneLib.cs


注:本文中的SceneLibrary.MatrixFixed.GetRow方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。