后方交会计算计算)程序

合集下载

CASIO fx-5800p测角后方交会坐标计算程序精品资料

CASIO fx-5800p测角后方交会坐标计算程序精品资料

• 记录下机器的剩余内存字节数,设为B
• 应有F−B=612字节,否则,主程序输入有误!
子程序SUBQ4−3逐屏图片
• 子程序输入是否正确的数字检查方法!
• SUBQ4−3子程序需要占用148字节内存。
• 输入子程序前,按
Hale Waihona Puke 键,• 记录下机器的剩余内存字节数,设为F
• 输入完SUBQ4−3子程序后,按 键返回,
测角后方交会坐标计算
母机程序QH4−3逐屏图片
• 主程序——QH4−3 • 一个子程序——SUBQ4−3。
主程序QH4−3逐屏图片
• 主程序输入是否正确的数字检查方法!
• QH4−3主程序需要占用612字节内存。
• 输入主程序前,按
键,
• 记录下机器的剩余内存字节数,设为F
• 输入完QH4−3主程序后, 按 键返回,
• 记录下机器的剩余内存字节数,设为B
• 应有F−B=148字节,否则,子程序输入有误!

空间后方交会的解算

空间后方交会的解算

空间后方交会的解算一. 空间后方交会的目的摄影测量主要利用摄影的方法获取地面的信息,主要是是点位信息,属性信息,因此要对此进行空间定位和建模,并首先确定模型的参数,这就是空间后方交会的目的,用以求出模型外方位元素。

二. 空间后方交会的原理空间后方交会的原理是共线方程。

共线方程是依据相似三角形原理给出的,其形式如下111333222333()()()()()()()()()()()()A S A S A S A S A S A S AS A S A S A S A S A S a X X b Y Y c Z Z x f a X X a Y Y a Z Z a X X b Y Y c Z Z y f a X X a Y Y a Z Z -+-+-=--+-+--+-+-=--+-+-上式成为中心投影的构线方程,我们可以根据几个已知点,来计算方程的参数,一般需要六个方程,或者要三个点,为提高精度,可存在多余观测,然后利用最小二乘求其最小二乘解。

将公式利用泰勒公式线性化,取至一次项,得到其系数矩阵A ;引入改正数(残差)V ,则可将其写成矩阵形式:V AX L =-其中111333222333[,]()()()()()()()()()()()()()()Tx y A S A S A S x A S A S A S A S A S A S y A S A S A S L l l a X X b Y Y c Z Z l x x x fa X X a Y Y a Z Z a X Xb Y Yc Z Z l y y y fa X X a Y Y a Z Z =-+-+-=-=+-+-+--+-+-=-=+-+-+- 则1()T T X A A A L -=X 为外方位元素的近似改正数,由于采用泰勒展开取至一次项,为减少误差,要将的出的值作为近似值进行迭代,知道小于规定的误差三. 空间后方交会解算过程1. 已知条件近似垂直摄影00253.24mmx y 0f ===2. 解算程序流程图MATLAB 程序format long;s1=xlsread('data.xls');%读取数据a1=s1(1:4,1:2);%影像坐标b1=s1(1:4,3:5);%地面摄影测量坐标a2=s1.*10^-3;%影像坐标单位转化j1=a2(1,:)-a2(2,:);j2=j1(1,1)^2+j1(1,2)^2;lengh_a1=sqrt(j2); %相片某一长度j1=b1(1,:)-b1(1,:);j2=j1(1,1)^2+j1(1,2)^2;lengh_b1=sqrt(j2); %地面对应的长度m=lengh_b1/lengh_a1;%求出比例尺n0=0;p0=0;q0=0;x0=mean(b1(:,1));y0=mean(b1(:,2));f=153.24*10^-3;z0=m*f;x001={x0,x0,x0,x0};X0=cell2mat(x001)';y001={y0,y0,y0,y0};Y0=cell2mat(y001)';z001={z0,z0,z0,z0};Z0=cell2mat(z001)';%初始化外方位元素的值aa1=cos(n0)*cos(q0)-sin(n0)*sin(p0)*sin(q0);aa2=-sin(q0)*cos(n0)-sin(n0)*sin(p0)*cos(q0);aa3=-sin(n0)*cos(p0);bb1=sin(q0)*cos(p0);bb2=cos(q0)*cos(p0);bb3=-sin(p0);cc1=sin(n0)*cos(q0)+sin(p0)*cos(n0)*sin(q0);cc2=-sin(n0)*sin(q0)+sin(p0)*cos(q0)*cos(n0);cc3=cos(n0)*cos(p0);%计算改正数XX1=aa1.*(b1(:,1)-X0)+bb1.*(b1(:,2)-Y0)+cc1.*(b1(:,3)-Z0); XX2=aa2.*(b1(:,1)-X0)+bb2.*(b1(:,2)-Y0)+cc2.*(b1(:,3)-Z0); XX3=aa3.*(b1(:,1)-X0)+bb3.*(b1(:,2)-Y0)+cc3.*(b1(:,3)-Z0); lx=a1(:,1)+f.*(XX1./XX3);ly=a1(:,2)+f.*(XX2./XX3);l={lx',ly'};L=cell2mat(l)';%方程系数A=[-3.969*10^-5 0 2.231*10^-5 -0.2 -0.04 -0.06899;0 -3.969*10^-5 1.787*10^-5 -0.04 -0.18 0.08615;-2.88*10^-5 0 1*10^-5 -0.17 0.03 0.08211;0 -2.88*10^-5 -1.54*10^-5 0.03 -0.2 0.0534;-4.14*10^-5 0 4*10^-6 -0.15 -7.4*10^-3 -0.07663;0 -4.14*10^-5 2.07*10^-5 -7.4*10^-3 -0.19 0.01478;-2.89*10^-5 0 -1.98*10^-6 -0.15 -4.4*10^-3 0.06443;0 -2.89*10^-5 -1.22*10^-5 -4.4*10^-3 -0.18 0.01046];%L=[-1.28 3.78 -3.02 -1.45 -4.25 4.98 -4.72 -0.385]'.*10^-2; %第一次迭代X=inv(A'*A)*A'*L;3.结果X=1492.41127406195-554.4015671761941425.68660973544-0.0383847815608609 0.00911624039769785 -0.105416434087641S=1492.41127406195-554.401567176194 1425.68660973544 38436.9616152184 27963.1641162404-0.105416434087641。

卡西欧5800多功能实用坐标正反算小程序(附后方交会程序)

卡西欧5800多功能实用坐标正反算小程序(附后方交会程序)
说明:第一个照准点坐标(XA , YA),平距为D1,第二个照准点坐标(XB , YB),平距为D2 ,第一点,第二点及测站点如果是顺时针方向排列Q = 1,逆时针Q =-1。(XP , YP)为待求点的坐标。
Goto0:
Lbl3:Cls:”X1=”?A:”Y1=”?B:?F: ”X2=”?X:”Y2=”?Y:
(X-A)cos(F)+(Y-B)sin(F)→I:
(Y-B)cos(F)-(X-A)sin(F)→Z:
Cls:“L=”: “Z=”:Locate4,1,I:Locate 4,2,Z◢
Goto0
注:程序中的“=>”是一个双箭号, 按FUNCTION选3下翻两页选3 即可输入。方Biblioteka 角L距离Z
偏距
R
斜交偏距的转角(顺时针为正数,正交输入0)
2程序名:HFJH(距离后方交会)
LBI 1 :〝XA〞?A :〝YA〞?B :〝XB〞?C :〝YB〞?D :〝D1〞?E :〝D2〞?F :?Q : 0→J : POL(C-A , D-B)→G : J+Q Cos-1((GG+EE-FF)÷(2GE))→H :〝XP=〞: A+E Cos(H)→X▲〝YP=〞: B+E Sin(H)→Y▲Goto1
显示及操作说明:
显示
功能
1.XY→LF
2.LF→XY
3.XYF→LZ
1.输入两点坐标计算距离与方位角
2.输入起点坐标及方位角、距离、偏距、偏距的转角
3.输入起点坐标及方位角,输入实测坐标,计算实测点与起点的垂直距离和垂直偏距
显示
输入及显示说明
X1、Y1
第一点(起点)坐标
X2、Y2

空间后方交会程序设计

空间后方交会程序设计

