OpenCASCADE中的数学图元及其算法

Math Primitives and Algorithms

数学图元及其算法

eryar@163.com

一、概述 Overview

Open CASCADE中的数学图元及其算法包括以下内容:

l 向量和矩阵(Vectors and matrices);

l 几何图元(Geometric primitives);

l 数学算法(Math algorithms);

二、向量和矩阵 Vectors and Matrices

向量和矩阵部分提供了基本类型的矩阵和向量的C++实现,也可用来定义更复杂的数据结构。实数类型的矩阵和向量支持标准操作,如:加法、乘法、转置、求逆操作等。

向量和矩阵的维数是任意的,所以必须在定义的时候声明,以便分配存储空间。在声明后就不能对其维数进行修改。

向量和矩阵对象的本体和实体是相同的,即它们不能被共享且通过赋值操作来复制。

向量和矩阵的值可以通过索引来初始化和赋值,且其索引必须在维数即范围之内。

有些向量和矩阵的操作是非法的,在这种情况下将会产生异常。两个标准的异常将会被使:

l Standard_DimensionError:当两个矩阵或向量的操作涉及到的维数不匹配时产生;

l Standard_RangeError:当要访问在矩阵或向量范围之外的数据时产生;

三、几何图元类型 Primitive Geometric Types

1.概述 Overview

当要创建几何对象之前,你必须决定将要创建的对象是用于二维还是用于三维空间。包gp提供了通过值而不是引用控制的二维和三维类。当这类对象复制时,对象本体和实体是一致的。改变对象的一个实例不会影响其它的。

2.包gp

gp定义了基本的非持久性几何实体,可用来进行代数计算和在二维和三维空间中基本的几何分析。也提供了基本的变换操作,如单位化、旋转、平移、镜像、缩放变换,及这些变换的组合。这些几何实体都是由值控制的。可用的几何实体如下所示;

