单片空间后方交会C#源代码

合集下载

【武汉大学-摄影测量学-单张相片解析】3.5.5单片空间后方交会

【武汉大学-摄影测量学-单张相片解析】3.5.5单片空间后方交会

cos
0
s
in
0 0 1 0 0 0
1 0 0
X
YZ
R 1 R
R1
X
Y
Z
Xs
Ys Zs
0 R1 0
1
0 0 0
1X X s
0 0
Y Z
Ys Zs
武汉大学
摄影测量基础
偏导数-2-2
X
YZ
R 1
0 0
1
0 0 0
1 X
0 0
R
YZ
c1
X s
X)
f Z 2 (a1Z a3 X )
1
X
Z
(a1 f
f
Z
a3 )
1 Z
a1 f
a3 (x
x0 )
武汉大学
摄影测量基础
偏导数-1
x X s
1 Z
a1 f
a3(x x0 )
x Ys
1 Z
b1 f
b3(x x0 )
x Z s
1 Z
c1 f
c3(x x0 )
y X s
1 Z
c2 c3
0 0 0
a1 a1
a2 a3
bc11
a2 b2 c2
a3 b3 c3
X Y Z
0
aa23cc11
a1c2 a1c3
a1c2 a2c1 0
a3c2 a2c3
a1c3 a2c3
0
a3c1 a3c2
X
YZ
0 bb32
b3 0
b1
b2 b1
0
X
武汉大学
摄影测量基础
误差方程的建立
☺ 已知值 x0 , y0 , f , m, X, Y, Z ☺ 观测值 x, y

单像空间后方交会名词解释

单像空间后方交会名词解释

单像空间后方交会名词解释
单像空间后方交会是摄影测量学中的一个重要概念,它是指利用单个影像进行地物测量和定位的方法。

在单像空间后方交会中,通过对单张影像进行分析,可以确定地面上物体的位置和形状。

这个过程涉及到对影像中的特征点进行识别和匹配,然后利用相机内外参数以及影像上的像点坐标来计算地物的三维坐标。

单像空间后方交会的过程包括以下几个步骤,首先是对影像进行预处理,包括去畸变、影像配准等操作;然后是特征点的提取和匹配,这一步是通过计算机视觉算法来实现的,可以利用角点、边缘等特征来进行匹配;接下来是相机内外参数的标定,这一步是为了将像素坐标转换为实际世界坐标而进行的;最后是利用已知的相机参数和像点坐标来计算地物的三维坐标。

单像空间后方交会在航空摄影、遥感影像解译和地图制图等领域有着广泛的应用。

它可以通过对单张影像的处理,实现对地物的测量和定位,为地理信息系统和地图制图提供了重要的数据基础。

同时,随着计算机视觉和图像处理技术的不断发展,单像空间后方交会的精度和效率也在不断提高,为各种应用领域提供了更加可靠和精确的地物信息。

空间后方交会程序设计

空间后方交会程序设计

单片空间后方交会程序设计专业:测绘工程班级:测绘101姓名:张雯学号:2010220200512 用C 或VC++语言实现单片后方交汇的计算。

以单幅影像为基础,从该影象所覆盖地面范围内若干控制点的已知地面坐标和相应点的像坐标量测值出发,根据共线条件方程,求解该影象在航空摄影时刻的像片外方位元素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.00018182003 w=0.0021117837 精度为:0.00015959235 k=-0.067576934 精度为:7.2440432e-005 迭代次数:4Press any key to continue。

第五讲 单片空间后方交会

第五讲 单片空间后方交会

x12 − f (1 + 2 ) f xy − 1 1 f
2 x2 − f (1 + 2 ) f

x1 y1 f
y12 − f (1 + 2 ) f − x2 y2 f
x y − 2 2 f
2 x3 − f (1 + 2 ) f
2 y2 − f (1 + 2 ) f