单片空间后方交会程序设计实验报告专业:测绘工程班级:081姓名:张发伟学号:09[一]、实习任务:用C或VC++语言实现单片后方交汇的计算。

[二]、实习目的:1.深入理解单片空间后方交会的原理;2.在有多余观测情况下,用最小二乘平差方法编程实现解求影像外方位元素的过程;3.通过上机调试程序加强动手能力的培养。

[三]、实习原理:以单幅影象为基础,从该影象所覆盖地面范围内若干控制点的已知地面坐标和相应点的像坐标量测值出发,根据共线条件方程,求解该影象在航空摄影时刻的像片外方位元素Xs,Ys,Zs,ф,ω,κ.共线条件方程如下:x-x0=-f*[a1(X-Xs)+b1(Y-Ys)+c1(Z-Zs)]/[a3(X-Xs)+b3(Y-Ys)+c3(Z-Zs)] y-y0=-f*[a2(X-Xs)+b2(Y-Ys)+c2(Z-Zs)]/[a3(X-Xs)+b3(Y-Ys)+c3(Z-Zs)]x,y为像点的像平面坐标;x0,y0,f为影像的外方位元素;Xs,Ys,Zs为摄站点的物方空间坐标;X,Y,Z为物方点的物方空间坐标;[四]、程序框图:输入原始数据归算像点坐标x,,y计算和确定初值X s 0, Y s 0, Z s 0, φ0,ω0,κ0组成旋转矩阵R计算(x ),(y )和l x ,l y逐点组成误差方程并法化所有点完否? 解法方程,求未知数改正数 计算改正后外方位元素未知数改正数<限差否?整理并输出计算结果正常输出迭代次数小于限差否? 输出中间结果和出错信息非正常结束[五]、实验数据:4个地面控制点的地面坐标及其对应像点的像片坐标:[六]、结果输出:已知条件:像点坐标x,y:-53.4 82.21-14.78 -76.6310.46 64.43153.24 -86.15地点坐标Xa,Ya,Za:37631.1 31324.5 728.6939101 24935 2386.540426.5 30319.8 757.31-68.99 36589.4 25273.3摄影比例尺:1:50000内方位元素:x0=y0=0 f=153.24mm计算结果:旋转矩阵:0.997709 0.0675334 0.00398399-0.0675254 0.997715 -0.00211178-0.0041175 0.00183792 0.99999像点坐标位:(单位:mm)-86.15 -68.99-53.41 82.21-14.78 -76.6310.47 64.43外方位元素:Xs=39795.435 精度为:1.1254813Ys=27476.479 精度为:1.2437625Zs=7572.6929 精度为:0.48380521q=-0.0039840098 精度为:0.00018182003w=0.0021117837 精度为:0.00015959235k=-0.067576934 精度为:7.2440432e-005迭代次数:4Press any key to continue[七]、实习总结:掌握运用程序设计实现单片后方交汇的计算,了解在多余观测情况下,用最小二乘平差方法计算相片外方位元素,及其相关精度。

单片空间后方交会程序设计

单片空间后方交会程序设计

单片空间后方交会程序设计
1 目的
用程序设计语言(VC或者VB)编写一个完整的单片空间后方交会程序,通过对提供的试验数据进行计算,输出像片的外方位元素并评定精度。

本实验的目的在于让学生深入理解单片空间后方交会的原理,体会在有多余观测情况下,用最小二乘平差方法编程实现解求影像外方位元素的过程。

通过上机调试程序加强动手能力的培养,通过对实验结果的分析,增强学生综合运用所学知识解决实际问题的能力。

2. 内容
利用一定数量的地面控制点,根据共线条件方程求解像片外方位元素。

3. 数据准备
已知航摄仪的内方位元素:f
k =153.24mm,x
=y
=0.0mm,摄影比例尺为1:50000;
4个地面控制点的地面坐标及其对应像点的像片坐标:
4. 操作步骤
上机调试程序并打印结果。

摄影测量学空间后方交会实验报告

摄影测量学空间后方交会实验报告

摄影测量学实验报告实验一、单像空间后方交会学院:建测学院班级:测绘082姓名:肖澎学号: 15一.实验目的1.深入了解单像空间后方交会的计算过程;2.加强空间后方交会基本公式和误差方程式,法线方程式的记忆;3.通过上机调试程序加强动手能力的培养。

二.实验原理以单幅影像为基础,从该影像所覆盖地面范围内若干控制点和相应点的像坐标量测值出发,根据共线条件方程,求解该影像在航空摄影时刻的相片外方位元素。

三.实验内容1.程序图框图2.实验数据(1)已知航摄仪内方位元素f=153.24mm,Xo=Yo=0。

