C#实现DLT直接线性变换(Direct Linear Transform)算法

 2023-09-05 阅读 85 评论 0

摘要:C#实现DLT直接线性变换(Direct Linear Transform)算法 参考资料: 1.武大版《工业测量技术与数据处理》P100-P106 2.转载博文——MATLAB实现DLT(Direct Linear Transform)算法 一、编程要求及依据 编写程序主要实现DLT算法,读取数据文件,进行计算,

C#实现DLT直接线性变换(Direct Linear Transform)算法


参考资料:

1.武大版《工业测量技术与数据处理》P100-P106

2.转载博文——MATLAB实现DLT(Direct Linear Transform)算法


一、编程要求及依据

  1. 编写程序主要实现DLT算法,读取数据文件,进行计算,输出计算结果。
  2. 程序算法依据参见: 徐进军教授.《工业测量技术与数据处理》.武汉大学出版社.第100-106页

二、编程环境与语言

编程使用微软的Visual Studio 2015中的WinForm环境下编写,编写语言为C#。

三、DLT计算流程框图

四、程序使用流程

  1. 打开DLT直接线性变换.exe程序,依次导入左像控制点数据文件,右像控制点数据文件和待求点像方数据文件;
  2. 计算左像系数L和像主点x0和y0,计算右像系数L和像主点x0和y0;
  3. 计算待定点物方坐标;
  4. 导出待定点物方坐标;
  5. 导出DLT计算报告。

五、计算结果分析

计算所得待定点物方坐标

点号

X

Y

Z

1707

9.02889589578903

18.59576617145

10.7734065818369

3204

8.56662784077059

16.9495742408647

9.28675243972944

4204

7.74577543635323

16.1927805136872

9.29030273423021

3304

6.96298396130135

16.9611644191554

9.30017945488335

已知待定点物方坐标

点号

X

Y

Z

1707

 9.0332

18.6024

10.7738

3204

 8.5615

 16.9463

 9.2898

4204

 7.7391

 16.1831

  9.2921

3304

 6.9585

 16.9551

 9.3016

因为选取了少量数据,且只选择了两张像片计算系数L,所以精度在毫米范围内。

六、数据文件格式说明

1.leftimage.txt和rightimage.txt文件为选择的像方和物方的同名控制点。其中1004号点对应测试数据里的1D04。

         格式为:点号 x  y  X  Y  Z

2.unknownpoint.txt为待求点已知像方坐标。

         格式为:点号 左片坐标x  y 右片坐标x  y

3.待求点物方坐标.txt文件为计算得到的待求点物方坐标。

          格式为:点号  物方X  Y  Z

4.DLT计算报告.txt文件为计算过程中的中间量。

七、  程序界面

 

八、程序源代码

