首页/工业设计

ACIS中的基础数学类型

发布于:2025-07-31 23:03:57
456人 分享

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     &center,
      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

上一篇:没有了 下一篇:没有了