x3 y3 f
xy − 3 3 f
Y B
A
C X
利用航摄像片上三个以上像点坐标和对应像 点坐标和对应地面点坐标,计算像片外方位元 素的工作,称为单张像片的空间后方交会。 进行空间后方交会运算,常用的一个基本公 式是前面提到的共线方程。式中的未知数,是 六个外方位元素。由于一个已知点可列出两个 方程式,如有三个不在一条直线上的已知点, 就可列出六个独立的方程式,解求六个外方位 元素。由于共线条件方程的严密关系式是非线 性函数,不便于计算机迭代计算。为此,要由 严密公式推导出一次项近似公式,即变为线性 函数。
(5) 用所取未知数的初始值和控制点的地面坐标,代入共线方程式,逐 ) 用所取未知数的初始值和控制点的地面坐标,代入共线方程式, 点计算像点坐标的近似值 ( x), ( y ) 并计算 lx , l y a ( X − X S ) + b1 (Y − YS ) + c1 ( Z − Z S ) x=−f 1 a3 ( X − X S ) + b3 (Y − YS ) + c3 ( Z − Z S ) a ( X − X S ) + b2 (Y − YS ) + c2 ( Z − Z S ) y=−f 2 a3 ( X − X S ) + b3 (Y − YS ) + c3 ( Z − Z S ) (6) 组成误差方程式。 ) 组成误差方程式。 7) 计算法方程式的系数矩阵与常数项,组成法方程式。 (7) 计算法方程式的系数矩阵与常数项,组成法方程式。 (8) 解算法方程,迭代求得未知数的改正数。 ) 解算法方程,迭代求得未知数的改正数。

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

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

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

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

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

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

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

单张像片的空间后方交会原理

单张像片的空间后方交会原理

单像空间后方交会原理非常简单,稍稍懂一点线性代数和微分学知识就很容易理解。

但它的意义很大,所有的基于视觉技术的定位(测量)都是从它扩展来的,没有它就没有后面的复杂算法的演进,以面向更复杂的场景以及需求。

这块内容一般来说就是在已知地面上若干点的地面坐标以后,反求该相应摄影光束的外参数,当用以作摄影机的标定时,还可借以同时求出摄影的内参数。

具体的说就是一个多元线性模型,根据不同的需求可以基于它进一步构建各种平差模型。

单像空间后方交会实验报告(c++版)

单像空间后方交会实验报告(c++版)单像空间后方交会姓名:学号:时间:目录一、作业任务..................................................... - 4 -二、计算原理..................................................... - 4 -三、算法流程..................................................... - 8 -四、源程序....................................................... - 9 -五、计算结果..................................................... - 9 -六、结果分析..................................................... - 9 -七、心得与体会................................................... - 9 -八、附页......................................................... - 9 -1.c++程序.................................................. - 10 -2.C++程序截图.............................................. - 17 -3.matlb程序 ............................................... - 17 -一、 作业任务已知条件:摄影机主距f=153.24mm ,x0=0,y0=0, 像片比例尺为1:40000,有四对点的像点坐标与相应的地面坐标如下表。

五上、数字摄影测量学单片空间后方交会


总误差方程
法方程
V Ax L
x (AT A) 1 (AT L)
X s Ys V1 A1 l1 Z V2 A2 l2 s V , A , L , x , Vn An ln T T li xi ( xi ) yi ( yi ) , Vi v xi v yi a11 a12 a13 a14 a15 a16 Ai a21 a22 a23 a24 a25 a26
已知点必须多余点, 数据处理方法采用 最小二乘法!
这是所有测量的一个统一的基本原则! 摄影测量也不例外。
二、误差方程与法方程



已知值 x0 , y0 , f ,m, X, Y, Z 观测值 x , y 相应改正数 vx,vy 未知数 Xs, Ys, Zs, , , 泰勒级数展开
四、空间后方交会的精度
求解各未知数的精度可以通过法方程系数矩阵 求逆的方法,解出相应的权倒数 Qii
mi m0 Qii 按下式计算第i未知数的中误差:
式中,m0为单位权中误差,计算公式 为: m [VV ] 0 2n 6 ,其中n为控制点的点数。
空间后方交会用到的已知点越多,空间后方交会 的精度越高,此外空点的分布也空间后方交会计算 的精度。空间后方交会使用的控制点应当避免位于 一个圆柱面上,否则,会出现解不唯一的情况。
偏导数 1
x f X Z 2 ( Z X) X s Z X s X s f 2 ( a1Z a3 X ) Z 1 X (a1 f f a3 ) Z Z 1 (a1 f a3 x) Z
偏导数 2
x f X Z 2 ( Z X) Z

