Example #1
0
 /// <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;
 }
Example #2
0
 /// <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);
 }
Example #3
0
 /// <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;
 }
Example #4
0
        /// <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);
            }
        }
Example #5
0
 /// <summary>
 /// 设置参数
 /// </summary>
 /// <param name="cs1"></param>
 public void SetCanshu(Canshu cs0)
 {
     cs = new Canshu();
     cs = cs0;
 }