3维空间转换的7参数求解和应用.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3维空间转换的7参数求解和应用

3维空间转换的7参数求解和应用 作者:Kiseigo 日期: 2009.02.21 前言:由于一直想写7参数的代码,但是却不会,近日得到Blue.Pan的帮助,写下了这些东西。07年在集思学院看到有人写过,但是感觉不太好,不过还是非常感谢作者的开源思想。在此,基于同样的考虑,写了这篇文章,希望对大家有所帮助。如果有错误,希望各位指出,共同学习。 在工程测量中,用的最多,同时从数学角度来说也是最严密的转换方法,是经典的三维赫尔墨特法。由于结果中最多可求得七个转换参数,即三个平移参数(、、)、三个旋转参数(Ex、Ey、Ez)和一个尺度缩放因子(m),因此,通常也被称为七参数法。 对两个不同坐标系经过平移,以及三次旋转,尺度改换,可以得到如下的公式。 求解7参数的核心代码如下: /// summary /// 根据3个或者3个以上的点的两套坐标系的坐标计算7参数(最小二乘法) 适用于小角度转换 bursa模型 /// /summary /// param name=aPtSource已知点的源坐标系的坐标/param /// param name=aPtTo已知点的新坐标系的坐标/param /// param name=sep输出: 7参数/param public void Calc7Para(PointXYZdbl[] aPtSource, PointXYZdbl[] aPtTo, ref SevenP sep) { #region 给A B 矩阵赋值 double[,] arrA = new double[aPtSource.Length * 3, 7]; // 如果是4个已知点, 12 * 7矩阵 A*X=B中的矩阵A for (int i = 0; i = arrA.GetLength(0) - 1; i++) { if (i % 3 == 0) { arrA[i, 0] = 1; arrA[i, 1] = 0; arrA[i, 2] = 0; arrA[i, 3] = aPtSource[i / 3].X; arrA[i, 4] = 0; arrA[i, 5] = -aPtSource[i / 3].Z; arrA[i, 6] = aPtSource[i / 3].Y; } else if (i % 3 == 1) { arrA[i, 0] = 0; arrA[i, 1] = 1; arrA[i, 2] = 0; arrA[i, 3] = aPtSource[i / 3].Y; arrA[i, 4] = aPtSource[i / 3].Z; arrA[i, 5] = 0; arrA[i, 6] = -aPtSource[i / 3].X; } else if (i % 3 == 2) { arrA[i, 0] = 0; arrA[i, 1] = 0; arrA[i, 2] = 1; arrA[i, 3] = aPtSource[i / 3].Z; arrA[i, 4] = -aPtSource[i / 3].Y; arrA[i, 5] = aPtSource[i / 3].X; arrA[i, 6] = 0; } } double[,] arrB = new double[aPtSource.Length * 3, 1]; // A * X = B 中的矩阵B, 如果有4个点,就是 12*1矩阵 for (int i = 0; i = arrB.GetLength(0) - 1; i++) { if (i % 3 == 0) { arrB[i, 0] = aPtTo[i / 3].X; } else if (i % 3 == 1) { arrB[i, 0] = aPtTo[i /

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档