CAD坐标转换:倾斜客户坐标系到垂直CAD坐标系的精准对接

CAD坐标转换

项目场景:

今天工作中遇到一个比较棘手的问题,客户给的CAD图纸有自己的坐标格网,而且实际的数据也是按照格网的坐标进行采集的,但是呢,我在构建模型的时候是用CAD的坐标进行构建的,这就导致数据不能正确放置到对应位置上 客户坐标格网(坐标系) CAD坐标

可以看出,俩者之间的差别还是挺大的,而且最致命的就是客户的坐标格网是倾斜的,而我们建模的CAD坐标是垂直的,所以这里就涉及到俩个坐标的对应关系,如何才能把俩个坐标上的点对应起来,如何才能把客户数据的坐标转换成我CAD的坐标

解决过程:

第一步:计算客户坐标系原点(0,0)对应CAD坐标系中的坐标

首先在图上找到一点,同时获取到他在客户坐标系和CAD坐标系下的坐标 一组对应点

对应点位置

坐标关系推演图如下所示: 由上图可以知道: x0 = cadx - kxcosα +kysinα y0 = cady - kxsinα - kycosα 带入之前获取的(cadx,cady)=>(37484241.92, 4426712.53) (kx,ky)=>16000,20500),我们就可以得到客户坐标系统原点(0,0)对应的CAD坐标是多少

获取客户坐标系统原点(0,0)对应的CAD坐标代码如下

//cad的x坐标

double cadx = 0;

//cad的y坐标

double cady = 0;

//矿上的本地的x坐标

double kuangx = 0;

//矿上的本地的y坐标

double kuangy = 0;

//转换后的矿上坐标的坐标原点对应的cad中的x

double x0 = 0;

//转换后的矿上坐标的坐标原点对应的cad中的y

double y0 = 0;

//矿上坐标与cad坐标在x方向上的夹角

double angle1 = 0;

if (programName.Contains("唐家会"))

{

angle1 = 25 * Math.PI / 180;

cadx = 37484241.92;

cady = 4426712.53;

kuangx = 16000;

kuangy = 20500;

//计算坐标原点

double mx1 = cadx - kuangx * Math.Cos(angle1);

double my1 = cady - kuangx * Math.Sin(angle1);

x0 = mx1 + kuangy * Math.Sin(angle1);

y0 = my1 - kuangy * Math.Cos(angle1);

}

第二步:通过计算出的坐标原点《客户坐标系原点(0,0)对应CAD坐标系中的坐标》(x0,y0),计算每一个数据在CAD坐标系下的坐标

坐标关系推演图如下所示:

由上图可知: x = x0 + kxcosα - kysinα y = y0 + kxsinα +kycosα 带入之前算出的(x0,y0)《客户坐标系原点(0,0)对应CAD坐标系中的坐标》,和当前客户数据的坐标(kx,ky),可以得出每一个点对应的CAD坐标

处理每一个点数据代码如下

double mx = double.Parse(x);

double my = double.Parse(y);

if(x0 != 0 && y0 != 0 && angle1 != 0 && mx != 0 && my != 0)

{

//通过原点计算换算后的坐标

double mx2 = x0 + mx * Math.Cos(angle1);

double my2 = y0 + mx * Math.Sin(angle1);

double rx = mx2 - my * Math.Sin(angle1);

double ry = my2 + my * Math.Cos(angle1);

x = rx.ToString();

y = ry.ToString();

}


最高院宣判:玖富是信息中介,与出借人不是借贷关系,玖富不担责
王者荣耀停服更新多久?