单像空间后方交会


(x)、(y)——函数x、y在展开点(未知数近 似值处)的近似值; ——外方位元素(未知数)的改正数。 dX s ......, dκ
返回目录
第三章 单张航摄像片解析
§3-7 单像空间后方交会
• • • • • 每次迭代计算过程中,给定未知数(即外 方位元 素)的近似值后,即可计算得到展开式中未知数的 dX s ......, dκ 偏导系数值,从而组成线性方程组解算 。 偏导系数表达示例: X x = − f Z 设
V = ∂y dX + ∂y dY + ∂y dZ + ∂y dφ + ∂y dω + ∂y dκ −[ y − ( y)] •y s s s ∂Xs ∂Ys ∂Zs ∂φ ∂ω ∂κ
返回目录
第三章 单张航摄像片解析
§3-7 单像空间后方交会
• 也可写成(设有n个控制点) + d dφ + e dω + f dκ −l Vx1 = a11dXs + b11dYs + c11dZs 11 11§3-7 单像空间后方交会
• 一、空间后方交会的基本公式 空间后方交会的基本公式 后方交会
x = − f y = − f a1 ( X − X s ) + b (Y − Ys ) + c1 (Z − ZS ) 1 a3 ( X − X s ) + b3 (Y − Ys ) + c3 (Z − Zs ) a2 ( X − X s ) + b2 (Y − Ys ) + c2 (Z − Zs ) a3 ( X − X s ) + b3 (Y − Ys ) + c3 (Z − Zs )
y = − f Y Z

网上搜的摄影测量题目

《摄影测量》课程期末统一考试题(卷)[B]一、名词解释(20分,每个4分)1、单片空间后方交会:在摄影之后,利用一定数量的地面控制点,根据共线方程条件方程式反求像片的外方位元素。

P502、同名核线:同一核面与左、右两像片相交的两条核线称为同名核线。

P723、影像匹配:4、影像的外方位元素:在恢复内方位元素(即恢复了摄影光束)的基础上,确定摄影光束在摄影瞬间的空间位置和姿态的参数,称为外方位元素,一张像片的外方位元素包括六个参数,其中三个是直线元素,用于描述摄影中心的空间坐标值;另外三个是角元素,用于描述像片的空间姿态。

P375、解析相对定向:根据同名光线对对相交这一立体像对对内在的几何关系,通过测量的像点坐标,用解析计算的方法解求相对定向元素,建立于地面相似的立体模型,确认模型点的三维坐标。

P77(相对定向与像片的绝对位置无关,不需要地面控制点)二、填空题(20分,每空1分)1、表示航摄像片的外方位角元素可以采用、和三种转角系统。

2、航摄像片是所覆盖地物的中心投影投影,地形图是所表示内容的正射投影投影。

3、摄影测量加密按数学模型可分为航带法、独立模型法和光束法三种方法。

4、摄影测量中常用的坐标系有像平面坐标系、像空间坐标系、像空间辅助坐标系、摄影测量坐标系、地面摄影测量坐标系和地面测量坐标系。

5、要将地物点在摄影测量坐标系中的模型坐标转换到地面摄影测量坐标系,最少需要个和个地面控制点。

6、摄影测量的发展经历了模拟摄影测量、解析摄影测量和数字摄影测量三个阶段。

三、简答题(30分)1、请说明实现自动相对定向的方法原理和关键技术2、什么是数字高程模型?并说明DEM的几种常用的表示形式及特点。

四、综合题(30分)1、推导摄影中心点、像点与其对应物点三点位于一条直线上的共线条件方程,说明式中各符号的意义,用图示意航摄像片的内、外方位元素,并简要叙述以上方程在摄影测量中的主要用途。

2、简述一种框幅式航空影像制作其核线影像的方法。

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

