ACIS使用C++实现了若干几何相关的基础数学类,这些数学类与几何模型的创建、修改、查询等有关,此外还提供了一些基本的数学运算函数。
一、数学类型(Math Classes)
ACIS提供了一系列完整的数学类,这些类是描述所有几何点、线、面所需的基础,包括:
SPAposition
三维坐标点,存储xyz坐标并提供访问和修改它们的成员方法,以及实现了SPAposition与SPAvector之间进行加减乘除的类成员函数或友元函数。
SPAvector
三维向量,有三个坐标分量x、y、z。
SPAunit_vector
模长始终为1的单位向量。
SPAmatrix
3x3的矩阵,用于处理三维坐标点或三维向量仿射变换(包括旋转、镜像、缩放,但不包括平移)。
SPAtransf
SPAtransf不直接存储4x4的数组,而是拆分成三个主要字段:仿射变换矩阵SPAmatrix affine_part、位移向量SPAvector translation_part、缩放因子double scaling_part。
SPAtransf用于在三维空间中对模型进行平移、旋转、缩放、镜像等操作。在创建SPAtransf对象不应直接调用其构造函数,而是应该使用translate_transf 、rotate_transf、scale_transf,、reflect_transf,等友元函数,也可以通过SPAtransf重载运算符的组合(矩阵乘法、逆矩阵)来创建复合变换。
SPApar_pos
曲面参数空间中的一个位置,也即uv坐标。
SPApar_dir
曲面参数空间中某个位置的导数。也即du、dv。
SPAparameter
本质是个实数(double)。
SPAinterval
两个实数组成的区间。
SPAbox
与ACIS全局坐标系X,Y,Z相对其的三维外包盒,使用对角线上的两个SPAposition或三个SPAinterval来构造表示。
其他一些与数学相关的C++类包括:
mass_props
质量属性
SPApar_box
使用四个SPAparameter来定义参数空间中的一个二维边界框,即low_u、high_u、low_v、high_v。
SPApar_vec
二维参数空间中的向量。
param_string
本质是个字符串
position_array
SPAposition的动态数组。
surf_normcone
normal_cone的返回值类型,表示包围曲面的法线锥体。
surf_princurv
曲面上某点的主曲率,包括两个切向量和曲率值。
tensor
3x3的张量。
二、数学函数(Math Functions)
ACIS提供了一些用于数学计算相关的全局函数,包括:
angle_between
计算两个向量(SPAvector)或单位向量(SPAunit_vector)之间的角度(弧度制),范围为[0,2Pi]
DECL_KERN double angle_between(
const SPAvector& v1,
const SPAvector& v2,
const SPAunit_vector& z = *(SPAunit_vector *)NULL_REF
);antiparallel
判断两个向量或单位向量是否平行且相反。
inline logical antiparallel( SPAvector const &v1, SPAunit_vector const &v2,const double res = SPAresnor )biparallel
判断两个向量或单位向量是否平行,方向相同或相反都可以。
inline logical biparallel( SPAvector const &v1, SPAunit_vector const &v2,
const double res = SPAresnor )distance_to_line
计算点到直线的距离。
DECL_BASE double distance_to_line(
const SPAposition& pt,
const SPAposition& line_pt,
const SPAunit_vector& line_dir
);distance_to_plane
计算点到平面的距离。
DECL_BASE double distance_to_plane(
const SPAposition& pt,
const SPAposition& plane_pt,
const SPAunit_vector& normal
);distance_to_point
计算两点之间的距离。
DECL_BASE double distance_to_point(
const SPAposition& pt1,
const SPAposition& pt2
);find_best_pt
获取坐标点数组中离给定SPAposition最接近的那一个。
DECL_KERN int find_best_pt(
const int npts,
const SPAposition *pts,
const SPAposition& pt
);get_plane_from_points
确定三个及以上三维坐标点(如果有的话)所在的共平面。
DECL_BASE logical get_plane_from_points(
int npts,
const SPAposition * pts,
SPAposition& plane_pt,
SPAunit_vector& plane_normal);intersect_line_circle
获取直线与圆的交点。
DECL_KERN int intersect_line_circle(
const SPAposition &line_pt,
const SPAunit_vector &line_dir,
const SPAposition ¢er,
const SPAunit_vector &normal,
double radius,
SPAposition* intpts
);intersect_line_plane
获取直线与平面的交点。
DECL_KERN int intersect_line_plane(
const SPAposition &line_point,
const SPAvector &line_vector,
const SPAposition &plane_point,
const SPAunit_vector &plane_normal,
double &line_param,
SPAposition &intersection_position);intersect_plane_plane
获取两个平面的交集。
DECL_KERN int intersect_plane_plane(
const SPAposition &p1,
const SPAunit_vector &n1,
const SPAposition &p2,
const SPAunit_vector &n2,
SPAposition &line_pt,
SPAunit_vector &line_dir
);is_equal
判断两个值double、SPAposition、SPAvector、SPAunit_vector)是否相等。
is_greater_than
判断第一个值是否大于第二个值。
is_less_than
判断第一个值是否小于第二个值。
is_negative
确定值是否为负。
is_on_line
判断点是否位于直线上。
DECL_BASE logical is_on_line(
const SPAposition& pt,
const SPAposition& line_pt,
const SPAunit_vector& line_dir
);is_on_plane
判断点是否位于平面上。
DECL_BASE logical is_on_plane(
const SPAposition& pt,
const SPAposition& plane_pt,
const SPAunit_vector& normal
);is_positive
判断值是否为正。
is_zero
判断两个值double、SPAposition、SPAvector、SPAunit_vector)是否为零。
is_zero_mch
判断一个值相对于SPAresmch是否为零。
is_zero_nor
判断一个值相对于SPAresnor是否为零。
parallel
判断两个向量或单位向量在误差内是否平行。
inline logical parallel( SPAvector const &v1, SPAunit_vector const &v2,const double res = SPAresnor )perpendicular
判断两个向量或单位向量在误差内是否垂直。
inline logical perpendicular( SPAvector const &v1, SPAunit_vector const &v2,const double
转载请注明来源本文地址:https://m.tuituisoft/gongyesheji/250190.html