l 二维和三维笛卡尔坐标(2D & 3D Cartesian cooridinates

l 矩阵(Matrices

l 笛卡尔点(Cartesian Points

l 向量(Vector

l 方向(Direction

l 轴(Axis

l 直线(Line

l 圆(Circle

l 椭圆(Ellipse

l 双曲线(Hyperbola

l 抛物线(Parabola

l 平面(Plane

l 无限的柱面(Infinite Cylindrical Surface

l 球面(Spherical Surface

l 超环面(Toroidal Surface

l 锥面(Conical Surface

四、几何图元类型集合 Collections of Primitive Geometric Types

若你不想使这些几何元素的单个实例而是他们的集合,包TColgp就是用来处理这类对象集合的。

l TColgp:包TColgp提供了包gp中的类的TCollection的实例化,如:XYXYZPntPnt2dVecVec2dLinLin2dCircCirc2d等。它们都是非持久性类。

五、基本几何库 Basic Geometric Libraries

有几个库可用来对曲线和曲面作基本的计算。若待处理的对象是由包gp中创建的,则初等曲线和曲面库—包ElCLib和包ElSLib—中很多算法是有用的。

Precision描述了两个数比较时的精度标准。

l ElCLib:(Elementary Curves Libraries)提供用于解析曲线的方法,可对gp包中曲线进行简单计算的库。根据给定的参数计算点或根据点计算参数。

l ElSLib:(Elementary Surfaces Libraries)提供用于解析曲面的方法,可对gp包中的曲面进行简单计算。通过给定的两个参数计算点或计算一个点的参数。还提供了计算曲线和曲面法向的库。

l Bnd:(Bounding Boxes)二维或三维空间中的包围盒。

六、通用数学算法 Common Math Algorithms

通用数学算法库提供了C++实现的最常用的数学算法,包括以下内容:

l 求解线性方程组的算法

l 求函数极值的算法

l 求非线性方程(组)的根的算法

l 求方阵特征值和特征向量的算法

算法的实现 Implementation of Algorithms

所有数学算法的实现原则是相同的,他们包含:

l 构造函数:执行几乎所有的计算,或给出合适参数。所有相关信息保存在结果对象中,所以使后期计算更高效。

l 函数IsDone:这个函数返回计算的成功与否。

l 一些特定函数:对每个算法特定的函数,用来确保得到各种结果。这些函数只有在IsDone返回true时才可能调用,否则将会产生StdFail_NotDone异常。

下面的例子演示的是使用高斯方法求解线性方程组的代码。代码截取自类math_Gauss的头文件。

使用高斯方法求解方程组的主程序如下:

 

eryar@163.com

Pudongxin Shanghai China

20120924

 

PDF Version Math Primitives and Algorithms

时间: 2024-12-03 00:36:47

OpenCASCADE中的数学图元及其算法的相关文章

OpenCascade中的Delaunay三角剖分

Delaunay Triangulation in OpenCascade eryar@163.com 摘要:本文简要介绍了Delaunay三角剖分的基础理论,并使用OpenCascade的三角剖分算法将边界BRep表示的几何体进行三角离散化后在OpenSceneGraph中显示. 关键字:Delaunay Triangulation.OpenCascade.OpenSceneGraph 一. 概述 三角剖分是平面剖分中的一个重要课题,在数字图像处理.计算机三维曲面造型.有限元计算.逆向工程等领

空间数据库中基于MapReduce的kNN算法研究

空间数据库中基于MapReduce的kNN算法研究 大连海事大学  刘彪 本文首次尝试设计了一种云环境下的倒排网格索引和在该索引基础上进行的基于MapReduce的空间kNN查询.本文所做的主要工作如下:(1)针对二维空间中的数据点,本文设计了一种分布式的倒排网格索引方法,该索引方法完全符合空间数据索引的标准一动态性和简单性.由于倒排网格索引具有松耦合和无共享的特殊结构,所以该索引比较适合基于MapReduce的大规模空问数据的并行查询.(2)本文提出了一种基于MapReduce的空间倒排网格索

OpenCASCADE中的gp包

Package gp in the OpenCASCADE eryar@163.com China 一.简介 Introduction to Package gp gp是几何处理程序包(Geometric Processor package),简称gp.包gp提供以下功能: 代数计算:如坐标计算.矩阵计算: 基本解析几何元素:如变换.点.矢量.线.面.轴.二次曲线和初等曲面: 这些实体同时在二维和三维空间中定义,且包中的类都是非持续的(non-persistent),即这些类的实例都是以值的方式

Python中使用hashlib模块处理算法的教程

  这篇文章主要介绍了Python中使用hashlib模块处理算法的教程,代码基于Python2.x版本,需要的朋友可以参考下 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示). 举个例子,你写了一篇文章,内容是一个字符串'how to use python hashlib - by Michael',并附上这篇文章的摘要是'2d7

bash shell中的数学计算

简介 在写shell脚本的时候会用到很多的数学运算,简单的一个游标+1 -1, 或者更多一点的浮点运算等,shell中数学计算稍麻烦,我想每个人都试过var=1+1 或者var=$xxx+1这类错误. 下面对shell中做数学计算小做总结 示例   使用expr整数运算 > var=1 > var=`expr $var + 1` > echo $var 2 其他的减乘除类似, 要注意乘法中的*号需要做转义\*即可 使用bash内建命令let > var=2 > let &qu

求一个数学难题的算法

问题描述 求一个数学难题的算法 F0=1000F1=F0*a-30;F2=F1*a-30;F3=F2*a-30;... ....Fn-1=Fn-2*a-30Fn=Fn-1*a-30 Fn=0;输入n;输出a 解决方案 #include <stdio.h>int n;double a;double fun(int tInputValue){ if(tInputValue == 0) return 1000.0; else return fun(tInputValue-1)*a-30;}int m

PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)_php技巧

本文实例讲述了PHP中strnatcmp()函数"自然排序算法"进行字符串比较用法.分享给大家供大家参考,具体如下: PHP中strnatcmp()函数使用"自然"算法来比较两个字符串(区分大小写),通常在自然算法中,数字 2 小于数字 10.而在计算机排序中,10 小于 2,这是因为 10 中的第一个数字小于 2. strnatcmp()函数的定义如下: strnatcmp(string1,string2) 参数说明: string1  必需.规定要比较的第一个字

Mahout中的一些相似度算法实现解读

Mahout中实现的推荐算法是协同过滤,而无论是UserCF还是ItemCF都依赖于user相似度或item相似度.本文是对mahout中的一些相似度算法的解读. Mahout相似度相关类关系如下: 有点乱(^.^)     从上图可看出,Mahout主要针对用户相似度和物品相似度的计算,并且除了HybridSimilarity之外全都能够用于计算user和item两者的相似度,只有HybridSimilarity只能计算item相似度.接来下分三部分进行分析:继承AbstractSimilar

如何在软件中实现数学符号的输入与显示?

问题描述 如何在软件中实现数学符号的输入与显示? 我的同学想做一个基于android平台的数学学习软件,其中涉及到数学符号的输入与显示问题,但是一些特殊的公式和符号不知道如何输入?希望知道的人指点一下. 解决方案 用图片代替,显示时需要做特殊的处理了.记得以前做英文词典时,所有音标都是这样处理的. 解决方案二: 一部分的符号在字库中有,在windows附件的"字符映射表"中可以找到并且粘贴出来如果要再复杂,需要定义一种表达公式的语言.比如你可以借鉴LaTeX http://baike.