基于VC++的七参数转换实现

一、数学模型

不同空间直角坐标系之间的变换,其参数有(ΔX0,ΔY0,ΔZ0,ωX,ωY,ωZ,m)七个,其中(ΔX0,ΔY0,ΔZ0)为坐标平移量,(ωX,ωY,ωZ)为坐标轴间的三个旋转角度(又称为欧拉角),m为尺度因子。七参数模型如图。

   

 

二、七参数反解

  1. 算法

上述方程有7个未知参数,3个共公点就可以解算这7个参数。由于公共点存在误差,当公共点多余于3个时,引入坐标改正量Vx,Vy,Vz,则有:

 

则误差方程为:

 

可化简为:V=AX+L

依据最小二乘原理V。PV=最小,求出参数向量x的解,即

 

一般情况下,设转换的新旧坐标是相互独立的且等权,即P为单位权阵。

      2.编程实现

在vc++中加载Matrix.dll,Matrix.h,Matrix.lib文件,应用模型函数实现主要代码如下:

Trans(A,AT,3*Count1,7);//求转置

damul(AT,A,7,3*Count1,7,ATA);

damul(AT,L,7,3*Count1,1,ATL);

invATA=ATA;

dcinv(invATA,7);

damul(invATA,ATL,7,7,1,X);//V=AX+L最小二乘法

三、坐标转换

  1. 算法

如图1

     2.编程实现

在这里我们有两种方法实现,一种是和上面一样采用数学建模模型调用damul()函数,这种方法运算速度快。第二种是将算法1展开,具体代码如下:

q_coord.x=m_Px+p_coord.x*(1+m_ChiDu)+m_Xz*p_coord.y-m_Xy*p_coord.z;

q_coord.y=m_Py+p_coord.y*(1+m_ChiDu)-m_Xz*p_coord.x+m_Xx*p_coord.z;

q_coord.z=m_Pz+p_coord.z*(1+m_ChiDu)+m_Xy*p_coord.x-m_Xx*p_coord.y;

四、源码https://download.csdn.net/download/sailingw/2942845?spm=1001.2014.3001.5501

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海亲王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值