欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    摄影测量学单像空间后方交会程序设计作业.docx

    • 资源ID:28519778       资源大小:14.90KB        全文页数:4页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    摄影测量学单像空间后方交会程序设计作业.docx

    精品文档,仅供学习与交流,如有侵权请联系网站删除using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 单像空间后方交会 class Program static void Main(string args) int x0, y0, i, j; double f, m; Console.Write("请输入像片比例尺:"); m = double.Parse(Console.ReadLine(); Console.Write("请输入像片的内方位元素x0:");/均以毫米为单位 x0 = int.Parse(Console.ReadLine(); Console.Write("请输入像片的内方位元素y0:"); y0 = int.Parse(Console.ReadLine(); Console.Write("请输入摄影机主距f:"); f = double.Parse(Console.ReadLine(); Console.WriteLine(); /输入坐标数据 double, zuobiao = new double4, 5; for (i = 0; i < 4; i+) for (j = 0; j < 5; j+) if (j < 3) Console.Write("请输入第0个点的第1个地面坐标:", i + 1, j + 1); zuobiaoi, j = double.Parse(Console.ReadLine(); else Console.Write("请输入第0个点的第1个像点坐标:", i + 1, j - 2); zuobiaoi, j = double.Parse(Console.ReadLine(); Console.WriteLine(); /归算像点坐标 for (i = 0; i < 4; i+) for (j = 3; j < 5; j+) if (j = 3) zuobiaoi, j = zuobiaoi, j - x0; else zuobiaoi, j = zuobiaoi, j - y0; /计算和确定初值 double zs0 = m * f, xs0 = 0, ys0 = 0; for (i = 0; i < 4; i+) xs0 = xs0 + zuobiaoi, 0; ys0 = ys0 + zuobiaoi, 1; xs0 = xs0 / 4; ys0 = ys0 / 4; /逐点计算误差方程系数 double, xishu = new double8, 6; for (i = 0; i < 8; i += 2) double x, y; x = zuobiaoi / 2, 3; y = zuobiaoi / 2, 4; xishui, 0 = xishui + 1, 1 = -1 / m; xishui, 1 = xishui + 1, 0 = 0; xishui, 2 = -x / (m * f); xishui, 3 = -f * (1 + x * x / (f * f); xishui, 4 = xishui + 1, 3 = -x * y / f; xishui, 5 = y; xishui + 1, 2 = -y / (m * f); xishui + 1, 4 = -f * (1 + y * y / (f * f); xishui + 1, 5 = -x; /计算逆阵 double, dMatrix =matrixChe(matrixTrans(xishu), xishu); double, dReturn = ReverseMatrix(dMatrix, 6); Console.WriteLine("逆矩阵为:"); if (dReturn != null) matrixOut(dReturn); /求解过程 double phi0 = 0, omega0 = 0, kappa0 = 0; int q = 0; double, r = new double3, 3; double, jinsi = new double4, 2; double chazhi = new double8; double jieguo = new double6; double, zhong = matrixChe(dReturn, matrixTrans(xishu); do /计算旋转矩阵r r0, 0 = Math.Cos(phi0) * Math.Cos(kappa0) - Math.Sin(phi0) * Math.Sin(omega0) * Math.Sin(kappa0); r0, 1 = -Math.Cos(phi0) * Math.Sin(kappa0) - Math.Sin(phi0) * Math.Sin(omega0) * Math.Cos(kappa0); r0, 2 = -Math.Sin(phi0) * Math.Cos(omega0); r1, 0 = Math.Cos(omega0) * Math.Sin(kappa0); r1, 1 = Math.Cos(omega0) * Math.Cos(kappa0); r1, 2 = -Math.Sin(omega0); r2, 0 = Math.Sin(phi0) * Math.Cos(kappa0) + Math.Cos(phi0) * Math.Sin(omega0) * Math.Sin(kappa0); r2, 1 = -Math.Sin(phi0) * Math.Sin(kappa0) + Math.Cos(phi0) * Math.Sin(omega0) * Math.Cos(kappa0); r2, 2 = Math.Cos(phi0) * Math.Cos(omega0); /计算x,y的近似值 for (i = 0; i < 4; i+) jinsii, 0 = -f * (r0, 0 * (zuobiaoi, 0 - xs0) + r1, 0 * (zuobiaoi, 1 - ys0) + r2, 0 * (zuobiaoi, 2 - zs0) / (r0, 2 * (zuobiaoi, 0 - xs0) + r1, 2 * (zuobiaoi, 1 - ys0) + r2, 2 * (zuobiaoi, 2 - zs0); jinsii, 1 = -f * (r0, 1 * (zuobiaoi, 0 - xs0) + r1, 1 * (zuobiaoi, 1 - ys0) + r2, 1 * (zuobiaoi, 2 - zs0) / (r0, 2 * (zuobiaoi, 0 - xs0) + r1, 2 * (zuobiaoi, 1 - ys0) + r2, 2 * (zuobiaoi, 2 - zs0); for (i = 0; i < 8; i += 2) chazhii = zuobiaoi / 2, 3 - jinsii / 2, 0; chazhii + 1 = zuobiaoi / 2, 4 - jinsii / 2, 1; for (i = 0; i < zhong.GetLength(0); i+) double k = 0; for (j = 0; j < zhong.GetLength(1); j+) k = k + zhongi, j * chazhij; jieguoi = k; /求新的近似值 xs0 += jieguo0; ys0 += jieguo1; zs0 += jieguo2; phi0 += jieguo3; omega0 += jieguo4; kappa0 += jieguo5; q+; if (q > 1000) break; while (Math.Abs(jieguo0) > 0.020 | Math.Abs(jieguo1) > 0.020) | Math.Abs(jieguo2) > 0.020); Console.WriteLine("共进行了0次运算", q); Console.WriteLine("旋转矩阵为"); matrixOut(r); for (i = 0; i < jieguo.GetLength(0); i+) Console.Write("第0个外方位元素为:1", i + 1, jieguoi); /矩阵转置 public static double, matrixTrans(double, X) double, A = X; double, C = new doubleA.GetLength(1), A.GetLength(0); for (int i = 0; i < A.GetLength(1); i+) for (int j = 0; j < A.GetLength(0); j+) Ci, j = Aj, i; return C; /矩阵输出 public static void matrixOut(double, X) double, C = X; for (int i = 0; i < C.GetLength(0); i+) for (int j = 0; j < C.GetLength(1); j+) Console.Write(" 0", Ci, j); Console.Write("n"); /二维矩阵相乘 public static double, matrixChe(double, X, double, Y) int i, j, n; double m; double, C = X; double, D = Y; double, E = new doubleC.GetLength(0), C.GetLength(0); for (i = 0; i < C.GetLength(0); i+) for (n = 0; n < C.GetLength(0); n+) m = 0; for (j = 0; j < C.GetLength(1); j+) m = m + Ci, j * Dj, n; Ei, n = m; return E; /计算行列式的值 public static double MatrixValue(double, MatrixList, int Level) double, dMatrix = new doubleLevel, Level; for (int i = 0; i < Level; i+) for (int j = 0; j < Level; j+) dMatrixi, j = MatrixListi, j; double c, x; int k = 1; for (int i = 0, j = 0; i < Level && j < Level; i+, j+) if (dMatrixi, j = 0) int m = i; for (; dMatrixm, j = 0; m+) ; if (m = Level) return 0; else for (int n = j; n < Level; n+) c = dMatrixi, n; dMatrixi, n = dMatrixm, n; dMatrixm, n = c; k *= (-1); for (int s = Level - 1; s > i; s-) x = dMatrixs, j; for (int t = j; t < Level; t+) dMatrixs, t -= dMatrixi, t * (x / dMatrixi, j); double sn = 1; for (int i = 0; i < Level; i+) if (dMatrixi, i != 0) sn *= dMatrixi, i; else return 0; return k * sn; /计算逆阵 public static double, ReverseMatrix(double, dMatrix, int Level) double dMatrixValue = MatrixValue(dMatrix, Level); if (dMatrixValue = 0) return null; double, dReverseMatrix = new doubleLevel, 2 * Level; double x, c; for (int i = 0; i < Level; i+) for (int j = 0; j < 2 * Level; j+) if (j < Level) dReverseMatrixi, j = dMatrixi, j; else dReverseMatrixi, j = 0; dReverseMatrixi, Level + i = 1; for (int i = 0, j = 0; i < Level && j < Level; i+, j+) if (dReverseMatrixi, j = 0) int m = i; for (; dMatrixm, j = 0; m+) ; if (m = Level) return null; else for (int n = j; n < 2 * Level; n+) dReverseMatrixi, n += dReverseMatrixm, n; x = dReverseMatrixi, j; if (x != 1) for (int n = j; n < 2 * Level; n+) if (dReverseMatrixi, n != 0) dReverseMatrixi, n /= x; for (int s = Level - 1; s > i; s-) x = dReverseMatrixs, j; for (int t = j; t < 2 * Level; t+) dReverseMatrixs, t -= (dReverseMatrixi, t * x); for (int i = Level - 2; i >= 0; i-) for (int j = i + 1; j < Level; j+) if (dReverseMatrixi, j != 0) c = dReverseMatrixi, j; for (int n = j; n < 2 * Level; n+) dReverseMatrixi, n -= (c * dReverseMatrixj, n); double, dReturn = new doubleLevel, Level; for (int i = 0; i < Level; i+) for (int j = 0; j < Level; j+) dReturni, j = dReverseMatrixi, j + Level; return dReturn;【精品文档】第 4 页

    注意事项

    本文(摄影测量学单像空间后方交会程序设计作业.docx)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开