using System;
using System.IO;
using System.Windows.Forms;namespace DLT直接线性变换
{public partial class Form1 : Form{public Form1(){InitializeComponent();}变量string readleftimagefilename;string readrightimagefilename;string readunknownfilename;string[] line1 = new string[6];//把左像TXT中数据读入数组//leftimagedouble[,] leftimage = new double[6, 6];string[] line2 = new string[6];//把右像TXT中数据读入数组//rightimagedouble[,] rightimage = new double[6, 6];string[] line3 = new string[4];//把未知点TXT中数据读入数组//unknownpointdouble[,] unknownpoint = new double[4, 5];//左像double[,] leftL = new double[12, 1];double[,] leftx0 = new double[1, 1];double[,] lefty0 = new double[1, 1];//右像double[,] rightL = new double[12, 1];double[,] rightx0 = new double[1, 1];double[,] righty0 = new double[1, 1];//待求点private void 打开左像控制点文件ToolStripMenuItem_Click(object sender, EventArgs e){OpenFileDialog openleftfile = new OpenFileDialog();openleftfile.Filter = "文本文件(*.txt)|*.txt";if (openleftfile.ShowDialog() == DialogResult.OK){StreamReader readfile = new StreamReader(openleftfile.FileName);readleftimagefilename = openleftfile.FileName;int m, p;richTextBox1.Text = "点号 x(m) y(m) X(m) Y(m) Z(m)\n";for (m = 0; m < 6; m++){line1[m] = readfile.ReadLine();string[] data10 = line1[m].Split(' ');for (p = 0; p < data10.Length; p++){leftimage[m, p] = Convert.ToDouble(data10[p]);//将数据读入具体变量richTextBox1.Text += leftimage[m, p] + " ";}richTextBox1.Text += "\n";}} }private void 打开右像控制点文件ToolStripMenuItem_Click(object sender, EventArgs e){OpenFileDialog openrightfile = new OpenFileDialog();openrightfile.Filter = "文本文件(*.txt)|*.txt";if (openrightfile.ShowDialog() == DialogResult.OK){StreamReader readfile = new StreamReader(openrightfile.FileName);readrightimagefilename = openrightfile.FileName;int m, p;richTextBox2.Text = "点号 x(m) y(m) X(m) Y(m) Z(m)\n"; for (m = 0; m < 6; m++){line2[m] = readfile.ReadLine();string[] data20 = line2[m].Split(' ');for (p = 0; p < data20.Length; p++){rightimage [m, p] =Convert.ToDouble( data20[p]);richTextBox2.Text += rightimage[m, p] + ",";}richTextBox2.Text += "\n";}}}private void 打开待定点像方坐标ToolStripMenuItem_Click(object sender, EventArgs e){OpenFileDialog openunknownfile = new OpenFileDialog();openunknownfile.Filter = "文本文件(*.txt)|*.txt";if (openunknownfile.ShowDialog() == DialogResult.OK){StreamReader readfile = new StreamReader(openunknownfile.FileName);readunknownfilename = openunknownfile.FileName;int i, j;richTextBox3.Text = "点号 左像x(m) y(m) 右像x(m) y(m)\n"; for (i = 0; i < 4; i++){line3[i] = readfile.ReadLine();string[] data30 = line3[i].Split(' ');for (j = 0; j < data30.Length; j++){unknownpoint[i, j] =Convert.ToDouble( data30[j]);richTextBox3.Text += unknownpoint[i, j] + " "; }richTextBox3.Text += "\n";} } }private void groupBox2_Enter(object sender, EventArgs e){}private void 计算左像系数L与畸变系数ToolStripMenuItem_Click(object sender, EventArgs e){//功能:计算L系数的近似值和精确值//计算L系数近似值double[,] X = new double[12, 11];double[,] X0 = new double[11, 11];double[,] B = new double[12, 1];double[,] L = new double[12, 1];double[,] x0 = new double[1, 1];double[,] y0 = new double[1, 1];int i, j;for (i = 0; i < 6; i++){X[2 * i, 0] = leftimage[i, 3];X[2 * i, 1] = leftimage[i, 4];X[2 * i, 2] = leftimage[i, 5];X[2 * i, 3] = 1;X[2 * i + 1, 0] = 0;X[2 * i + 1, 1] = 0;X[2 * i + 1, 2] = 0;X[2 * i + 1, 3] = 0;X[2 * i, 4] = 0;X[2 * i, 5] = 0;X[2 * i, 6] = 0;X[2 * i, 7] = 0;X[2 * i + 1, 0] = leftimage[i, 3];X[2 * i + 1, 1] = leftimage[i, 4];X[2 * i + 1, 2] = leftimage[i, 5];X[2 * i + 1, 7] = 1;X[2 * i, 8] = leftimage[i, 1] * leftimage[i, 3];X[2 * i, 9] = leftimage[i, 1] * leftimage[i, 4];X[2 * i, 10] = leftimage[i, 1] * leftimage[i, 5];X[2 * i + 1, 8] = leftimage[i, 2] * leftimage[i, 3];X[2 * i + 1, 9] = leftimage[i, 2] * leftimage[i, 4];X[2 * i + 1, 10] = leftimage[i, 2] * leftimage[i, 5];B[2 * i, 0] = leftimage[i, 1];B[2 * i + 1, 0] = leftimage[i, 2];}for (i = 0; i < 12; i++){B[i, 0] = -B[i, 0];}for (i = 0; i < 11; i++){for (j = 0; j < 11; j++){X0[i, j] = X[i, j];}}X0 = Matrix.Athwart(X0);L = Matrix.MultiplyMatrix(X0, B);//计算像主点近似值x0[0, 0] = -(L[0, 0] * L[8, 0] + L[1, 0] * L[9, 0] + L[2, 0] * L[10, 0])/ (L[8, 0] * L[8, 0] + L[9, 0] * L[9, 0] + L[10, 0] * L[10, 0]);y0[0, 0] = -(L[4, 0] * L[8, 0] + L[5, 0] * L[9, 0] + L[6, 0] * L[10, 0])/ (L[8, 0] * L[8, 0] + L[9, 0] * L[9, 0] + L[10, 0] * L[10, 0]);//计算L系数精确值double[,] M = new double[12, 12];double[,] W = new double[12, 1];double[] A = new double[6];double[] r2 = new double[6];//r的平方 int n = 0;//迭代计算do{for (i = 0; i < 6; i++){A[i] = L[8, 0] * leftimage[i, 3] + L[9, 0] * leftimage[i, 4] + L[10, 0] * leftimage[i, 5] + 1;M[2 * i, 0] = leftimage[i, 3] / A[i];M[2 * i, 1] = leftimage[i, 4] / A[i];M[2 * i, 2] = leftimage[i, 5] / A[i];M[2 * i, 3] = 1 / A[i];M[2 * i, 4] = 0;M[2 * i, 5] = 0;M[2 * i, 6] = 0;M[2 * i, 7] = 0;M[2 * i, 8] = leftimage[i, 1] * leftimage[i, 3] / A[i];M[2 * i, 9] = leftimage[i, 1] * leftimage[i, 4] / A[i];M[2 * i, 10] = leftimage[i, 1] * leftimage[i, 5] / A[i];M[2 * i + 1, 0] = 0;M[2 * i + 1, 1] = 0;M[2 * i + 1, 2] = 0;M[2 * i + 1, 3] = 0;M[2 * i + 1, 4] = leftimage[i, 3] / A[i];M[2 * i + 1, 5] = leftimage[i, 4] / A[i];M[2 * i + 1, 6] = leftimage[i, 5] / A[i];M[2 * i + 1, 7] = 1 / A[i];M[2 * i + 1, 8] = leftimage[i, 2] * leftimage[i, 3] / A[i];M[2 * i + 1, 9] = leftimage[i, 2] * leftimage[i, 4] / A[i];M[2 * i + 1, 10] = leftimage[i, 2] * leftimage[i, 5] / A[i];r2[i] = (leftimage[i, 1] - x0[0, 0]) * (leftimage[i, 1] - x0[0, 0])+ (leftimage[i, 2] - y0[0, 0]) * (leftimage[i, 2] - y0[0, 0]);M[2 * i, 11] = (leftimage[i, 1] - x0[0, 0]) * r2[i];M[2 * i + 1, 11] = (leftimage[i, 2] - y0[0, 0]) * r2[i];W[2 * i, 0] = leftimage[i, 1] / A[i];W[2 * i + 1, 0] = leftimage[i, 2] / A[i];}for(i=0;i<12;i++){for(j=0;j<12;j++){M[i, j] = -M[i, j];}}L = Matrix.MultiplyMatrix(Matrix.Athwart(Matrix.MultiplyMatrix(Matrix.Transpose(M), M)),Matrix.MultiplyMatrix(Matrix.Transpose(M), W));x0[0, 0] = -(L[0, 0] * L[8, 0] + L[1, 0] * L[9, 0] + L[2, 0] * L[10, 0])/ (L[8, 0] * L[8, 0] + L[9, 0] * L[9, 0] + L[10, 0] * L[10, 0]);y0[0, 0] = -(L[4, 0] * L[8, 0] + L[5, 0] * L[9, 0] + L[6, 0] * L[10, 0])/ (L[8, 0] * L[8, 0] + L[9, 0] * L[9, 0] + L[10, 0] * L[10, 0]);n = n + 1; }while (n < 20);richTextBox4.Text += "计算左像L精确值循环次数:" + n + "\n";leftL = L;leftx0 = x0;lefty0 = y0;//输出到文本框中richTextBox4.Text += "左像L系数值:\n";for (i = 0; i < 12; i++){richTextBox4.Text += Convert.ToString(L[i, 0]) + "\n";} richTextBox4.Text += "左像内方位元素:\n";richTextBox4.Text += Convert.ToString(x0[0, 0]) + "\n";richTextBox4.Text += Convert.ToString(y0[0, 0]) + "\n";richTextBox4.Text += "\n";}private void 计算右像系数L与畸变系数ToolStripMenuItem_Click(object sender, EventArgs e){//功能:计算L系数的近似值和精确值//计算L系数近似值double[,] X = new double[12, 11];double[,] X0 = new double[11, 11];double[,] B = new double[12, 1];double[,] L = new double[12, 1];double[,] x0 = new double[1, 1];double[,] y0 = new double[1, 1];int i, j;for (i = 0; i < 6; i++){X[2 * i, 0] = rightimage[i, 3];X[2 * i, 1] = rightimage[i, 4];X[2 * i, 2] = rightimage[i, 5];X[2 * i, 3] = 1;X[2 * i + 1, 0] = 0;X[2 * i + 1, 1] = 0;X[2 * i + 1, 2] = 0;X[2 * i + 1, 3] = 0;X[2 * i, 4] = 0;X[2 * i, 5] = 0;X[2 * i, 6] = 0;X[2 * i, 7] = 0;X[2 * i + 1, 0] = rightimage[i, 3];X[2 * i + 1, 1] = rightimage[i, 4];X[2 * i + 1, 2] = rightimage[i, 5];X[2 * i + 1, 7] = 1;X[2 * i, 8] = rightimage[i, 1] * rightimage[i, 3];X[2 * i, 9] = rightimage[i, 1] * rightimage[i, 4];X[2 * i, 10] = rightimage[i, 1] * rightimage[i, 5];X[2 * i + 1, 8] = rightimage[i, 2] * rightimage[i, 3];X[2 * i + 1, 9] = rightimage[i, 2] * rightimage[i, 4];X[2 * i + 1, 10] = rightimage[i, 2] * rightimage[i, 5];B[2 * i, 0] = rightimage[i, 1];B[2 * i + 1, 0] = rightimage[i, 2];}for (i = 0; i < 12; i++){B[i, 0] = -B[i, 0];}for (i = 0; i < 11; i++){for (j = 0; j < 11; j++){X0[i, j] = X[i, j];}}X0 = Matrix.Athwart(X0);L = Matrix.MultiplyMatrix(X0, B);//计算像主点近似值x0[0, 0] = -(L[0, 0] * L[8, 0] + L[1, 0] * L[9, 0] + L[2, 0] * L[10, 0])/ (L[8, 0] * L[8, 0] + L[9, 0] * L[9, 0] + L[10, 0] * L[10, 0]);y0[0, 0] = -(L[4, 0] * L[8, 0] + L[5, 0] * L[9, 0] + L[6, 0] * L[10, 0])/ (L[8, 0] * L[8, 0] + L[9, 0] * L[9, 0] + L[10, 0] * L[10, 0]);//计算L系数精确值double[,] M = new double[12, 12];double[,] W = new double[12, 1];double[] A = new double[6];double[] r2 = new double[6];//r的平方 int n = 0;//迭代计算do{for (i = 0; i < 6; i++){A[i] = L[8, 0] * rightimage[i, 3] + L[9, 0] * rightimage[i, 4] + L[10, 0] * rightimage[i, 5] + 1;M[2 * i, 0] = rightimage[i, 3] / A[i];M[2 * i, 1] = rightimage[i, 4] / A[i];M[2 * i, 2] = rightimage[i, 5] / A[i];M[2 * i, 3] = 1 / A[i];M[2 * i, 4] = 0;M[2 * i, 5] = 0;M[2 * i, 6] = 0;M[2 * i, 7] = 0;M[2 * i, 8] = rightimage[i, 1] * rightimage[i, 3] / A[i];M[2 * i, 9] = rightimage[i, 1] * rightimage[i, 4] / A[i];M[2 * i, 10] = rightimage[i, 1] * rightimage[i, 5] / A[i];M[2 * i + 1, 0] = 0;M[2 * i + 1, 1] = 0;M[2 * i + 1, 2] = 0;M[2 * i + 1, 3] = 0;M[2 * i + 1, 4] = rightimage[i, 3] / A[i];M[2 * i + 1, 5] = rightimage[i, 4] / A[i];M[2 * i + 1, 6] = rightimage[i, 5] / A[i];M[2 * i + 1, 7] = 1 / A[i];M[2 * i + 1, 8] = rightimage[i, 2] * rightimage[i, 3] / A[i];M[2 * i + 1, 9] = rightimage[i, 2] * rightimage[i, 4] / A[i];M[2 * i + 1, 10] = rightimage[i, 2] * rightimage[i, 5] / A[i];r2[i] = (rightimage[i, 1] - x0[0, 0]) * (rightimage[i, 1] - x0[0, 0])+ (rightimage[i, 2] - y0[0, 0]) * (rightimage[i, 2] - y0[0, 0]);M[2 * i, 11] = (rightimage[i, 1] - x0[0, 0]) * r2[i];M[2 * i + 1, 11] = (rightimage[i, 2] - y0[0, 0]) * r2[i];W[2 * i, 0] = rightimage[i, 1] / A[i];W[2 * i + 1, 0] = rightimage[i, 2] / A[i];}for (i = 0; i < 12; i++){for (j = 0; j < 12; j++){M[i, j] = -M[i, j];}}L = Matrix.MultiplyMatrix(Matrix.Athwart(Matrix.MultiplyMatrix(Matrix.Transpose(M), M)),Matrix.MultiplyMatrix(Matrix.Transpose(M), W));x0[0, 0] = -(L[0, 0] * L[8, 0] + L[1, 0] * L[9, 0] + L[2, 0] * L[10, 0])/ (L[8, 0] * L[8, 0] + L[9, 0] * L[9, 0] + L[10, 0] * L[10, 0]);y0[0, 0] = -(L[4, 0] * L[8, 0] + L[5, 0] * L[9, 0] + L[6, 0] * L[10, 0])/ (L[8, 0] * L[8, 0] + L[9, 0] * L[9, 0] + L[10, 0] * L[10, 0]);n = n + 1;}while (n < 20);richTextBox4.Text += "计算右像L精确值循环次数:" + n + "\n";rightL = L;rightx0 = x0;righty0 = y0;//输出到文本框中richTextBox4.Text += "右像L系数值:\n";for (i = 0; i < 12; i++){richTextBox4.Text += Convert.ToString(L[i, 0]) + "\n";}richTextBox4.Text += "右像内方位元素:\n";richTextBox4.Text += Convert.ToString(x0[0, 0]) + "\n";richTextBox4.Text += Convert.ToString(y0[0, 0]) + "\n";richTextBox4.Text += "\n";}private void 计算待定点物方坐标ToolStripMenuItem_Click(object sender, EventArgs e){//对待求点相片坐标进行畸变改正double[] leftR2 = new double[4];double[] leftxx = new double[4];double[] leftyy = new double[4];double[] rightR2 = new double[4];double[] rightxx = new double[4];double[] rightyy = new double[4];int i, j, k;for(i=0;i<4;i++){leftR2[i] = (unknownpoint[i, 1] - leftx0[0, 0]) * (unknownpoint[i, 1] - leftx0[0, 0])+ (unknownpoint[i, 2] - leftx0[0, 0]) * (unknownpoint[i, 2] - leftx0[0, 0]);leftxx[i] = unknownpoint[i, 1] + (unknownpoint[i, 1] - leftx0[0, 0]) * leftR2[i] * leftL[11, 0];leftyy[i] = unknownpoint[i, 2] + (unknownpoint[i, 2] - lefty0[0, 0]) * leftR2[i] * leftL[11, 0];rightR2[i] = (unknownpoint[i, 3] - rightx0[0, 0]) * (unknownpoint[i, 3] - rightx0[0, 0])+ (unknownpoint[i, 4] - rightx0[0, 0]) * (unknownpoint[i, 4] - rightx0[0, 0]);rightxx[i] = unknownpoint[i, 3] + (unknownpoint[i, 3] - rightx0[0, 0]) * rightR2[i] * rightL[11, 0];rightyy[i] = unknownpoint[i, 4] + (unknownpoint[i, 4] - righty0[0, 0]) * rightR2[i] * rightL[11, 0];}//计算待定点物方坐标近似值double[,] XYZ = new double[4, 3];double[,] singleXYZ = new double[3, 1];double[,] B = new double[3, 3];double[,] C = new double[3, 1];for (i=0;i<4; i++){B[0, 0] = leftL[0, 0] + leftxx[i] * leftL[8, 0];B[0, 1] = leftL[1, 0] + leftxx[i] * leftL[9, 0];B[0, 2] = leftL[2, 0] + leftxx[i] * leftL[10, 0];B[1, 0] = leftL[4, 0] + leftyy[i] * leftL[8, 0];B[1, 1] = leftL[5, 0] + leftyy[i] * leftL[9, 0];B[1, 2] = leftL[6, 0] + leftyy[i] * leftL[10, 0];B[2, 0] = rightL[0, 0] + rightxx[i] * rightL[8, 0];B[2, 1] = rightL[1, 0] + rightxx[i] * rightL[9, 0];B[2, 2] = rightL[2, 0] + rightxx[i] * rightL[10, 0];C[0, 0] = leftL[3, 0] + leftxx[i];C[1, 0] = leftL[7, 0] + leftxx[i];C[2, 0] = rightL[3, 0] + rightxx[i];C[0, 0] = -C[0, 0];C[1, 0] = -C[0, 0];C[2, 0] = -C[0, 0];B = Matrix.Athwart(B);singleXYZ = Matrix.MultiplyMatrix(B, C);for (j = 0; j < 3; j++){XYZ[i, j] = singleXYZ [j,0];} }//计算待定点物方坐标精确值double[,] N = new double[4, 3];double[,] Q = new double[4, 1];double[,] deltaXYZ = new double[1, 3];double[,] newXYZ = new double[1, 3];for (i=0;i<4;i++){j = 0;do{double leftA, rightA;leftA = leftL[8, 0] * XYZ[i, 0] + leftL[9, 0] * XYZ[i, 1] + leftL[10, 0] * XYZ[i, 2] + 1;N[0, 0] = -(leftL[0, 0] + leftxx[i] * leftL[8, 0]) / leftA;N[0, 1] = -(leftL[1, 0] + leftxx[i] * leftL[9, 0]) / leftA;N[0, 2] = -(leftL[2, 0] + leftxx[i] * leftL[10, 0]) / leftA;N[1, 0] = -(leftL[4, 0] + leftyy[i] * leftL[8, 0]) / leftA;N[1, 1] = -(leftL[5, 0] + leftyy[i] * leftL[9, 0]) / leftA;N[1, 2] = -(leftL[6, 0] + leftyy[i] * leftL[10, 0]) / leftA;rightA = rightL[8, 0] * XYZ[i, 0] + rightL[9, 0] * XYZ[i, 1] + rightL[10, 0] * XYZ[i, 2] + 1;N[2, 0] = -(rightL[0, 0] + rightxx[i] * rightL[8, 0]) / rightA;N[2, 1] = -(rightL[1, 0] + rightxx[i] * rightL[9, 0]) / rightA;N[2, 2] = -(rightL[2, 0] + rightxx[i] * rightL[10, 0]) / rightA;N[3, 0] = -(rightL[4, 0] + rightyy[i] * rightL[8, 0]) / rightA;N[3, 1] = -(rightL[5, 0] + rightyy[i] * rightL[9, 0]) / rightA;N[3, 2] = -(rightL[6, 0] + rightyy[i] * rightL[10, 0]) / rightA;Q[0, 0] = (leftL[3, 0] + leftxx[i]) / leftA;Q[1, 0] = (leftL[7, 0] + leftyy[i]) / leftA;Q[2, 0] = (rightL[3, 0] + rightxx[i]) / rightA;Q[3, 0] = (rightL[7, 0] + rightyy[i]) / rightA;newXYZ = Matrix.Transpose(Matrix.MultiplyMatrix(Matrix.Athwart(Matrix.MultiplyMatrix(Matrix.Transpose(N), N)),Matrix.MultiplyMatrix(Matrix.Transpose(N), Q)));for (k = 0; k < 3; k++){deltaXYZ[0, k] = newXYZ[0, k] - XYZ[i, k];XYZ[i, k] = newXYZ[0, k];}j = j + 1;}while (deltaXYZ[0, 0] > 0.000000000001 || deltaXYZ[0, 0] < -0.000000000001);richTextBox4.Text += "计算待求点物方坐标精确值迭代次数:" + j + "\n";}//Coordinate为待定点物方坐标// 格式为:点号 X Y Zdouble[,] Coordinate = new double[4, 4];richTextBox5.Text += "待定点物方坐标:\n";for (i = 0; i < 4; i++){Coordinate[i, 0] = unknownpoint[i, 0];richTextBox5.Text += Convert.ToString(Coordinate[i, 0]) + "\t";for (j = 1; j < 4; j++){Coordinate[i, j] = XYZ[i, j-1];richTextBox5.Text += Convert.ToString(Coordinate[i, j]) + "\t"; }richTextBox5.Text += "\n"; }}private void 导出待定点物方坐标ToolStripMenuItem_Click(object sender, EventArgs e){SaveFileDialog savefile = new SaveFileDialog();savefile.Filter = "文本文件(*.txt)|*.txt";savefile.FileName = "待定点物方坐标.txt";if (savefile.ShowDialog() == DialogResult.OK){richTextBox5.SaveFile(savefile.FileName, RichTextBoxStreamType.PlainText);}MessageBox.Show("文件保存成功!");}private void 导出计算报告ToolStripMenuItem_Click(object sender, EventArgs e){SaveFileDialog savefile = new SaveFileDialog();savefile.Filter = "文本文件(*.txt)|*.txt";savefile.FileName = "DLT计算报告.txt";if (savefile.ShowDialog() == DialogResult.OK){richTextBox4.SaveFile(savefile.FileName, RichTextBoxStreamType.PlainText);}MessageBox.Show("文件保存成功!");}}
}

 

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/712.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息