主方法:private void Cal_Click(object sender, EventArgs e){string[] lines = RichText.Text.Split('\n');long m = lines.Length;m = m - 1;//真实数据行数double[] Coor_x = new double[m];//已知点x坐标double[] Coor_y = new double[m];//已知点x坐标double[] Coor_X = new double[m];//已知点X坐标double[] Coor_Y = new double[m];//已知点Y坐标double[] Coor_Z = new double[m];//已知点Z坐标///赋值for (int i = 0; i < m; i++){string[] FJstring = Regex.Split(lines[i+1], ",");Coor_x[i] = 0.001*(Convert.ToDouble(FJstring[0]));Coor_y[i] = 0.001 *( Convert.ToDouble(FJstring[1]));Coor_X[i] = Convert.ToDouble(FJstring[2]);Coor_Y[i] = Convert.ToDouble(FJstring[3]);Coor_Z[i] = Convert.ToDouble(FJstring[4]);}if (textBox_m.Text == ""){MessageBox.Show("请输入参数!");}if (textBox_m.Text != ""){double M = double.Parse(textBox_m.Text);//比例尺double f = 0.001 * (double.Parse(textBox_f.Text));//焦距double x0 = 0.001 * double.Parse(textBox_x0.Text);//内方位元素x0double y0 = 0.001 * double.Parse(textBox_y0.Text);//内方位元素y0double X0 = 0, Y0 = 0, Z0 = 0;//外方位坐标元素初始值double min = (double.Parse(textBox_k.Text));//焦距double angle1 = 0, angle2 = 0, angle3 = 0;//外方位角元素初始值for (int i = 0; i < m; i++){//累加X0 = Coor_X[i] + X0;Y0 = Coor_Y[i] + Y0;Z0 = Coor_Z[i] + Z0;}X0 = X0 / m;Y0 = Y0 / m;Z0 = Z0 / m + M * f;double[,] A = new double[2 * m, 6];//A,二维:(2 * m)*6double[,] l = new double[2 * m, 1];//l,二维:(2 * m)*1double[,] V = new double[2 * m, 6];//V,二维:(2 * m)*6double[,] XXX = new double[6, 1];//XXX,6*1 所求参数值,即外方位元素改正数///循环解求误差方程,以限差为标准结束循环Matrix ad = new Matrix();Cls_AL ae = new Cls_AL();int num = 0;//记录循环次数for (int i = 0; ; i++){//求A,lae.Cal_AL(X0, Y0, Z0, angle1, angle2, angle3, m, f, x0, y0, Coor_x, Coor_y, Coor_X, Coor_Y, Coor_Z, A, l);//求XXXXXX = ad.Cal_Chengfa(ad.Cal_Chengfa(ad.Cal_Qiuni(ad.Cal_Chengfa(ad.Cal_Zhuanzhi(A), A)), ad.Cal_Zhuanzhi(A)), l);///改正外方位元素X0 = X0 + XXX[0, 0];Y0 = Y0 + XXX[1, 0];Z0 = Z0 + XXX[2, 0];angle1 = angle1 + XXX[3, 0];angle2 = angle2 + XXX[4, 0];angle3 = angle3 + XXX[5, 0];num++;if ((Math.Abs(XXX[3, 0]) < min) && (Math.Abs(XXX[4, 0]) < min) && (Math.Abs(XXX[5, 0]) < min)){ break; }}///精度评定;V = ad.Cal_Jianfa(ad.Cal_Chengfa(A, XXX), l);double[,] c = new double[1, 1];//单位权中误差c = ad.Cal_Chengfa(ad.Cal_Zhuanzhi(V), V);double cc = Math.Sqrt(c[0, 0] / (2 * m - 6));double[,] AA = new double[6, 6];//外方位元素改正数的协因数阵QQ AA = ad.Cal_Qiuni(ad.Cal_Chengfa(ad.Cal_Zhuanzhi(A), A));RichText.Text = ("外方位元素为:" + '\n' + "Xs = " + Convert.ToString(X0) + '\n' + "Ys = " + Convert.ToString(Y0) + '\n' + "Zs = " + Convert.ToString(Z0) + '\n' + "angel_1 = " + Convert.ToString(angle1) + '\n' + "angel_2 = " + Convert.ToString(angle2) + '\n' + "angel_3 = " + Convert.ToString(angle3) + '\n' + "单位权中误差为: " + Convert.ToString(cc) + '\n' + "Xs精度为: " + Convert.ToString(cc * Math.Sqrt(AA[0, 0])) + '\n' + "Ys精度为:" + Convert.ToString(cc * Math.Sqrt(AA[1, 1])) + '\n' + "Zs精度为:" + Convert.ToString(cc * Math.Sqrt(AA[2, 2])) + '\n' + "迭代次数为:" + Convert.ToString(num));}}动态类库:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace dll{/// <summary>/// Matrix类包含三个方法:矩阵乘法,矩阵转置,矩阵求逆/// </summary>public class Matrix{/// <summary>/// 矩阵乘法/// </summary>/// <param name="a"></param>/// <param name="b"></param>/// <returns></returns>public double[,] Cal_Chengfa(double[,] a, double[,] b){//定义一个以a行数为行数,b列数为列数的数组double[,] c = new double[a.GetLength(0), b.GetLength(1)];for (int i = 0; i < c.GetLength(0); i++){for (int j = 0; j < c.GetLength(1); j++)c[i, j] = 0;for (int k = 0; k < a.GetLength(1); k++){c[i, j] += a[i, k] * b[k, j]; //i行j列元素结果}}}return c;}/// <summary>/// 矩阵减法/// </summary>/// <param name="a"></param>/// <param name="b"></param>/// <returns></returns>public double[,] Cal_Jianfa(double[,] a, double[,] b){//定义一个以a行数为行数,b列数为列数的数组int m = a.GetLength(0);int n = a.GetLength(1);double[,] c = new double[m, m];for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){c[i, j] = a[i, j] - b[i, j];}}return c;}/// <summary>/// 矩阵转置/// </summary>/// <param name="a"></param>/// <returns></returns>public double[,] Cal_Zhuanzhi(double[,] a){double[,] b = 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++)b[i, j] = a[j, i];}}return b;}/// <summary>/// 矩阵求逆/// </summary>/// <param name="a"></param>/// <returns></returns>public double[,] Cal_Qiuni(double[,] a){double[,] b = new double[a.GetLength(0), a.GetLength(1)]; int i, j, row, k;double max, temp;//单位矩阵for (i = 0; i < a.GetLength(1); i++){b[i, i] = 1;}for (k = 0; k < a.GetLength(1); k++){max = 0; row = k;//找最大元,其所在行为rowfor (i = k; i < a.GetLength(1); i++){temp = Math.Abs(a[i, k]);if (max < temp){max = temp;row = i;}}//交换k与row行if (row != k){for (j = 0; j < a.GetLength(0); 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;}}//首元化为1for (j = k + 1; j < a.GetLength(0); j++) a[k, j] /= a[k, k];for (j = 0; j < a.GetLength(0); j++) b[k, j] /= a[k, k];a[k, k] = 1;//k列化为0//对afor (j = k + 1; j < a.GetLength(0); j++){for (i = 0; i < k; i++) a[i, j] -= a[i, k] * a[k, j];for (i = k + 1; i < a.GetLength(0); i++) a[i, j] -= a[i, k] * a[k, j];}//对bfor (j = 0; j < a.GetLength(0); j++){for (i = 0; i < k; i++) b[i, j] -= a[i, k] * b[k, j];for (i = k + 1; i < a.GetLength(0); i++) b[i, j] -= a[i, k] * b[k, j];}for (i = 0; i < a.GetLength(0); i++) a[i, k] = 0;a[k, k] = 1;}return b;}}public class Cls_AL{//计算A,L阵public void Cal_AL(double X0, double Y0, double Z0, double angle1, double angle2, double angle3, long m, double f, double x0, double y0, double[] Coor_x, double[] Coor_y, double[] Coor_X, double[] Coor_Y, double[] Coor_Z, double[,] A, double[,] l){//旋转矩阵double a1 = Math.Cos(angle1) * Math.Cos(angle3) - Math.Sin(angle1) * Math.Sin(angle2) * Math.Sin(angle3);double a2 = -Math.Cos(angle1) * Math.Sin(angle3) - Math.Sin(angle1) * Math.Sin(angle2) * Math.Cos(angle3);double a3 = -Math.Sin(angle1) * Math.Cos(angle2);double b1 = Math.Cos(angle2) * Math.Sin(angle3);double b2 = Math.Cos(angle2) * Math.Cos(angle3);double b3 = -Math.Sin(angle2);double c1 = Math.Sin(angle1) * Math.Cos(angle3) + Math.Cos(angle1) * Math.Sin(angle2) * Math.Sin(angle3);double c2 = -Math.Sin(angle1) * Math.Sin(angle3) + Math.Cos(angle1) * Math.Sin(angle2) * Math.Cos(angle3);double c3 = Math.Cos(angle1) * Math.Cos(angle2);///系数double[] a11 = new double[m];double[] a12 = new double[m];double[] a13 = new double[m];double[] a21 = new double[m];double[] a22 = new double[m];double[] a23 = new double[m];double[] a14 = new double[m];double[] a15 = new double[m];double[] a16 = new double[m];double[] a24 = new double[m];double[] a25 = new double[m];double[] a26 = new double[m];for (int i = 0; i < m; i++){double Z = ((a3 * (Coor_X[i] - X0)) + (b3 * (Coor_Y[i] - Y0)) + (c3 * (Coor_Z[i] - Z0)));//a11[i] = ((a1 * f) + (a3 * Coor_x[i])) / Z;a12[i] = ((b1 * f) + (b3 * Coor_x[i])) / Z;a13[i] = ((c1 * f) + (c3 * Coor_x[i])) / Z;a21[i] = ((a2 * f) + (a3 * Coor_y[i])) / Z;a22[i] = ((b2 * f) + (b3 * Coor_y[i])) / Z;a23[i] = ((c2 * f) + (c3 * Coor_y[i])) / Z;a14[i] = Coor_y[i] * Math.Sin(angle2) - Math.Cos(angle2)*((Coor_x[i] / f) * (Coor_x[i] * Math.Cos(angle3) - Coor_y[i]*Math .Sin (angle3))+f*Math .Cos(angle3));a15[i] = -f * Math.Sin(angle3) - Coor_x[i] * (Coor_x[i] * Math.Sin(angle3) + Coor_y[i] * Math.Cos(angle3)) / f;a16[i] = Coor_y[i];a24[i] = -Coor_x[i] * Math.Sin(angle2) - Coor_y[i] * Math.Cos(angle2) * (Coor_x[i] * Math.Cos(angle3) - Coor_y[i] * Math.Sin(angle3) - f * Math.Sin(angle3)) / f;a25[i] = -f * Math.Cos(angle3) - Coor_y[i] * (Coor_x[i] * Math.Sin(angle3) + Coor_y[i] * Math.Cos(angle3)) / f;a26[i] = -Coor_x[i];A[2 * i, 0] = a11[i];A[2 * i, 1] = a12[i];A[2 * i, 2] = a13[i];A[2 * i, 3] = a14[i];A[2 * i, 4] = a15[i];A[2 * i, 5] = a16[i];A[2 * i + 1, 0] = a21[i];A[2 * i + 1, 1] = a22[i];A[2 * i + 1, 2] = a23[i];A[2 * i + 1, 3] = a24[i];A[2 * i + 1, 4] = a25[i];A[2 * i + 1, 5] = a26[i];l[2 * i, 0] = -x0+Coor_x[i] + f * ((a1 * (Coor_X[i] - X0)) + (b1 * (Coor_Y[i] - Y0)) + (c1 * (Coor_Z[i] - Z0))) / Z;l[2 * i + 1, 0] = -y0+Coor_y[i] + f * ((a2 * (Coor_X[i] - X0)) + (b2 * (Coor_Y[i] - Y0)) + (c2 * (Coor_Z[i] - Z0))) / ((a3 * (Coor_X[i] - X0)) + (b3 * (Coor_Y[i] - Y0)) + (c3 * (Coor_Z[i] - Z0)));}}}}测试数据:x,y,z,X,Y,Z-86.15,-68.99,36589.41,25273.32,2195.17-53.40,82.21,37631.08,31324.51,728.69-14.78,-76.63,39100.97,24934.98,2386.5010.46,64.43,40426.54,30319.81,757.31。

相关文档
最新文档