====== XCoordSystem ====== **//Inherited from//** [[class::domain::xdatum|XDatum]], **//Inherited by//** NULL **//Friend class//** NULL **//Description//** XXCoordSystem从XDatum基准类继承,抽象封装了坐标系对象及其方法,它的类型标识为"CDTMCOORDSYS",其中CDTM为前缀。它可以描述包括直角坐标系、圆柱坐标系、球坐标系三种坐标系,XCoordSystem基于给定的原点位置以主轴(对应于直角坐标系的Z轴)、参考轴(对应于直角坐标系的X轴)来构造上述任何一种坐标系空间,坐标系的第三轴依赖于主轴和参考轴,用户不能直接设置。任何一个坐标系对象的原点坐标以及轴矢量都是以全局的直角坐标系来表示,因而局部坐标系的之间的转换以及局部坐标系与全局坐标系间的转换会更加直接方便而且易于理解。有相关[[:apis|API]]可以调用。 **//Sample Code//** #include "xcoordsystem.h" ... XCoordSystem cs0(CoordSys_Rectangular),cs1(CoordSys_Cylindrical); double ori0[3] = {0,1,1},ori1[3] = {2,2,1}; double main0[3] = {0,1,0},main1[3] = {1,0,0}; double ref0[3] = {1,0,1},ref1[3] = {0,1,1}; cs0.setOrigin(NULL,ori0); cs0.setAxis(NULL,main0,ref0); cs1.setOrigin(NULL,ori1); cs1.setAxis(NULL,main1,ref1); double t44[16],t33[9]; double c[3] = {2,5,8},newC[3]; double v[3] = {1,5,5},newV[3]; double t[9] = {0,0,2,0,3,0,1,0,0},newT[9]; cs0.calcGlobalCoordFromLocal(c,newC); CalcRectangularTransformMatrix(&cs0,&cs1,t44); Matrix33FromMaxtrix44(t44,t33); ConvertCoord(&cs0,&cs1,t44,c,newC); ConvertVector(&cs0,&cs1,t33,v,newV); ConvertTensor(&cs0,&cs1,t33,c,t,newT); ... **//Members//** * Coord [[XCoordSystem#m_dorigin|m_dOrigin]] * Coord [[XCoordSystem#m_dmainaxis|m_dMainAxis]] * Coord [[XCoordSystem#m_drefaxis|m_dRefAxis]] * Coord [[XCoordSystem#m_ddependentaxis|m_dDependentAxis]] **//Public interface//** * [[XCoordSystem#XCoordSystem1|XCoordSystem]](int type = CoordSys_Rectangular,double * origin = 0,double * main = 0,double * ref = 0) * void [[XCoordSystem#setorigin|setOrigin]](XCoordSystem * refCS,double * origin) * void [[XCoordSystem#setaxis|setAxis]](XCoordSystem * refCS,double * main, double * ref) * double * [[XCoordSystem#getorigin|getOrigin]]() * double * [[XCoordSystem#getmainaxis|getMainAxis]]() * double * [[XCoordSystem#getrefaxis|getRefAxis]]() * double * [[XCoordSystem#getdependentaxis|getDependentAxis]]() * void [[XCoordSystem#getlocaltoglobalmatrix|getLocalToGlobalMatrix]](double * m) * void [[XCoordSystem#getglobaltolocalmatrix|getGlobalToLocalMatrix]](double * m) * void [[XCoordSystem#transform|transform]](XCoordSystem * from,double * src_coord,double * cur_coord) * void [[XCoordSystem#calcglobalcoordfromlocal|calcGlobalCoordFromLocal]](double * l_coord,double * g_coord) * void [[XCoordSystem#calclocalcoordfromglobal|calcLocalCoordFromGlobal]](double * g_coord,double * l_coord) ---- {{anchor:m_dorigin}} **Coord m_dOrigin** 原点的绝对坐标 {{anchor:m_dmainaxis}} **Coord m_dMainAxis** 坐标系的主轴矢量,以绝对坐标表示 {{anchor:m_drefaxis}} **Coord m_dRefAxis** 坐标系的参考轴,以绝对坐标表示 {{anchor:m_ddependentaxis}} **Coord m_dDependentAxis** 坐标系的第三轴,依赖于主轴与参考轴 ---- {{anchor:XCoordSystem1}} **XCoordSystem(int type = CoordSys_Rectangular,double * origin = 0,double * main = 0,double * ref = 0)** *function: 构造坐标系对象,如果不指定原点以及轴矢量,默认创建与全局坐标系一致的坐标系 *parameters: - [i]int type = CoordSys_Rectangular: 坐标系类型 - [i]double * origin = 0: 原点坐标 - [i]double * main = 0: 主轴矢量 - [i]double * ref = 0: 参考轴矢量,它应与主轴垂直 *return value: 无 {{anchor:setorigin}} **void setOrigin(XCoordSystem * refCS,double * origin)** *function: 以参考坐标系下的坐标设置坐标系的原点(将会转换为绝对坐标) *parameters: - [i]XCoordSystem * refCS: 参考坐标系,如值为0,则参考坐标系为全局直角坐标系 - [i]double * origin: 参考坐标系下的坐标 *return value: 无 {{anchor:setaxis}} **void setAxis(XCoordSystem * refCS,double * main, double * ref)** *function: 以参考坐标系下的矢量设置坐标系的轴矢量 *parameters: - [i]XCoordSystem * refCS: 参考坐标系,如值为0,则参考坐标系为全局直角坐标系 - [i]double * main: 主轴矢量 - [i] double * ref: 参考轴矢量 *return value: 无 {{anchor:getorigin}} **double * getOrigin()** *function: 获取原点坐标 *parameters: NULL *return value: 原点坐标 {{anchor:getmainaxis}} **double * getMainAxis()** *function: 获取主轴矢量 *parameters: NULL *return value: 主轴矢量 {{anchor:getrefaxis}} **double * getRefAxis()** *function: 获取参考轴矢量 *parameters: NULL *return value: 参考轴矢量 {{anchor:getdependentaxis}} **double * getDependentAxis()** *function: 获取第三轴(非独立轴)矢量 *parameters: NULL *return value: 第三轴矢量 {{anchor:getlocaltoglobalmatrix}} **void getLocalToGlobalMatrix(double * m)** *function: 获取局部坐标到全局坐标的转换矩阵(Cglobal=M * Clocal,其中坐标为列向量) *parameters: - [o]double * m: 转换矩阵 *return value: 无 {{anchor:getglobaltolocalmatrix}} **void getGlobalToLocalMatrix(double * m)** *function: 获取全局坐标到本地坐标的转换矩阵(Clocal=M * Cglobal,其中坐标为列向量) *parameters: - [i]double * m: 转换矩阵 *return value: 无 {{anchor:transform}} **void transform(XCoordSystem * from,double * src_coord,double * cur_coord)** *function: 将源坐标系下的坐标转换为本地坐标 *parameters: - [i]XCoordSystem * from: 源坐标系,如值为0,则源坐标系为全局直角坐标系 - [i]double * src_coord: 源坐标 - [o]double * cur_coord: 本地坐标 *return value: 无 {{anchor:calcglobalcoordfromlocal}} **void calcGlobalCoordFromLocal(double * l_coord,double * g_coord)** *function: 计算本地坐标所对应的全局坐标 *parameters: - [i]double * l_coord: 本地坐标 - [o]double * g_coord: 全局坐标 *return value: 无 {{anchor:calclocalcoordfromglobal}} **void calcLocalCoordFromGlobal(double * g_coord,double * l_coord)** *function: 计算全局坐标所对应的本地坐标 *parameters: - [i]double * g_coord: 全局坐标 - [i]double * l_coord: 本地坐标 *return value: 无 ----