Math Primitives and Algorithms
數(shù)學(xué)圖元及其算法
eryar@163.com
一、概述 Overview
Open CASCADE中的數(shù)學(xué)圖元及其算法包括以下內(nèi)容:
l 向量和矩陣(Vectors and matrices);
l 幾何圖元(Geometric primitives);
l 數(shù)學(xué)算法(Math algorithms);
二、向量和矩陣 Vectors and Matrices
向量和矩陣部分提供了基本類(lèi)型的矩陣和向量的C++實(shí)現(xiàn),也可用來(lái)定義更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。實(shí)數(shù)類(lèi)型的矩陣和向量支持標(biāo)準(zhǔn)操作,如:加法、乘法、轉(zhuǎn)置、求逆操作等。
向量和矩陣的維數(shù)是任意的,所以必須在定義的時(shí)候聲明,以便分配存儲(chǔ)空間。在聲明后就不能對(duì)其維數(shù)進(jìn)行修改。
向量和矩陣對(duì)象的本體和實(shí)體是相同的,即它們不能被共享且通過(guò)賦值操作來(lái)復(fù)制。
向量和矩陣的值可以通過(guò)索引來(lái)初始化和賦值,且其索引必須在維數(shù)即范圍之內(nèi)。
有些向量和矩陣的操作是非法的,在這種情況下將會(huì)產(chǎn)生異常。兩個(gè)標(biāo)準(zhǔn)的異常將會(huì)被使:
l Standard_DimensionError:當(dāng)兩個(gè)矩陣或向量的操作涉及到的維數(shù)不匹配時(shí)產(chǎn)生;
l Standard_RangeError:當(dāng)要訪(fǎng)問(wèn)在矩陣或向量范圍之外的數(shù)據(jù)時(shí)產(chǎn)生;
三、幾何圖元類(lèi)型 Primitive Geometric Types
1.概述 Overview
當(dāng)要?jiǎng)?chuàng)建幾何對(duì)象之前,你必須決定將要?jiǎng)?chuàng)建的對(duì)象是用于二維還是用于三維空間。包gp提供了通過(guò)值而不是引用控制的二維和三維類(lèi)。當(dāng)這類(lèi)對(duì)象復(fù)制時(shí),對(duì)象本體和實(shí)體是一致的。改變對(duì)象的一個(gè)實(shí)例不會(huì)影響其它的。
2.包gp
包gp定義了基本的非持久性幾何實(shí)體,可用來(lái)進(jìn)行代數(shù)計(jì)算和在二維和三維空間中基本的幾何分析。也提供了基本的變換操作,如單位化、旋轉(zhuǎn)、平移、鏡像、縮放變換,及這些變換的組合。這些幾何實(shí)體都是由值控制的。可用的幾何實(shí)體如下所示;
l 二維和三維笛卡爾坐標(biāo)(2D & 3D Cartesian cooridinates)
l 矩陣(Matrices)
l 笛卡爾點(diǎn)(Cartesian Points)
l 向量(Vector)
l 方向(Direction)
l 軸(Axis)
l 直線(xiàn)(Line)
l 圓(Circle)
l 橢圓(Ellipse)
l 雙曲線(xiàn)(Hyperbola)
l 拋物線(xiàn)(Parabola)
l 平面(Plane)
l 無(wú)限的柱面(Infinite Cylindrical Surface)
l 球面(Spherical Surface)
l 超環(huán)面(Toroidal Surface)
l 錐面(Conical Surface)
四、幾何圖元類(lèi)型集合 Collections of Primitive Geometric Types
若你不想使這些幾何元素的單個(gè)實(shí)例而是他們的集合,包TColgp就是用來(lái)處理這類(lèi)對(duì)象集合的。
l TColgp:包TColgp提供了包gp中的類(lèi)的TCollection的實(shí)例化,如:XY、XYZ、Pnt、Pnt2d、Vec、Vec2d、Lin、Lin2d、Circ、Circ2d等。它們都是非持久性類(lèi)。
五、基本幾何庫(kù) Basic Geometric Libraries
有幾個(gè)庫(kù)可用來(lái)對(duì)曲線(xiàn)和曲面作基本的計(jì)算。若待處理的對(duì)象是由包gp中創(chuàng)建的,則初等曲線(xiàn)和曲面庫(kù)—包ElCLib和包ElSLib—中很多算法是有用的。
包Precision描述了兩個(gè)數(shù)比較時(shí)的精度標(biāo)準(zhǔn)。
l ElCLib:(Elementary Curves Libraries)提供用于解析曲線(xiàn)的方法,可對(duì)gp包中曲線(xiàn)進(jìn)行簡(jiǎn)單計(jì)算的庫(kù)。根據(jù)給定的參數(shù)計(jì)算點(diǎn)或根據(jù)點(diǎn)計(jì)算參數(shù)。
l ElSLib:(Elementary Surfaces Libraries)提供用于解析曲面的方法,可對(duì)gp包中的曲面進(jìn)行簡(jiǎn)單計(jì)算。通過(guò)給定的兩個(gè)參數(shù)計(jì)算點(diǎn)或計(jì)算一個(gè)點(diǎn)的參數(shù)。還提供了計(jì)算曲線(xiàn)和曲面法向的庫(kù)。
l Bnd:(Bounding Boxes)二維或三維空間中的包圍盒。
六、通用數(shù)學(xué)算法 Common Math Algorithms
通用數(shù)學(xué)算法庫(kù)提供了C++實(shí)現(xiàn)的最常用的數(shù)學(xué)算法,包括以下內(nèi)容:
l 求解線(xiàn)性方程組的算法
l 求函數(shù)極值的算法
l 求非線(xiàn)性方程(組)的根的算法
l 求方陣特征值和特征向量的算法
算法的實(shí)現(xiàn) Implementation of Algorithms
所有數(shù)學(xué)算法的實(shí)現(xiàn)原則是相同的,他們包含:
l 構(gòu)造函數(shù):執(zhí)行幾乎所有的計(jì)算,或給出合適參數(shù)。所有相關(guān)信息保存在結(jié)果對(duì)象中,所以使后期計(jì)算更高效。
l 函數(shù)IsDone:這個(gè)函數(shù)返回計(jì)算的成功與否。
l 一些特定函數(shù):對(duì)每個(gè)算法特定的函數(shù),用來(lái)確保得到各種結(jié)果。這些函數(shù)只有在IsDone返回true時(shí)才可能調(diào)用,否則將會(huì)產(chǎn)生StdFail_NotDone異常。
下面的例子演示的是使用高斯方法求解線(xiàn)性方程組的代碼。代碼截取自類(lèi)math_Gauss的頭文件。
使用高斯方法求解方程組的主程序如下:
eryar@163.com
Pudongxin Shanghai China
20120924