/// <summary> /// 由平移量计算过渡参数 /// </summary> /// <param name="dx"></param> /// <param name="dy"></param> /// <param name="dz"></param> public void CalCanshu(double dx, double dy, double dz) { /////1.计算由原始坐标系到过渡坐标系的参数(由于小量平移引起) cs1 = new Canshu(); cs1.dx -= dx; cs1.dy -= dy; cs1.dz -= dz; cs1.m0 = 0; cs1.Qx = 0; cs1.Qy = 0; cs1.Qz = 0; /////2.计算过渡坐标系到目标坐标的参数 cs2 = cs; cs2.dx += dx; cs2.dy += dy; cs2.dz += dz; }
/// <summary> /// 批量坐标转换 /// </summary> /// <param name="ocoors"></param> /// <param name="tcoors"></param> /// <returns></returns> public bool CoorTran(Coordinates[] ocoors, Canshu css, Coordinates[] tcoors) { for (int i = 0; i < ocoors.Length; i++) { Coordinates coor = new Coordinates(); bool issucceed; issucceed = CoorTran(ocoors[i], css, ref coor); if (issucceed) { tcoors[i] = coor; } else { return(false); } } return(true); }
/// <summary> /// 由平移量计算过渡参数 /// </summary> /// <param name="dx"></param> /// <param name="dy"></param> /// <param name="dz"></param> public void CalCanshu(double dx, double dy, double dz, double da, double db, double dc) { /////1.计算由原始坐标系到过渡坐标系的参数(由于小量平移引起) cs1 = new Canshu(); cs1.dx -= dx; cs1.dy -= dy; cs1.dz -= dz; cs1.m0 = 0; cs1.Qx -= da; cs1.Qy -= db; cs1.Qz -= dc; /////2.计算过渡坐标系到目标坐标的参数 cs2 = cs; cs2.dx += dx; cs2.dy += dy; cs2.dz += dz; cs2.Qx += da; cs2.Qy += db; cs2.Qz += dc; }
/// <summary> /// 单个坐标转换 /// </summary> /// <param name="ocoor"></param> /// <param name="css"></param> /// <param name="tcoor"></param> /// <returns></returns> public bool CoorTran(Coordinates ocoor, Canshu css, ref Coordinates tcoor) { Matrix XYZ_T = new Matrix(3, 1); //////转换后的坐标 Matrix XYZ_S = new Matrix(3, 1); //////转换前的坐标 Matrix Q_xyz = new Matrix(3, 3); ///////旋转矩阵 Matrix d_xyz = new Matrix(3, 1); ///////平移矩阵 try { ///////////////////平移矩阵赋值 d_xyz[0, 0] = css.dx; d_xyz[1, 0] = css.dy; d_xyz[2, 0] = css.dz; //////////////////旋转矩阵赋值 Q_xyz[0, 0] = Q_xyz[1, 1] = Q_xyz[2, 2] = 1; Q_xyz[0, 1] = css.Qz; Q_xyz[1, 0] = -css.Qz; Q_xyz[0, 2] = -css.Qy; Q_xyz[2, 0] = css.Qy; Q_xyz[1, 2] = css.Qx; Q_xyz[2, 1] = -css.Qx; ///////////////初始坐标矩阵赋值 XYZ_S[0, 0] = ocoor.X; XYZ_S[1, 0] = ocoor.Y; XYZ_S[2, 0] = ocoor.Z; /////////////////计算转换后的坐标 XYZ_T = d_xyz + (1 + css.m0) * (Q_xyz * XYZ_S); tcoor.X = XYZ_T[0, 0]; tcoor.Y = XYZ_T[1, 0]; tcoor.Z = XYZ_T[2, 0]; tcoor.name = ocoor.name; return(true); } catch { return(false); } }
/// <summary> /// 设置参数 /// </summary> /// <param name="cs1"></param> public void SetCanshu(Canshu cs0) { cs = new Canshu(); cs = cs0; }