Inherited from XDatum,
Inherited by NULL
Friend class NULL
Description
XXCoordSystem从XDatum基准类继承,抽象封装了坐标系对象及其方法,它的类型标识为“CDTMCOORDSYS”,其中CDTM为前缀。它可以描述包括直角坐标系、圆柱坐标系、球坐标系三种坐标系,XCoordSystem基于给定的原点位置以主轴(对应于直角坐标系的Z轴)、参考轴(对应于直角坐标系的X轴)来构造上述任何一种坐标系空间,坐标系的第三轴依赖于主轴和参考轴,用户不能直接设置。任何一个坐标系对象的原点坐标以及轴矢量都是以全局的直角坐标系来表示,因而局部坐标系的之间的转换以及局部坐标系与全局坐标系间的转换会更加直接方便而且易于理解。有相关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
Public interface
Coord m_dOrigin
原点的绝对坐标
Coord m_dMainAxis
坐标系的主轴矢量,以绝对坐标表示
Coord m_dRefAxis
坐标系的参考轴,以绝对坐标表示
Coord m_dDependentAxis
坐标系的第三轴,依赖于主轴与参考轴
XCoordSystem(int type = CoordSys_Rectangular,double * origin = 0,double * main = 0,double * ref = 0)
void setOrigin(XCoordSystem * refCS,double * origin)
void setAxis(XCoordSystem * refCS,double * main, double * ref)
double * getOrigin()
double * getMainAxis()
double * getRefAxis()
double * getDependentAxis()
void getLocalToGlobalMatrix(double * m)
void getGlobalToLocalMatrix(double * m)
void transform(XCoordSystem * from,double * src_coord,double * cur_coord)
void calcGlobalCoordFromLocal(double * l_coord,double * g_coord)
void calcLocalCoordFromGlobal(double * g_coord,double * l_coord)