限差0.1秒(2)已知4对点的影像坐标和地面坐标:3.实验程序using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication3{class Program{static void Main(){//输入比例尺,主距,参与平参点的个数Console.WriteLine("请输入比例尺分母m:\r");string m1 = Console.ReadLine();double m = (double)Convert.ToSingle(m1);Console.WriteLine("请输入主距f:\r");string f1 = Console.ReadLine();double f = (double)Convert.ToSingle(f1);Console.WriteLine("请输入参与平差控制点的个数n:\r");string n1 = Console.ReadLine();int n = (int)Convert.ToSingle(n1);//像点坐标的输入代码double[] arr1 = new double[2 * n];//1.像点x坐标的输入for (int i = 0; i < n; i++){Console.WriteLine("请输入已进行系统误差改正的像点坐标的x{0}值:\r", i+1);string u = Console.ReadLine();for (int j = 0; j < n; j += 2){arr1[j] = (double)Convert.ToSingle(u);}}//2.像点y坐标的输入for (int i = 0; i < n; i++){Console.WriteLine("请输入已进行系统误差改正的像点坐标的y{0}值:\r", i+1);string v = Console.ReadLine();for (int j = 1; j < n; j += 2){arr1[j] = (double)Convert.ToSingle(v);}}//控制点的坐标输入代码double[,] arr2 = new double[n, 3];//1.控制点X坐标的输入for (int j = 0; j < n; j++){Console.WriteLine("请输入控制点在地面摄影测量坐标系的坐标的X{0}值:\r", j+1);string u = Console.ReadLine();arr2[j , 0] = (double)Convert.ToSingle(u);}//2.控制点Y坐标的输入for (int k = 0; k < n; k++){Console.WriteLine("请输入控制点在地面摄影测量坐标系的坐标的Y{0}值:\r", k+1);string v = Console.ReadLine();arr2[k , 1] = (double)Convert.ToSingle(v);}//3.控制点Z坐标的输入for (int p =0; p < n; p++){Console.WriteLine("请输入控制点在地面摄影测量坐标系的坐标的Z{0}值:\r", p+1);string w = Console.ReadLine();arr2[p , 2] = (double)Convert.ToSingle(w);}//确定外方位元素的初始值//1.确定Xs的初始值:double Xs0 = 0;double sumx = 0;for (int j = 0; j < n; j++){double h = arr2[j, 0];sumx += h;}Xs0 = sumx / n;//2.确定Ys的初始值:double Ys0 = 0;double sumy = 0;for (int j = 0; j < n; j++){double h = arr2[j, 1];sumy += h;}Ys0 = sumy / n;//3.确定Zs的初始值:double Zs0 = 0;double sumz = 0;for (int j = 0; j <= n - 1; j++){double h = arr2[j, 2];sumz += h;}Zs0 = sumz / n;doubleΦ0 = 0;doubleΨ0 = 0;double K0 = 0;Console.WriteLine("Xs0,Ys0,Zs0,Φ0,Ψ0,K0的值分别是:{0},{1},{2},{3},{4},{5}", Xs0, Ys0, Zs0, 0, 0, 0);//用三个角元素的初始值按(3-4-5)计算各方向余弦值,组成旋转矩阵,此时的旋转矩阵为单位矩阵I:double[,] arr3 = new double[3, 3];for (int i = 0; i < 3; i++)arr3[i, i] = 1;}double a1 = arr3[0, 0]; double a2 = arr3[0, 1]; double a3 = arr3[0, 2];double b1 = arr3[1, 0]; double b2 = arr3[1, 1]; double b3 = arr3[1, 2];double c1 = arr3[2, 0]; double c2 = arr3[2, 1]; double c3 = arr3[2, 2];/*利用线元素的初始值和控制点的地面坐标,代入共线方程(3-5-2),* 逐点计算像点坐标的近似值*///1.定义存放像点近似值的数组double[] arr4 = new double[2 * n];//----------近似值矩阵//2.逐点像点坐标计算近似值//a.计算像点的x坐标近似值(x)for (int i = 0; i < 2 * n; i += 2){for (int j = 0; j < n; j++){arr4[i] = -f * (a1 * (arr2[j, 0] - Xs0) + b1 * (arr2[j, 1] - Ys0) + c1 * (arr2[j, 2] - Zs0)) / (a3 * (arr2[j, 0] - Xs0) + b3 * (arr2[j, 1] - Ys0) + c3 * (arr2[j, 2] - Zs0)); }}//b.计算像点的y坐标近似值(y)for (int i = 1; i < 2 * n; i += 2){for (int j = 0; j < n; j++){arr4[i] = -f * (a2 * (arr2[j, 0] - Xs0) + b2 * (arr2[j, 1] - Ys0) + c2 * (arr2[j, 2] - Zs0)) / (a3 * (arr2[j, 0] - Xs0) + b3 * (arr2[j, 1] - Ys0) + c3 * (arr2[j, 2] - Zs0)); }}//逐点计算误差方程式的系数和常数项,组成误差方程:double[,] arr5 = new double[2 * n, 6]; //------------系数矩阵(A)//1.计算dXs的系数for (int i = 0; i < 2 * n; i += 2){arr5[i, 0] = -1 / m; //-f/H == -1/m}//2.计算dYs的系数for (int i = 1; i < 2 * n; i += 2){arr5[i, 1] = -1 / m; //-f/H == -1/m}//3.a.计算误差方程式Vx中dZs的系数for (int i = 0; i < 2 * n; i += 2)arr5[i, 2] = -arr1[i] / m * f;}//3.b.计算误差方程式Vy中dZs的系数for (int i = 1; i < 2 * n; i += 2){arr5[i, 2] = -arr1[i] / m * f;}//4.a.计算误差方程式Vx中dΦ的系数for (int i = 0; i < 2 * n; i += 2){arr5[i, 3] = -f * (1 + arr1[i] * arr1[i] / f * f);}//4.a.计算误差方程式Vy中dΦ的系数for (int i = 1; i < 2 * n; i += 2){arr5[i, 3] = -arr1[i - 1] * arr1[i] / f;}//5.a.计算误差方程式Vx中dΨ的系数for (int i = 0; i < 2 * n; i += 2){arr5[i, 4] = -arr1[i] * arr1[i + 1] / f;}//5.b.计算误差方程式Vy中dΨ的系数for (int i = 1; i < 2 * n; i += 2){arr5[i, 4] = -f * (1 + arr1[i] * arr1[i] / f * f);}//6.a.计算误差方程式Vx中dk的系数for (int i = 0; i < 2 * n; i += 2){arr5[i, 5] = arr1[i + 1];}//6.b.计算误差方程式Vy中dk的系数for (int i = 1; i < 2 * n; i += 2){arr5[i, 5] = -arr1[i - 1];}//定义外方位元素组成的数组double[] arr6 = new double[6];//--------------------外方位元素改正数矩阵(X)//定义常数项元素组成的数组double[] arr7 = new double[2 * n];//-----------------常数矩阵(L)//计算lx的值for (int i = 0; i < 2 * n; i += 2)arr7[i] = arr1[i] - arr4[i]; //将近似值矩阵的元素代入}//计算ly的值for (int i = 1; i <= 2 * (n - 1); i += 2){arr7[i] = arr1[i] - arr4[i]; //将近似值矩阵的元素代入}/* 对于所有像点的坐标观测值,一般认为是等精度量测,所以权阵P为单位阵.所以X=(ATA)-1ATL *///1.计算ATdouble[,] arr5T = new double[6, 2 * n];for (int i = 0; i < 6; i++){for (int j = 0; j < 2 * n; j++){arr5T[i, j] = arr5[j, i];}}//A的转置与A的乘积,存放在arr5AA中double[,] arr5AA = new double[6, 6];for (int i = 0; i < 6; i++){for (int j = 0; j < 6; j++){arr5AA[i, j] = 0;for (int l = 0; l < 2 * n; l++){arr5AA[i, j] += arr5T[i, l] * arr5[l, j];}}}nijuzhen(arr5AA);//arr5AA经过求逆后变成原矩阵的逆矩阵//arr5AA * arr5T存在arr5AARATdouble[,] arr5AARAT = new double[6, 2 * n];for (int i = 0; i < 6; i++){for (int j = 0; j < 2 * n; j++){arr5AARAT[i, j] = 0;for (int p = 0; p < 6; p++){arr5AARAT[i, j] += arr5AA[i, p] * arr5T[p, j];}}}//计算arr5AARAT x L,存在arrX中double[] arrX = new double[6];for (int i = 0; i < 6; i++){for (int j = 0; j < 1; j++){arrX[i] = 0;for (int vv = 0; vv < 6; vv++){arrX[i] += arr5AARAT[i, vv] * arr7[vv];}}}//计算外方位元素值double Xs, Ys, Zs, Φ, Ψ, K;Xs = Xs0 + arrX[0];Ys = Ys0 + arrX[1];Zs = Zs0 + arrX[2];Φ = Φ0 + arrX[3];Ψ = Ψ0 + arrX[4];K = K0 + arrX[5];for (int i = 0; i <= 2; i++){Xs += arrX[0];Ys += arrX[1];Zs += arrX[2];Φ += arrX[3];Ψ += arrX[4];K += arrX[5];}Console.WriteLine("Xs,Ys,Zs,Φ,Ψ,K的值分别是:{0},{1},{2},{3},{4},{5}", Xs0, Ys0, Zs0, Φ, Ψ, K);Console.Read();}//求arr5AA的逆矩public static double[,] nijuzhen(double[,] a) {double[,] B = new double[6, 6];int i, j, k;int row = 0;int col = 0;double max, temp;int[] p = new int[6];for (i = 0; i < 6; i++){p[i] = i;B[i, i] = 1;}for (k = 0; k < 6; k++){//找主元max = 0; row = col = i;for (i = k; i < 6; i++){for (j = k; j < 6; j++){temp = Math.Abs(a[i, j]);if (max < temp){max = temp;row = i;col = j;}}}//交换行列,将主元调整到k行k列上if (row != k){for (j = 0; j < 6; j++){temp = a[row, j];a[row, j] = a[k, j];a[k, j] = temp;temp = B[row, j];B[row, j] = B[k, j];B[k, j] = temp;i = p[row]; p[row] = p[k]; p[k] = i; }if (col != k){for (i = 0; i < 6; i++){temp = a[i, col];a[i, col] = a[i, k];a[i, k] = temp;}}//处理for (j = k + 1; j < 6; j++){a[k, j] /= a[k, k];}for (j = 0; j < 6; j++){B[k, j] /= a[k, k];a[k, k] = 1;}for (j = k + 1; j < 6; j++){for (i = 0; j < k; i++){a[i, j] -= a[i, k] * a[k, j];}for (i = k + 1; i < 6; i++){a[i, j] -= a[i, k] * a[k, j];}}for (j = 0; j < 6; j++){for (i = 0; i < k; i++){B[i, j] -= a[i, k] * B[k, j];}for (i = k + 1; i < 6; i++){B[i, j] -= a[i, k] * B[k, j];}for (i = 0; i < 6; i++) {a[i, k] = 0;a[k, k] = 1;}}//恢复行列次序for (j = 0; j < 6; j++){for (i = 0; i < 6; i++) {a[p[i], j] = B[i, j]; }}for (i = 0; i < 6; i++){for (j = 0; j < 6; j++) {a[i, j] = a[i, j];}}return a;}4.实验结果四.实验总结此次实验让我深入了解单像空间后方交会的计算过程,加强了对空间后方交会基本公式和误差方程式,法线方程式的记忆。

地下工程测量 题汇总

地下工程测量 题汇总

一、填空题(60分,每空2分)1、测角方法误差包括。

2、方向符合导线点位误差最大的点是导线的,方位角误差最大的边是导线的。

3、一井定向内业解算中两垂球线间距离的检核可以检核的正确性,三角形内角和可以检核的正确性。

4、在贯通测量设计中应尽可能增大导线边长,其目的是减少以减小误差的影响。

5、井下水平角观测中,占标对中误差在所测角度为0°~180°时,随角度增大而(增大/减小/不变)。

6、斜距化算成平距时倾角与精度的关系是。

7、两井贯通在水平重要方向上的误差来源有。

8、测角误差对支导线终点点位精度的影响为(与测角误差的大小成反比/与导线测站数成反比/与导线形状有关)。

9、若某一贯通一次导线测量的预计误差为Mx′,导线独立测量两次,贯通允许偏差为M 容,判断该方案精度上是否合理的表达式为。

10、伪倾角法标设腰线的伪倾角计算公式为。

11、两井定向井下导线起始边一般选在(左边/中间/右边)。

12、陀螺方位角一次测定中误差通常比一次定向中误差要(小/大/一样)。

13、贯通测量方案的选择应依据原则进行。

14、井下基本控制导线的等级有。

15、井下进行碎部测量的目的是,其主要内容为。

16、井下经纬仪导线常用的平差方法是,调整坐标增量闭合差的两种常用方法的公式为。

17、井下高程测量的目的是。

18、在井下高程测量中,为保持与地面高程测量的计算公式一致而采用的措施是。

19、定向是指。

20、近井点的精度,对于测设它的起算点来说,其点位中误差不得超过,后视边方位角中误差不得超过。

21、按《煤矿测量规程》规定,两次独立定向之差不大于±2′,则一次定向的中误差为。

22、立井几何定向常用的投点方法有。

23、陀螺方位角与真方位角的差值叫,其关系式为。

24、巷道中线的作用是。

25、巷道腰线通常标设在一帮上,离巷道底板的距离为米。

二、一井定向井上、下选择连接点C时应注意什么?为什么?(10分)三、绘图示意说明标定巷道开切点的方法(7分)。

简述单像空间后方交会的程序设计步骤

简述单像空间后方交会的程序设计步骤

简述单像空间后方交会的程序设计步骤摘要:一、单像空间后方交会概念阐述二、单像空间后方交会程序设计目的三、单像空间后方交会程序设计步骤1.数据准备2.建立中心投影几何模型3.求解像片外方位元素4.评定精度四、实验意义及能力培养正文:单像空间后方交会是一种基于摄影测量原理的算法,通过计算影像的外方位元素,实现对影像的定位和测量。

在已知地面上若干点的地面坐标和对应像点的像片坐标的情况下,利用共线条件方程求解像片外方位元素。

以下详细介绍单像空间后方交会的程序设计步骤:一、单像空间后方交会概念阐述单像空间后方交会是指在影像覆盖范围内,根据一定数量的分布合理的地面控制点(已知其像点和地面点的坐标),利用共线条件方程求解像片外方位元素的过程。

它是摄影测量中一种基础的算法,为后续复杂算法的演进提供了基础。

二、单像空间后方交会程序设计目的单像空间后方交会程序设计的目的是让学生深入理解单片空间后方交会的原理,通过上机调试程序加强动手能力的培养,通过对实验结果的分析,增强学生综合运用所学知识解决实际问题的能力。

三、单像空间后方交会程序设计步骤1.数据准备:已知航摄仪的内方位元素,摄影比例尺,以及地面控制点的地面坐标和对应像点的像片坐标。

2.建立中心投影几何模型:根据针孔相机模型,建立中心投影的几何模型,包括物空间坐标系、像空间坐标系和摄影坐标系。

3.求解像片外方位元素:利用共线条件方程,通过最小二乘平差方法求解像片的外方位元素。

4.评定精度:根据实验数据,评定求解得到的像片外方位元素的精度。

四、实验意义及能力培养单像空间后方交会实验有助于学生掌握摄影测量基本原理,了解单像空间后方交会的计算过程,提高动手实践能力。

通过实验,学生可以深入理解线性代数和微分学在摄影测量中的应用,为后续学习提供更扎实的基础。

此外,实验还可以培养学生的解决问题的能力和综合运用所学知识的能力,为未来从事相关领域工作打下坚实基础。

综上所述,单像空间后方交会是一种重要的摄影测量方法,通过程序设计实现对影像的定位和测量。

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

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

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 double[4, 5];for (i = 0; i < 4; i++){for (j = 0; j < 5; j++){if (j < 3){Console.Write("请输入第{0}个点的第{1}个地面坐标:", i + 1, j + 1);zuobiao[i, j] =double.Parse(Console.ReadLine());}else{Console.Write("请输入第{0}个点的第{1}个像点坐标:", i + 1, j - 2);zuobiao[i, j] =double.Parse(Console.ReadLine());}} Console.WriteLine();}//归算像点坐标for (i = 0; i < 4; i++){for (j = 3; j < 5; j++){if (j == 3)zuobiao[i, j] = zuobiao[i, j] - x0;elsezuobiao[i, j] = zuobiao[i, j] - y0;}}//计算和确定初值double zs0 = m * f, xs0 = 0, ys0 = 0;for (i = 0; i < 4; i++){xs0 = xs0 + zuobiao[i, 0];ys0 = ys0 + zuobiao[i, 1];}xs0 = xs0 / 4;ys0 = ys0 / 4;//逐点计算误差方程系数double[,] xishu = new double[8, 6];for (i = 0; i < 8; i += 2){double x, y;x = zuobiao[i / 2, 3]; y = zuobiao[i / 2, 4];xishu[i, 0] = xishu[i + 1, 1] = -1 / m; xishu[i, 1] = xishu[i + 1, 0] = 0; xishu[i, 2] = -x / (m * f); xishu[i, 3] = -f * (1 + x * x / (f * f));xishu[i, 4] = xishu[i + 1, 3] = -x * y / f; xishu[i, 5] = y; xishu[i + 1, 2] = -y / (m * f); xishu[i + 1, 4] = -f * (1 + y * y / (f * f)); xishu[i + 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 double[3, 3];double[,] jinsi = new double[4, 2];double[] chazhi = new double[8];double[] jieguo = new double[6];double[,] zhong = matrixChe(dReturn,matrixTrans(xishu));do{ //计算旋转矩阵rr[0, 0] = Math.Cos(phi0) * Math.Cos(kappa0) - Math.Sin(phi0) * Math.Sin(omega0) * Math.Sin(kappa0);r[0, 1] = -Math.Cos(phi0) * Math.Sin(kappa0) - Math.Sin(phi0) * Math.Sin(omega0) * Math.Cos(kappa0);r[0, 2] = -Math.Sin(phi0) * Math.Cos(omega0);r[1, 0] = Math.Cos(omega0) * Math.Sin(kappa0);r[1, 1] = Math.Cos(omega0) * Math.Cos(kappa0);r[1, 2] = -Math.Sin(omega0);r[2, 0] = Math.Sin(phi0) * Math.Cos(kappa0) + Math.Cos(phi0) * Math.Sin(omega0) * Math.Sin(kappa0);r[2, 1] = -Math.Sin(phi0) * Math.Sin(kappa0) + Math.Cos(phi0) * Math.Sin(omega0) * Math.Cos(kappa0);r[2, 2] = Math.Cos(phi0) * Math.Cos(omega0);//计算x,y的近似值for (i = 0; i < 4; i++){jinsi[i, 0] = -f * (r[0, 0] * (zuobiao[i, 0] - xs0) + r[1, 0] * (zuobiao[i, 1] - ys0) + r[2, 0] * (zuobiao[i, 2] - zs0)) / (r[0, 2] * (zuobiao[i, 0] - xs0) + r[1, 2] * (zuobiao[i, 1] - ys0) + r[2, 2] * (zuobiao[i, 2] - zs0));jinsi[i, 1] = -f * (r[0, 1] * (zuobiao[i, 0] - xs0) + r[1, 1] * (zuobiao[i, 1] - ys0) + r[2, 1] * (zuobiao[i, 2] - zs0)) / (r[0, 2] * (zuobiao[i, 0] - xs0) + r[1, 2] * (zuobiao[i, 1] - ys0) + r[2, 2] * (zuobiao[i, 2] - zs0));}for (i = 0; i < 8; i += 2){chazhi[i] = zuobiao[i / 2, 3] - jinsi[i / 2, 0];chazhi[i + 1] = zuobiao[i / 2, 4] - jinsi[i / 2, 1];}for (i = 0; i < zhong.GetLength(0); i++){double k = 0;for (j = 0; j < zhong.GetLength(1); j++){k = k + zhong[i, j] * chazhi[j];}jieguo[i] = k;}//求新的近似值xs0 += jieguo[0]; ys0 += jieguo[1]; zs0 += jieguo[2];phi0 += jieguo[3]; omega0 += jieguo[4]; kappa0 += jieguo[5];q++;if (q > 1000)break;} while ((Math.Abs(jieguo[0]) > 0.020 ||Math.Abs(jieguo[1]) > 0.020) || Math.Abs(jieguo[2]) > 0.020);Console.WriteLine("共进行了{0}次运算", q);Console.WriteLine("旋转矩阵为");matrixOut(r);for (i = 0; i < jieguo.GetLength(0); i++){Console.Write("第{0}个外方位元素为:{1}", i + 1, jieguo[i]);}}//矩阵转置public static double[,] matrixTrans(double[,] X){double[,] A = X;double[,] C = new double[A.GetLength(1),A.GetLength(0)];for (int i = 0; i < A.GetLength(1); i++)for (int j = 0; j < A.GetLength(0); j++){C[i, j] = A[j, 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}", C[i, 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 double[C.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 + C[i, j] * D[j, n];}E[i, n] = m;}}return E;}//计算行列式的值public static double MatrixValue(double[,] MatrixList, int Level){double[,] dMatrix = new double[Level, Level];for (int i = 0; i < Level; i++)for (int j = 0; j < Level; j++)dMatrix[i, j] = MatrixList[i, j];double c, x;int k = 1;for (int i = 0, j = 0; i < Level && j < Level; i++, j++){if (dMatrix[i, j] == 0){int m = i;for (; dMatrix[m, j] == 0; m++) ;if (m == Level)return 0;else{for (int n = j; n < Level; n++){c = dMatrix[i, n];dMatrix[i, n] = dMatrix[m, n];dMatrix[m, n] = c;}k *= (-1);}}for (int s = Level - 1; s > i; s--){x = dMatrix[s, j];for (int t = j; t < Level; t++)dMatrix[s, t] -= dMatrix[i, t] * (x / dMatrix[i, j]);}}double sn = 1;for (int i = 0; i < Level; i++){if (dMatrix[i, i] != 0)sn *= dMatrix[i, i];elsereturn 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 double[Level, 2 * Level];double x, c;for (int i = 0; i < Level; i++){for (int j = 0; j < 2 * Level; j++){if (j < Level)dReverseMatrix[i, j] = dMatrix[i, j];elsedReverseMatrix[i, j] = 0;}dReverseMatrix[i, Level + i] = 1;}for (int i = 0, j = 0; i < Level && j < Level; i++, j++){if (dReverseMatrix[i, j] == 0){int m = i;for (; dMatrix[m, j] == 0; m++) ;if (m == Level)return null;else{for (int n = j; n < 2 * Level; n++)dReverseMatrix[i, n] += dReverseMatrix[m, n];}}x = dReverseMatrix[i, j];if (x != 1){for (int n = j; n < 2 * Level; n++)if (dReverseMatrix[i, n] != 0)dReverseMatrix[i, n] /= x;}for (int s = Level - 1; s > i; s--){x = dReverseMatrix[s, j];for (int t = j; t < 2 * Level; t++)dReverseMatrix[s, t] -= (dReverseMatrix[i, t] * x);}}for (int i = Level - 2; i >= 0; i--){for (int j = i + 1; j < Level; j++)if (dReverseMatrix[i, j] != 0){c = dReverseMatrix[i, j];for (int n = j; n < 2 * Level; n++)dReverseMatrix[i, n] -= (c * dReverseMatrix[j, n]);}}double[,] dReturn = new double[Level, Level];for (int i = 0; i < Level; i++)for (int j = 0; j < Level; j++)dReturn[i, j] = dReverseMatrix[i, j + Level];return dReturn;}}}。

简述单像空间后方交会的程序设计步骤

简述单像空间后方交会的程序设计步骤

简述单像空间后方交会的程序设计步骤
单像空间后方交会是一种用于测量摄影点在三维空间中位置的方法。

以下是简述的程序设计步骤:
1.读取摄影测量数据:首先,从摄影测量设备(如相机)中读取图像和相关的内参数据,包括相机的焦距、像点大小等。

2.图像处理:对读取的图像进行预处理。

可能需要进行去畸变操作,校正图像的畸变。

3.特征提取:从图像中提取关键点或特征点。

这些特征点可以是角点、边缘、斑点等。

提取出的特征点用于后方交会计算。

4.求解相机位姿:使用特征点的像素坐标和已知内参数,通过解非线性方程组的方法,计算相机在三维空间中的位姿(即相机的位置和方向)。

5.求解三维点坐标:对于每个特征点,使用单像模型,将像素坐标投影到相机坐标系中。

然后,通过解线性方程组的方法,计算特征点在三维空间中的坐标。

6.误差检测与优化:计算测量误差,并进行误差检测。

可以使用一些优化算法,如最小二乘法,来优化相机位姿和三维点坐标。

7.输出测量结果:将计算得到的三维点坐标输出,可以是数字格式或者可视化结果。

以上是单像空间后方交会的基本程序设计步骤。

每个步骤可能会有不同的具体实现,根据具体的应用场景和需求进行设计和调整。

(完整word版)单像空间后方交会程序报告

(完整word版)单像空间后方交会程序报告

单像空间后方交会程序报告指导老师:刘老师班级:测绘 101姓名:尚锋学号:19号1、应用程序的主进口部分的代码:using System;using System.Collections.Generic;using System.Linq;using System.Windows.Forms;namespace 单像空间后方交会{static class Program{///<summary>///应用程序的主进口点。

///</summary>[ STAThread]static void Main(){Application .EnableVisualStyles();Application .SetCompatibleTextRenderingDefault( false );Application .Run( new Form1());}}}2、方法解算类(通用)部分的代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 单像空间后方交会{class Tongyong{struct image_point // 一个像点结构,包括像点坐标和地面点坐标{public double x;public double y;public double X;public double Y;public double Z; }private private private private private private private private private private private private private publicdouble f;// 主距double u;//u 为外方向元素,下边 5个同样double w;double k;double Xs;double Ys;double Zs;image_point [] p = new image_point [4];// 四个控制点double [] R = new double [9]; // 旋转矩阵double [] a = new double [8];// 像点坐标近似值double [,] A =new double [8, 6];// 偏差方程式系数double [] L = new double [8];// 偏差方程式常数项int count = 0;// 统计代次数Tongyong( double g, double [] q)// 结构函数,初始化各变量 , 单位 m{f = g;for ( int i = 0; i < 4; i++){int j = i * 5;p[i].x = q[j];p[i].y = q[j + 1];p[i].X = q[j + 2];p[i].Y = q[j + 3];p[i].Z = q[j + 4];}double ave = 0, sum = 0;for ( int i = 0; i < 3; i++)// 求比率尺分母{for ( int j = i + 1; j < 4; j++){sum += Math.Pow(p[i].Y - p[j].Y, 2)) / + Math.Pow(p[i].y - p[j].y, 2));} Math.Sqrt(Math.Pow(p[i].X - p[j].X, 2) + Math.Sqrt( Math.Pow(p[i].x - p[j].x, 2)}ave = sum / 6;u = 0;// 给定外方向元素的初始值w = 0;k = 0;Xs = (p[0].X + p[1].X + p[2].X + p[3].X) / 4; , 角度均设置为0//Xs 为四个控制点 X的均匀值,Ys近似Ys = (p[0].Y + p[1].Y + p[2].Y + p[3].Y) / 4;Zs = (p[0].Z + p[1].Z + p[2].Z + p[3].Z) / 4 + ave * f;}private double sin( double m) // 正弦,为简化而写 , 下同{return Math.Sin(m);}private double cos( double m){return Math.Cos(m);}private void calcos()// 计算旋转矩阵{R[0] = cos(u) * cos(k) - sin(u) * sin(w) * sin(k);R[1] = -cos(u) * sin(k) - sin(u) * sin(w) * cos(k);R[2] = -sin(u) * cos(w);R[3] = cos(w) * sin(k);R[4] = cos(w) * cos(k);R[5] = -sin(w);R[6] = sin(u) * cos(k) + cos(u) * sin(w) * sin(k);R[7] = cos(u) * sin(w) * cos(k) - sin(u) * sin(k);R[8] = cos(u) * cos(w);}private void calabout() // 像点坐标的近似值{int i;for (i = 0; i < 4; i++){a[2 * i] = -f * (R[0] * (p[i].X - Xs) + R[3] * (p[i].Y-Ys) + R[6] * (p[i].Z - Zs)) / (R[2] * (p[i].X - Xs) + R[5] * (p[i].Y-Ys) + R[8] * (p[i].Z - Zs));a[2* i + 1] = -f * (R[1] * (p[i].X - Xs) + R[4] * (p[i].Y -Ys) + R[7] * (p[i].Z - Zs)) / (R[2] * (p[i].X - Xs) + R[5] * (p[i].Y-Ys) + R[8] * (p[i].Z - Zs));}}private void calxx() // 偏差方程式的系数和常数项{int for i;(i = 0; i < 4; i++) // 系数{double z = R[2] * (p[i].X - Xs) + R[5] * (p[i].Y - Ys) + R[8] * (p[i].Z - Zs);int n = i * 2;A[n, 0] = (R[0] * f + R[2] * p[i].x) / z;A[n, 1] = (R[3] * f + R[5] * p[i].x) / z;A[n, 2] = (R[6] * f + R[8] * p[i].x) / z;A[n, 3] = p[i].y * sin(w) - f * cos(w) * cos(k) - p[i].x/f * (p[i].x * cos(w) * cos(k) - p[i].y * cos(w) * sin(k)); A[n,4] = -f * sin(k) - p[i].x / f * (p[i].x * sin(k) +p[i].y * cos(k));A[n, 5] = p[i].y;A[n + 1, 0] = (R[1] * f + R[2] * p[i].y) / z;A[n + 1, 1] = (R[4] * f + R[5] * p[i].y) / z;A[n + 1, 2] = (R[7] * f + R[8] * p[i].y) / z;A[n + 1, 3] = -p[i].x * sin(w) + f * cos(w) * sin(k) -p[i].x / f * (p[i].x * cos(w) * cos(k) - p[i].y * sin(k) * cos(w));A[n + 1, 4] = -f * cos(k) - p[i].y / f * (p[i].x * sin(k) + p[i].y * cos(k));A[n + 1, 5] = -p[i].x;}for (i = 0; i < 4; i++)// 常数项{L[2 * i] = p[i].x - a[2 * i];L[2 * i + 1] = p[i].y - a[2 * i + 1];}}private double calAdd(){double [,] temp =new double [6, 6];//A 的转置与 A相乘的积double [,] ANew = new double [6, 8];//A 的转置double [] t =new double [6];//A 的转置与 L相乘的积double [] X = new double [6];// 更正数int i, j, n;for (i = 0; i < 8; i++)// 求A的转置 ANew{for (j = 0; j < 6; j++){ANew[j, i] = A[i, j];}}for (i = 0; i < 6; i++)// 求A的转置与 A相乘的积 temp {for (j = 0; j < 6; j++){temp[i, j] = 0;for (n = 0; n < 8; n++){temp[i, j] += ANew[i, n] * A[n, j];}}}MATINV(temp);//temp for (i = 0; i < 6; i++) 的逆,保留在自己矩阵中// 求A的转置与 L的乘积 t{t[i] = 0;for (j = 0; j < 8; j++){t[i] += ANew[i, j] * L[j];}}for (i = 0; i < 6; i++)// 求更正数 X{X[i] = 0;for (j = 0; j < 6; j++){X[i] += temp[i, j] * t[j];}}Xs += X[0];// 外方向元素初始值加上更正数Ys += X[1];Zs += X[2];u += X[3];w += X[4];k += X[5];return maxone(X);// 返回判断条件 , 最大的更正数的值}public void makeSure() // 计算流程控制函数{calcos();calabout();calxx();double VALUE = calAdd();count++;while (VALUE > 0.00001)// 迭代至最大更正数为止{calcos();calabout();calxx();VALUE = calAdd();count++;}}private void MATINV(double [,] c) // 求6阶矩阵的逆{int i, j, h, m;const int n = 6;double l;double [,] q = new double [n, 12];for (i = 0; i < n; i++) // 结构高斯矩阵{for (j = 0; j < n; j++){q[i, j] = c[i, j];}}for (i = 0; i < n; i++) // 单位矩阵{{for (j = n; j < 12; j++)if (i + 6 == j)q[i, j] = 1;elseq[i, j] = 0;}}for (h = 0, m = 0; m < n - 1; m++, h++)// 消去对角线以下的数据{for (i = m + 1; i < n; i++){if(q[i, h] == 0d)continue ;l = q[m, h] / q[i, h];for (j = 0; j < 12; j++){q[i, j] *= l;q[i, j] -= q[m, j];}}}for (h = n - 1, m = n - 1; m > 0; m--, h--)//消去对角线以上的数据{for (i = m - 1; i >= 0; i--){if(q[i, h] == 0d)continue ;l = q[m, h] / q[i, h];for (j = 0; j < 12; j++){q[i, j] *= l;q[i, j] -= q[m, j];}}}for (i = 0; i < n; i++)// 将对角线上数据化为 1{l = 1.0 / q[i, i];for (j = 0; j < 12; j++){q[i, j] *= l;}}for (i = 0; i < n; i++)// 提取逆矩阵{for (j = 0; j < n; j++){c[i, j] = q[i, j + 6];}}}private double maxone(double [] Arr)// 返回六个元素中的最大值{double [] ARR =new double [6];for ( int i = 0; i < 6; i++){ARR[i] = Arr[i];if (ARR[i] < 0d)// 取正ARR[i] = -ARR[i];}Array .Sort(ARR, 0, 6);return ARR[5];}public int COUNT{get{return count;}}public double U {get{return u;}}public double W {get{return w;}}public double K {get{return k;}}public double XS {get{return Xs;}}public double YS {get{return Ys;}}public double ZS {get{return Zs;}}}3、窗体一部分的代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Diagnostics;using System.Data.OleDb;using System.IO;namespace 单像空间后方交会{public partial class Form1 : Form {private private double [] data= double f = 0;new double [20];// 主距// 保留表中的数据public Form1(){InitializeComponent();}private void Form1_Load( object sender, EventArgs e) {//TODO: 这行代码将数据加载到表“ database1DataSet1.data ”中。

后方交会计算计算程序

后方交会计算计算程序

后方交会计算计算程序(总4页)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March距离后方交会计算(CASIO fx–4800P计算器)程序一、程序功能本程序适用于在一个未知点上设测站,观测两到个已知点的距离后,解算该未知坐标。

本程序也可以在CASIO fx-4500P计算器及CASIO fx-4850P计算器上运行。

注意:这种观测两到个已知点的距离后解算该未知坐标的方法,缺少多余观测值,也就缺少检核条件。

二、源程序Lbl 1:{ABCDEFQ}:A"XA":B” YA”:C"XB":D"YB":E"D1":F"D2":Q:J=0:G=Pol(C-A, D-B) :H=J+QCos-1((GG+EE-FF)÷2÷G÷E):X"XP"=A+ECosH◢Y"YP"=B+ESinH◢Goto 1←┘注:CASIO fx-4850改如下Lbl 1:{ABCDEFQ}:A"XA":B” YA”:C"XB":D"YB":E"D1":F"D2":Q:J=0:G=Pol(C-A, D-B) :H=J+QCos-1((GG+EE-FF)÷2÷G÷E):"XP":X=A+ECosH◢"YP":Y=B+ESinH◢Goto 1←┘三、使用说明1、规定(1) 未知点为P点,已知点分别为A点、B点;(2) P点至A点的距离为D1,P点至B点的距离为D2;(3) 当A、B、P三点逆时针排列时,Q=-1;当A、B、P三点顺时针排列时,Q=1。

常用casio4500施工测量计算程序

常用casio4500施工测量计算程序
调用子程序名称应与子程序名称严格一致。
D-M-S:度·分·秒显示子程序
L1 W<0 W=W+360 Fix 4
L2 lntW +0.01lnt(60 Frac W )+0.006 Frac(60 FracW)◢
2、坐标正算程序
程序:
L1 Fixm :{S ,T}
L2 C=A+ Rec(S,T)◢D=B+W◢
1、坐标反算程序
程序:
L1 Fixm:{C,D}
L2 pol(C-A,D-B)◢
L3 Prog D-M-S
原理:
如下图,已知两点P1、P2的坐标分别为P1(A,B)、P2(C,D),则P1P2间的距离和方位角分别为:
S=
T=arctg[(D-B)/(C-A)]
(C,D)
(A,B)
说明:
起始点(A,B)应预置;
L4 L=(D-B)+(A-C)/tan I
L5 M=(C-E)+(F-D)/tan J
L6 N=(F-D)+(E-C)/ tan J
L7 U=(K+M)/(L+N)
L8 X=C+(K-UL)/(1+U2)◢
L9 Y=D+U(K-UL)/(1+U2)◢
原理:
如下图,已知1、2、3点的坐标分别为(A,B)、(C,D)、(E,F),在未知点PP上设站,测得1、2、3点的方向值分别为O、P、Q,则PP点的坐标为:
程序:
L1 Fixm : {LS }
L2 T=P+KL×180/π/R
L3 Rec(S+R,T) : C=X+V : D= Y+W

fx-4850p型计算器用于两点三维测角后方交会的程序算法

fx-4850p型计算器用于两点三维测角后方交会的程序算法
X = AS C S ( A+ ) c X+ a O OB A
Y = A S S ( A+ ) c Y + a n O B A i
l =I S t n — K t t一 aa U c ^
点仪 器高, 图所 示, 以算例 为题就所涉及 到 如 现 的计算公式罗列如下 , 有关公 式的推导这里就不
4结束语
两点三 维 测 角后 方 交会 法 , 其 野 外作 业 的 就 S + o J1 + = P n( 1 +) : P n —, : P s( 8 Q E s J 8 Q Z t K N c + 0 ) + i + 0 U ~ a A I S + o J ) = Mi J ) U -t - ̄ = R 便 利程度 , : M s( R Y s — , = M n K W + C X c - T + n( Rd H a B Q+ 配以 f一 80 x4 5p型可编程计算器 , 予 赋
f 45p x 80 型计算器用于两点三维测角后方交会 的程序算法 -
f一 8 0 计算器用于两点三维测 角 x 4 5p型 后方交会 的程序算法
云南 省一 九八煤 田地质 勘探 队 吴 少波

要 :本文主要介绍使用 C SO 45p A I - 80
型可编程计算器 , 根据 实用公式 , 运用编程方法 与技巧 , 编写出两点三维测角后方交会的应用计 算程序。从而摆脱手工计算带来 的繁琐 、 易错等 诸多不利 因素,使其计算过程变得简捷 明快 , 只 需输入必要数据 , 就能方便快捷获得三维坐标计
流。
S = - +4("4 c ] 2 i [b ) b- a ) / a
I 两点 三维测 角后 方交会
两点 三 维 测 角后 方 交会 法 :就是 在 C点 设 站 , 测 两 已知 点 A、 观 B方 向 的 竖 直 角 U、 同 时 V,

后方交会

后方交会

01 图上定位
目录
02 测绘
03 危险圆
04 精度
05 放样方法应用
图上定位
如果目的是在一张二维地图上大致确定自己的横纵位置(不考虑误差问题),按照如下步骤: 第一步:标定地图真北。 第二步:选取图上两个显眼的定位点A,B,并在实地找到此二点。 第三步:用指北针瞄准定位点A,读出指北针方位角。 第四步:在图上用指北针的尺边或三棱尺切准定位点A,作沿着既读方位角的双方向直线 第五步-第六步:对定位点B重复第三第四步 此时图上的交点O就是当前所站位置。测量和绘制两步可能产生各类误差,这些误差造成的线簇 会形成一个任意四边形(如“误差一览”图所示),实际所站位置就在此四边形之中。
测边后方交会放样方法简介
(1)测边后方交会放样方法
郑西客运专线新渭南车站施工放样利用Leica TCA1800型全站仪,测角精度为1″,测距精度为 1ppm+2ppm。LeicaTC系列的全站仪本身自带的程序里就有后方交会(自由设站法)。
具体步骤如下:在任意点P进行仪器整平→选择后方交会程序→输入任意点P点名→输入已知点A信 息(点名、坐标值)→盘左后视已知点A并测距→盘右后视已知点A并测距→输入已知点B信息(点名、 坐标值)→盘左后视已知点B并测距→盘右后视已知点B并测距→设置P点为测站点→测量或放样点 位。
该车站设计采用高架桥结构,在我国为首例。
一般放样方法的局限性
图1侧边后方交会自由设站放样承台示意图
在两级控制(CPⅠ,CPⅡ)建立起来以后,郑西客运专线渭南高架车站桥面系以下的施工测量工作 主要包括:定期进行控制复测,钻孔桩放样,放样承台边线,放样墩身,放样垫石边线,放样现 浇梁中线,调整悬灌模板,变形(沉降)监测等等。一般工程建筑物平面位置的测设方法有:直角 坐标法、极坐标法、角度交会法、距离交会法等。随着科技的发展,测量仪器日益先进,全站仪 在工程建设领域的应用已经十分普及,建筑物平面位置的测设一般多采用全站仪极坐标法进行放 样。但是,为了避免施工过程中对控制点的破坏,更好的保护控制点,线性工程的控制一般沿线 路走向,布设在线路的两侧,导线控制点距离线路中心100m~200m。

空间后方交会程序设计

空间后方交会程序设计

空间后方交会程序设计(MATLAB)与展示一、设计界面本程序模仿的是elen软件的后方交会程序界面,图中有三个表格对象,上面两个存储地面控制点坐标与双向联测坐标,右边的是限差与外方位元素的初始值设定。

点击“计算外方位元素就会计算左右两张相片的外方位元素”,点击“保存结果”能把相应计算结果输出到电脑磁盘(保存为xlsx文件)。

二、主要函数1.计算旋转矩阵的函数Rotationmatrixfunction R=Rotationmatrix(phi,omega,kappa)%Rotationmatrix(phi,omega,kappa)%phi,omega,kappa外方位三个角元素matrix(1)= cos(phi)*cos(kappa)-sin(phi)*sin(omega)*sin(kappa);%a1matrix(2)= -cos(phi)*sin(kappa)-sin(phi)*sin(omega)*cos(kappa);%a2matrix(3)= -sin(phi)*cos(omega); %a3matrix(4)= cos(omega)*sin(kappa); %b1matrix(5)= cos(omega)*cos(kappa); %b2matrix(6)= -sin(omega); %b3matrix(7)= sin(phi)*cos(kappa)+cos(phi)*sin(omega)*sin(kappa);%c1matrix(8)= -sin(phi)*sin(kappa)+cos(phi)*sin(omega)*cos(kappa);%c2matrix(9)= cos(phi)*cos(omega); %c3R=[matrix(1),matrix(2),matrix(3);matrix(4),matrix(5),matrix(6);matrix(7),matrix(8),matrix(9)];2.计算外方位元素的函数exterior_elementsFunctionelements=exterior_elements(DMdata,XDdata,choose,f,Xs0,Ys0,Zs0,phi,omega,kappa,xia neps,jiaoeps)%DMdata为控制点坐标%XDdata为双向量测坐标%choose为计算左片还是右片,1是左片,2是右片;%f为焦距%Xs0,Ys0,Zs0,phi,omega,kappa为外方位元素的初始值%xianeps,jiaoeps为先元素限差,角元素限差%%coder.inline('never')count=0;%计数循环了多少次?X=DMdata.X;Y=DMdata.Y;Z=DMdata.Z;XX=ones(6,1);%%%计算外方位元素while(abs(XX(1))>xianeps||abs(XX(2))>xianeps||abs(XX(3))>xianeps||abs(XX(4))>jiaoeps||abs(X X(5))>jiaoeps||abs(XX(6))>jiaoeps)%%%计算旋转矩阵与近似坐标值R=Rotationmatrix(phi,omega,kappa);fori=1:length(DMdata.X)a(1,i)=R(1,1);%a1a(2,i)=R(1,2);%a2a(3,i)=R(1,3); %a3b(1,i)=R(2,1);%b1b(2,i)=R(2,2); %b2b(3,i)=R(2,3);%b3c(1,i)=R(3,1);%c1c(2,i)=R(3,2);%c2c(3,i)=R(3,3);%c3%%%计算x,y的近似值x_js(i)=-f*((a(1,i)*(X(i)-Xs0)+b(1,i)*(Y(i)-Ys0)+c(1,i)*(Z(i)-Zs0))/(a(3,i)*(X(i)-Xs0)+b(3,i)*(Y(i )-Ys0)+c(3,i)*(Z(i)-Zs0)));y_js(i)=-f*((a(2,i)*(X(i)-Xs0)+b(2,i)*(Y(i)-Ys0)+c(2,i)*(Z(i)-Zs0))/(a(3,i)*(X(i)-Xs0)+b(3,i)*(Y(i )-Ys0)+c(3,i)*(Z(i)-Zs0)));%读取x,y的像坐标值%%ID=DMdata.ID(i);temp=find(XDdata.ID==ID); %找到同名点的像点坐标switch choose %选择计算右片还是左片的外方位元素case 1x(i)=XDdata.Lx(temp)/1000;y(i)=XDdata.Ly(temp)/1000;case 2x(i)=XDdata.Rx(temp)/1000;y(i)=XDdata.Ry(temp)/1000;end%%%计算误差方程式的系数与常数项average_Z(i)=a(3,i)*(X(i)-Xs0)+b(3,i)*(Y(i)-Ys0)+c(3,i)*(Z(i)-Zs0);a11(i)=(a(1,i)*f+a(3,i)*x(i))/average_Z(i);a12(i)=(b(1,i)*f+b(3,i)*x(i))/average_Z(i);a13(i)=(c(1,i)*f+c(3,i)*x(i))/average_Z(i);a21(i)=(a(2,i)*f+a(3,i)*y(i))/average_Z(i);a22(i)=(b(2,i)*f+b(3,i)*y(i))/average_Z(i);a23(i)=(c(2,i)*f+c(3,i)*y(i))/average_Z(i);a14(i)=-f*(1+(x(i)^2/f^2));a15(i)=-x(i)*y(i)/f;a16(i)=y(i);a24(i)=-x(i)*y(i)/f;a25(i)=-f*(1+(y(i)^2/f^2));a26(i)=-x(i);lx(i)=x(i)-x_js(i);ly(i)=y(i)-y_js(i);endA=[];L=[];%确定误差方程系数fori=1:length(DMdata.X)A=[A;[a11(i),a12(i),a13(i),a14(i),a15(i),a16(i);a21(i),a22(i),a23(i),a24(i),a25(i),a26(i)]];L=[L;[lx(i);ly(i)]];endXX=inv(A'*A)*A'*L;Xs0=Xs0+XX(1);Ys0=Ys0+XX(2);Zs0=Zs0+XX(3);phi=phi+XX(4);omega=omega+XX(5);kappa=kappa+XX(6);count=count+1;endelements=[Xs0,Ys0,Zs0,phi,omega,kappa];三、操作过程1.输入有关参数点击“把左片外方位元素初值赋给右片”按钮,就能把左片的初值赋给右片。

后方交会

后方交会

前方交会法:在己知的两个(或两个以上)己知点(A,B)上架站通过测量α角和β角,计算待测点(P)坐标的方法。

如下图所示,红色字母代表的站点为架站点(A,B):后方交会法:在待测点(P)上架站,通过使用三个己知点(A,B,C)及α角和β角计算待测点(P)坐标的方法。

如下图所示,红色字母代表的站点为架站点(P):一、引言在工程测量中,内业资料计算占有很重要的比重,内业资料计算的准确无误与速度直接决定了测量工作是否能够快速、顺利地完成。

而内业资料的计算方法及其所需达到的精度,则又直接取决于外业所用仪器及具体的放样目标和内业计算所用到的办公软件和计算方法。

计算机辅助设计(Computer Aid Design 简写CAD,常称AutoCAD)是20世纪80年代初发展起来的一门新兴技术型应用软件。

如今在各个领域均得到了普遍的应用。

它大大提高了工程技术人员的工作效率。

AutoCAD配合AutoLisp语言,还可以编制一些常用的计算程序,得到计算结果。

AutoCAD的特性提供了测量内业资料计算的另外一种全新直观明了的图形计算方法。

结合我们现正使用的徕卡全站仪的情况,其可以很方便地进行三维坐标的测量,通过AutoCAD的内业计算,①、在放样的过程中,可以用编程计算器结合全站仪,非常方便地、快速地进行作业;②、运用AutoCAD进行计算结果的验证;③、随着全站仪的推广和普及,极坐标的放样越来越成为众多放样方法中备受测量人员青睐的一种,而坐标计算又是极坐标放样中的重点和难点,由于一般的红线放样,工程放样中的元素多为点、直线(段)、圆(弧)等,故可以充分利用AutoCAD的设定坐标系、绘图和取点的功能,以及结合我们外业所用计算器的功能,从而大大减轻我们外业的工作强度及内业的工作量。

以下以冶勒电站厂区枢纽工程的一些实例来说明三者在工程测量中的应用。

二、测区概况冶勒电站厂址位于石棉县李子坪乡南桠村,距坝址11KM,距石棉县城40KM。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

距离后方交会计算(CASIO fx–4800P计算器)程序
一、程序功能
本程序适用于在一个未知点上设测站,观测两到个已知点的
距离后,解算该未知坐标。

本程序也可以在CASIO fx-4500P计算器及CASIO fx-4850P计算器上运行。

注意:这种观测两到个已知点的距离后解算该未知坐标的方法,缺少多余观测值,也就缺少检核条件。

二、源程序
Lbl 1:{ABCDEFQ}:A"XA":B” YA”:C"XB":D"YB":E"D1":F"D2":Q:J=0:G=Pol(C-A, D-B) :H=J+QCos-1((GG+EE-FF)÷2÷G ÷E):
X"XP"=A+ECosH◢
Y"YP"=B+ESinH◢
Goto 1←┘
注:CASIO fx-4850改如下
Lbl 1:{ABCDEFQ}:A"XA":B” YA”:C"XB":D"YB":E"D1":F"D2":Q:J=0:G=Pol(C-A, D-B) :H=J+QCos-1((GG+EE-FF)÷2÷G÷E):"XP":
X=A+ECosH◢
"YP":Y=B+ESinH◢
Goto 1←┘
三、使用说明
1、规定
(1) 未知点为P点,已知点分别为A点、B点;
(2) P点至A点的距离为D1,P点至B点的距离为D2;
(3) 当A、B、P三点逆时针排列时,Q=-1;当A、B、P三点顺时针排列时,Q=1。

2、输入与显示说明
输入部分:
XA ? 输入A点的X坐标
YA ?输入A点的Y坐标
XB ? 输入B点的X坐标
YB ?输入B点的Y坐标
D1 ?输入P点至A点的距离为D1
D2 ?输入P点至B点的距离为D2
Q?输入A、B、P三点排列方式(逆时针时,Q=-1;顺时针时,Q=1)
显示部分:
XP=×××所求点P的X坐标
YP=×××所求点P的Y坐标
四、算例
已知XA=539.3551,YB=602.9159,Xb=433.0034,YB=1087.4213,D1=380.7996,D2=245.8664,A、B、P三点排列方式为逆时针(Q=-1),求P点的坐标。

输入数据后,经计算得
XP=647.8773101
YP=967.9244825
5800后方交会程序
HFJH(后方交会)
”X1”? A: ”Y1”?B:“X2”?C:“Y2”?D:“S1”? S: “S2”? F: “O”? O: Rec(F,O): POI(S-I,-J) :I→N: -J→E: POI(C-A,D-B):J→T: I÷N→K: “K=”:K▲ K×S→S:Rec(S,T+E): POI(A+I,B+J):Rec(I,J)
注解:
X1、Y1:已知点1坐标
X2、Y2:已知点2坐标
S1:自由设站点到已知点1距离
S2:自由设站点到已知点2距离
O:已知点1至自由设站点至已知点2的夹角
K:衡量交会点的精度,如若显示0.99999···或1.00000···即为交会坐标的精度很高
最后程序显示交会点的坐标
说明:ZXZB和HFJH程序从4800程序变换而来。

经过试运行,这两个改编过来的程序完全正确。

相关文档
最新文档