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分解方法,可作如下計算:
• 線性方程組的求解;
• 矩陣的逆;
• 矩陣的行列式;
為簡單起見,先做個簡單的測試,求以下方程組的解:
OpenCASCADE的C++代碼如下:(新建一個控制台程序,需要包含TKernel.lib;TKMath.lib兩個庫;)
1: //------------------------------------------------------------------------------
2: // Copyright (c) 2012 eryar All Rights Reserved.
3: //
4: // File : Main.cpp
5: // Author : [email protected]
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.2cto.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