Use Math Utilities in the OpenCASCADE
OpenCASCADE由七個(gè)模塊組成,分別如下:
- Module FoundationClasses; 基礎(chǔ)類;
- Module ModelingData; 造型數(shù)據(jù);
- Module ModelingAlgorihtms; 造型算法;
- Module Visualization; 可視化;
- Module ApplicationFramework; 程序框架;
- Module DataExchange; 數(shù)據(jù)交換;
- Module Draw;
其中基礎(chǔ)類模塊有三個(gè)工具箱:
- Toolkit TKAdvTools; 高級(jí)工具箱;
- Toolkit TKMath; 數(shù)學(xué)工具箱;
- Toolkit TKernel; 核心工具箱;
根據(jù)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.
主要根據(jù)矩陣的三角分解中的LU分解方法,可作如下計(jì)算:
為簡(jiǎn)單起見,先做個(gè)簡(jiǎn)單的測(cè)試,求以下方程組的解:

OpenCASCADE的C++代碼如下:(新建一個(gè)控制臺(tái)程序,需要包含TKernel.lib;TKMath.lib兩個(gè)庫(kù);)
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: }
輸出結(jié)果如下所示:
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 . . .
結(jié)論
通過對(duì)基礎(chǔ)類模塊中數(shù)學(xué)工具箱的使用,對(duì)OpenCASCADE慢慢進(jìn)行了解。