当前位置:编程问答 > C/C++ >

Use Math Utilities in the OpenCASCADE

OpenCASCADE由七个模块组成,分别如下:
• Module FoundationClasses; 基础类;
• Module ModelingData; 造型数据;
• Module ModelingAlgorihtms; 造型算法;
• Module Visualization; 可视化;
• Module ApplicationFramework; 程序框架;
• Module DataExchange; 数据交换;
• Module Draw;
其中基础类模块有三个工具箱:
• Toolkit TKAdvTools; 高级工具箱;
• Toolkit TKMath; 数学工具箱;
• Toolkit TKernel; 核心工具箱;
根据OpenCASCADE的Reference文档,查到math_Gauss类,描述如下:
This class implements the Gauss LU decomposition (Crout algorithm) with partial pivoting (rows interchange) of a square matrix and the different possible derived calculation :
• Solution of a set of linear equations.
• Inverse of a matrix.
• Determinant of a matrix.
主要根据矩阵的三角分解中的LU分解方法,可作如下计算:
• 线性方程组的求解;
• 矩阵的逆;
• 矩阵的行列式;
为简单起见,先做个简单的测试,求以下方程组的解:
 Equation
OpenCASCADE的C++代码如下:(新建一个控制台程序,需要包含TKernel.lib;TKMath.lib两个库;)
   1:  //------------------------------------------------------------------------------
   2:  //    Copyright (c) 2012 eryar All Rights Reserved.
   3:  //
   4:  //        File    : Main.cpp
   5:  //        Author  : eryar@163.com
   6:  //        Date    : 2012-6-20 20:06
   7:  //        Version : 1.0v
   8:  //
   9:  //    Description : Learn to use OpenCASCADE Math Utilities.
  10:  //
  11:  //==============================================================================
  12:  
  13:  #include <math_Gauss.hxx>
  14:  
  15:  int main(int argc, char* argv[])
  16:  {
  17:      math_Matrix aMatrix(1, 3, 1, 3);
  18:      math_Vector b1(1, 3);
  22:  
  23:      //aMatrix, b1 and b2 are set here to the appropriate values
  24:      aMatrix(1, 1)   = 10;
  25:      aMatrix(2, 2)   = 2;
  26:      aMatrix(3, 3)   = 8;
  27:  
  28:      b1.Init(1);
  29:  
  30:      // Use Gause method
  31:      math_Gauss  sol(aMatrix);
  32:  
  33:      // LU decomposition of A
  34:      if (sol.IsDone())
  35:      {
  36:          sol.Solve(b1, x1);
  37:      }
  38:      else
  39:      {
  40:          // Fix up
  41:          try
  42:          {
  43:              sol.Solve(b1, x1);
  44:          }
  45:          catch (Standard_Failure)
  46:          {
  47:              Handle(Standard_Failure) error = Standard_Failure::Caught();
  48:              cout<<error<<endl;
  49:          }
  50:      }
  51:  
  52:      cout<<aMatrix;
  53:      cout<<b1;
  54:      cout<<x1;
  55:  
  56:      return 0;
  57:  }
输出结果如下所示: www.zzzyk.com
   1:  math_Matrix of RowNumber = 3 and ColNumber = 3
   2:  math_Matrix ( 1, 1 ) = 10
   3:  math_Matrix ( 1, 2 ) = 0
   4:  math_Matrix ( 1, 3 ) = 0
   5:  math_Matrix ( 2, 1 ) = 0
   6:  math_Matrix ( 2, 2 ) = 2
   7:  math_Matrix ( 2, 3 ) = 0
   8:  math_Matrix ( 3, 1 ) = 0
   9:  math_Matrix ( 3, 2 ) = 0
  10:  math_Matrix ( 3, 3 ) = 8
  11:  math_Vector of Length = 3
  12:  math_Vector(1) = 1
  13:  math_Vector(2) = 1
  14:  math_Vector(3) = 1
  15:  math_Vector of Length = 3
  16:  math_Vector(1) = 0.1
  17:  math_Vector(2) = 0.5
  18:  math_Vector(3) = 0.125
  19:  Press any key to continue . . .
结论
通过对基础类模块中数学工具箱的使用,对OpenCASCADE慢慢进行了解。

 作者:eryar
 

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,