当前位置: 首页>>代码示例>>C#>>正文


C# MatrixFixed.ScaleColumn方法代码示例

本文整理汇总了C#中SceneLibrary.MatrixFixed.ScaleColumn方法的典型用法代码示例。如果您正苦于以下问题:C# MatrixFixed.ScaleColumn方法的具体用法?C# MatrixFixed.ScaleColumn怎么用?C# MatrixFixed.ScaleColumn使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在SceneLibrary.MatrixFixed的用法示例。


在下文中一共展示了MatrixFixed.ScaleColumn方法的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.ScaleColumn方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。