⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 posemath.cc

📁 CNC 的开放码,EMC2 V2.2.8版
💻 CC
📖 第 1 页 / 共 2 页
字号:
    return p;}// PM_HOMOGENEOUS classPM_HOMOGENEOUS::PM_HOMOGENEOUS(PM_CARTESIAN v, PM_ROTATION_MATRIX m){    tran = v;    rot = m;}PM_HOMOGENEOUS::PM_HOMOGENEOUS(PM_CONST PM_POSE PM_REF p){    PmPose pose;    PmHomogeneous hom;    toPose(p, &pose);    pmPoseHomConvert(pose, &hom);    toHom(hom, this);}PM_CARTESIAN & PM_HOMOGENEOUS::operator [](int n) {    // if it is a rotation vector, stuff 0 as default bottom    // if it is a translation vector, stuff 1 as default bottom    switch (n) {    case 0:	noElement = 0.0;	return rot.x;    case 1:	noElement = 0.0;	return rot.y;    case 2:	noElement = 0.0;	return rot.z;    case 3:	noElement = 1.0;	return tran;    default:	if (0 == noCart) {	    noCart = new PM_CARTESIAN(0.0, 0.0, 0.0);	}	return (*noCart);	// need to return a PM_CARTESIAN &    }}#ifdef INCLUDE_POSEMATH_COPY_CONSTRUCTORSPM_HOMOGENEOUS::PM_HOMOGENEOUS(PM_CCONST PM_HOMOGENEOUS & h){    tran = h.tran;    rot = h.rot;}#endifPM_HOMOGENEOUS PM_HOMOGENEOUS::operator =(PM_HOMOGENEOUS h){    tran = h.tran;    rot = h.rot;    return h;}// PM_LINE class#ifdef INCLUDE_POSEMATH_COPY_CONSTRUCTORSPM_LINE::PM_LINE(PM_CCONST PM_LINE & l){    start = l.start;    end = l.end;    uVec = l.uVec;}#endifint PM_LINE::init(PM_POSE start, PM_POSE end){    PmLine _line;    PmPose _start, _end;    int retval;    toPose(start, &_start);    toPose(end, &_end);    retval = pmLineInit(&_line, _start, _end);    toLine(_line, this);    return retval;}int PM_LINE::point(double len, PM_POSE * point){    PmLine _line;    PmPose _point;    int retval;    toLine(*this, &_line);    retval = pmLinePoint(&_line, len, &_point);    toPose(_point, point);    return retval;}// PM_CIRCLE class#ifdef INCLUDE_POSEMATH_COPY_CONSTRUCTORSPM_CIRCLE::PM_CIRCLE(PM_CCONST PM_CIRCLE & c){    center = c.center;    normal = c.normal;    rTan = c.rTan;    rPerp = c.rPerp;    rHelix = c.rHelix;    radius = c.radius;    angle = c.angle;    spiral = c.spiral;}#endifint PM_CIRCLE::init(PM_POSE start, PM_POSE end,    PM_CARTESIAN center, PM_CARTESIAN normal, int turn){    PmCircle _circle;    PmPose _start, _end;    PmCartesian _center, _normal;    int retval;    toPose(start, &_start);    toPose(end, &_end);    toCart(center, &_center);    toCart(normal, &_normal);    retval = pmCircleInit(&_circle, _start, _end, _center, _normal, turn);    toCircle(_circle, this);    return retval;}int PM_CIRCLE::point(double angle, PM_POSE * point){    PmCircle _circle;    PmPose _point;    int retval;    toCircle(*this, &_circle);    retval = pmCirclePoint(&_circle, angle, &_point);    toPose(_point, point);    return retval;}// overloaded external functions// dotdouble dot(PM_CARTESIAN v1, PM_CARTESIAN v2){    double d;    PmCartesian _v1, _v2;    toCart(v1, &_v1);    toCart(v2, &_v2);    pmCartCartDot(_v1, _v2, &d);    return d;}// crossPM_CARTESIAN cross(PM_CARTESIAN v1, PM_CARTESIAN v2){    PM_CARTESIAN ret;    PmCartesian _v1, _v2;    toCart(v1, &_v1);    toCart(v2, &_v2);    pmCartCartCross(_v1, _v2, &_v1);    toCart(_v1, &ret);    return ret;}//unitPM_CARTESIAN unit(PM_CARTESIAN v){    PM_CARTESIAN vout;    PmCartesian _v;    toCart(v, &_v);    pmCartUnit(_v, &_v);    toCart(_v, &vout);    return vout;}/*! \todo Another #if 0 */#if 0PM_CARTESIAN norm(PM_CARTESIAN v){    PM_CARTESIAN vout;    PmCartesian _v;    toCart(v, &_v);    pmCartNorm(_v, &_v);    toCart(_v, &vout);    return vout;}#endifPM_QUATERNION norm(PM_QUATERNION q){    PM_QUATERNION qout;    PmQuaternion _q;    toQuat(q, &_q);    pmQuatNorm(_q, &_q);    toQuat(_q, &qout);    return qout;}PM_ROTATION_VECTOR norm(PM_ROTATION_VECTOR r){    PM_ROTATION_VECTOR rout;    PmRotationVector _r;    toRot(r, &_r);    pmRotNorm(_r, &_r);    toRot(_r, &rout);    return rout;}PM_ROTATION_MATRIX norm(PM_ROTATION_MATRIX m){    PM_ROTATION_MATRIX mout;    PmRotationMatrix _m;    toMat(m, &_m);    pmMatNorm(_m, &_m);    toMat(_m, &mout);    return mout;}// isNormint isNorm(PM_CARTESIAN v){    PmCartesian _v;    toCart(v, &_v);    return pmCartIsNorm(_v);}int isNorm(PM_QUATERNION q){    PmQuaternion _q;    toQuat(q, &_q);    return pmQuatIsNorm(_q);}int isNorm(PM_ROTATION_VECTOR r){    PmRotationVector _r;    toRot(r, &_r);    return pmRotIsNorm(_r);}int isNorm(PM_ROTATION_MATRIX m){    PmRotationMatrix _m;    toMat(m, &_m);    return pmMatIsNorm(_m);}// magdouble mag(PM_CARTESIAN v){    double ret;    PmCartesian _v;    toCart(v, &_v);    pmCartMag(_v, &ret);    return ret;}// dispdouble disp(PM_CARTESIAN v1, PM_CARTESIAN v2){    double ret;    PmCartesian _v1, _v2;    toCart(v1, &_v1);    toCart(v2, &_v2);    pmCartCartDisp(_v1, _v2, &ret);    return ret;}// invPM_CARTESIAN inv(PM_CARTESIAN v){    PM_CARTESIAN ret;    PmCartesian _v;    toCart(v, &_v);    pmCartInv(_v, &_v);    toCart(_v, &ret);    return ret;}PM_ROTATION_MATRIX inv(PM_ROTATION_MATRIX m){    PM_ROTATION_MATRIX ret;    PmRotationMatrix _m;    toMat(m, &_m);    pmMatInv(_m, &_m);    toMat(_m, &ret);    return ret;}PM_QUATERNION inv(PM_QUATERNION q){    PM_QUATERNION ret;    PmQuaternion _q;    toQuat(q, &_q);    pmQuatInv(_q, &_q);    toQuat(_q, &ret);    return ret;}PM_POSE inv(PM_POSE p){    PM_POSE ret;    PmPose _p;    toPose(p, &_p);    pmPoseInv(_p, &_p);    toPose(_p, &ret);    return ret;}PM_HOMOGENEOUS inv(PM_HOMOGENEOUS h){    PM_HOMOGENEOUS ret;    PmHomogeneous _h;    toHom(h, &_h);    pmHomInv(_h, &_h);    toHom(_h, &ret);    return ret;}// projectPM_CARTESIAN proj(PM_CARTESIAN v1, PM_CARTESIAN v2){    PM_CARTESIAN ret;    PmCartesian _v1, _v2;    toCart(v1, &_v1);    toCart(v2, &_v2);    pmCartCartProj(_v1, _v2, &_v1);    toCart(_v1, &ret);    return ret;}// overloaded arithmetic operatorsPM_CARTESIAN operator +(PM_CARTESIAN v){    return v;}PM_CARTESIAN operator -(PM_CARTESIAN v){    PM_CARTESIAN ret;    ret.x = -v.x;    ret.y = -v.y;    ret.z = -v.z;    return ret;}PM_QUATERNION operator +(PM_QUATERNION q){    return q;}PM_QUATERNION operator -(PM_QUATERNION q){    PM_QUATERNION ret;    PmQuaternion _q;    toQuat(q, &_q);    pmQuatInv(_q, &_q);    toQuat(_q, &ret);    return ret;}PM_POSE operator +(PM_POSE p){    return p;}PM_POSE operator -(PM_POSE p){    PM_POSE ret;    PmPose _p;    toPose(p, &_p);    pmPoseInv(_p, &_p);    toPose(_p, &ret);    return ret;}int operator ==(PM_CARTESIAN v1, PM_CARTESIAN v2){    PmCartesian _v1, _v2;    toCart(v1, &_v1);    toCart(v2, &_v2);    return pmCartCartCompare(_v1, _v2);}int operator ==(PM_QUATERNION q1, PM_QUATERNION q2){    PmQuaternion _q1, _q2;    toQuat(q1, &_q1);    toQuat(q2, &_q2);    return pmQuatQuatCompare(_q1, _q2);}int operator ==(PM_POSE p1, PM_POSE p2){    PmPose _p1, _p2;    toPose(p1, &_p1);    toPose(p2, &_p2);    return pmPosePoseCompare(_p1, _p2);}int operator !=(PM_CARTESIAN v1, PM_CARTESIAN v2){    PmCartesian _v1, _v2;    toCart(v1, &_v1);    toCart(v2, &_v2);    return !pmCartCartCompare(_v1, _v2);}int operator !=(PM_QUATERNION q1, PM_QUATERNION q2){    PmQuaternion _q1, _q2;    toQuat(q1, &_q1);    toQuat(q2, &_q2);    return !pmQuatQuatCompare(_q1, _q2);}int operator !=(PM_POSE p1, PM_POSE p2){    PmPose _p1, _p2;    toPose(p1, &_p1);    toPose(p2, &_p2);    return !pmPosePoseCompare(_p1, _p2);}PM_CARTESIAN operator +(PM_CARTESIAN v1, PM_CARTESIAN v2){    PM_CARTESIAN ret;    ret.x = v1.x + v2.x;    ret.y = v1.y + v2.y;    ret.z = v1.z + v2.z;    return ret;}PM_CARTESIAN operator -(PM_CARTESIAN v1, PM_CARTESIAN v2){    PM_CARTESIAN ret;    ret.x = v1.x - v2.x;    ret.y = v1.y - v2.y;    ret.z = v1.z - v2.z;    return ret;}PM_CARTESIAN operator *(PM_CARTESIAN v, double s){    PM_CARTESIAN ret;    ret.x = v.x * s;    ret.y = v.y * s;    ret.z = v.z * s;    return ret;}PM_CARTESIAN operator *(double s, PM_CARTESIAN v){    PM_CARTESIAN ret;    ret.x = v.x * s;    ret.y = v.y * s;    ret.z = v.z * s;    return ret;}PM_CARTESIAN operator /(PM_CARTESIAN v, double s){    PM_CARTESIAN ret;#ifdef PM_DEBUG    if (s == 0.0) {#ifdef PM_PRINT_ERROR	pmPrintError("PM_CARTESIAN::operator / : divide by 0\n");#endif	pmErrno = PM_DIV_ERR;	return ret;    }#endif    ret.x = v.x / s;    ret.y = v.y / s;    ret.z = v.z / s;    return ret;}PM_QUATERNION operator *(double s, PM_QUATERNION q){    PM_QUATERNION qout;    PmQuaternion _q;    toQuat(q, &_q);    pmQuatScalMult(_q, s, &_q);    toQuat(_q, &qout);    return qout;}PM_QUATERNION operator *(PM_QUATERNION q, double s){    PM_QUATERNION qout;    PmQuaternion _q;    toQuat(q, &_q);    pmQuatScalMult(_q, s, &_q);    toQuat(_q, &qout);    return qout;}PM_QUATERNION operator /(PM_QUATERNION q, double s){    PM_QUATERNION qout;    PmQuaternion _q;    toQuat(q, &_q);#ifdef PM_DEBUG    if (s == 0.0) {#ifdef PM_PRINT_ERROR	pmPrintError("Divide by 0 in operator /\n");#endif	pmErrno = PM_NORM_ERR;/*! \todo Another #if 0 */#if 0	// g++/gcc versions 2.8.x and 2.9.x	// will complain that the call to PM_QUATERNION(PM_QUATERNION) is	// ambigous. (2.7.x and some others allow it)	return qout =	    PM_QUATERNION((double) 0, (double) 0, (double) 0, (double) 0);#else	PmQuaternion quat;	quat.s = 0;	quat.x = 0;	quat.y = 0;	quat.z = 0;	pmQuatNorm(quat, &quat);	qout.s = quat.s;	qout.x = quat.x;	qout.y = quat.y;	qout.z = quat.z;	return qout;#endif    }#endif    pmQuatScalMult(_q, 1.0 / s, &_q);    toQuat(_q, &qout);    pmErrno = 0;    return qout;}PM_CARTESIAN operator *(PM_QUATERNION q, PM_CARTESIAN v){    PM_CARTESIAN vout;    PmQuaternion _q;    PmCartesian _v;    toQuat(q, &_q);    toCart(v, &_v);    pmQuatCartMult(_q, _v, &_v);    toCart(_v, &vout);    return vout;}PM_QUATERNION operator *(PM_QUATERNION q1, PM_QUATERNION q2){    PM_QUATERNION ret;    PmQuaternion _q1, _q2;    toQuat(q1, &_q1);    toQuat(q2, &_q2);    pmQuatQuatMult(_q1, _q2, &_q1);    toQuat(_q1, &ret);    return ret;}PM_ROTATION_MATRIX operator *(PM_ROTATION_MATRIX m1, PM_ROTATION_MATRIX m2){    PM_ROTATION_MATRIX ret;    PmRotationMatrix _m1, _m2;    toMat(m1, &_m1);    toMat(m2, &_m2);    pmMatMatMult(_m1, _m2, &_m1);    toMat(_m1, &ret);    return ret;}PM_POSE operator *(PM_POSE p1, PM_POSE p2){    PM_POSE ret;    PmPose _p1, _p2;    toPose(p1, &_p1);    toPose(p2, &_p2);    pmPosePoseMult(_p1, _p2, &_p1);    toPose(_p1, &ret);    return ret;}PM_CARTESIAN operator *(PM_POSE p, PM_CARTESIAN v){    PM_CARTESIAN ret;    PmPose _p;    PmCartesian _v;    toPose(p, &_p);    toCart(v, &_v);    pmPoseCartMult(_p, _v, &_v);    toCart(_v, &ret);    return ret;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -