测量人看过来:多种语言编写的测量坐标反算神器附源码(C#/VB)

Posted 刘一哥GIS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测量人看过来:多种语言编写的测量坐标反算神器附源码(C#/VB)相关的知识,希望对你有一定的参考价值。

坐标正算:【小程序】坐标正算神器V1.0(附源程序)

坐标反算一直是困扰测量人的一个问题,坐标反算是指已知两点坐标,反求边长和方位角。本文演示用C#和VB语言实现过程。


一、坐标反算原理

已知两点坐标,反求边长和方位角,称为坐标反算。

1. 原理图

在这里插入图片描述

2. 计算公式

在这里插入图片描述

3. 象限角

注意:上述计算的角是象限角,还应根据方位角与象限角的关系,将象限角转换为方位角。

由坐标纵轴的北端或南端起,顺时针或逆时针至直线间所夹的锐角,并注出象限名称,称为该直线的象限角,用R表示,角值为0°~ 90°

在这里插入图片描述

4. 限角和坐标方位角的关系

在这里插入图片描述
在这里插入图片描述

二、C#语言实现

1. 界面设计

在这里插入图片描述

2. 源代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 坐标反算
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            double XA, YA, XB, YB, R, aAB, DAB, dY, dX;

            XA = double.Parse(textBox1.Text);
            YA = double.Parse(textBox2.Text);

            XB = double.Parse(textBox3.Text);
            YB = double.Parse(textBox4.Text);

            dY = YB - YA; dX = XB - XA;

            R = Math.Atan(Math.Abs(dY) / Math.Abs(dX));
            R = R * 180 / 3.14159265;

            if (dY > 0 && dX > 0)
                aAB = R;
            else if (dY > 0 && dX < 0)
                aAB = 180 - R;
            else if (dY< 0 && dX < 0)
                aAB = 180 + R;
            else
                aAB = 360-R;
            
            textBox5.Text = aAB.ToString();

            DAB = Math.Sqrt(Math.Pow(dY,2)+Math.Pow(dX,2));
            textBox6.Text = DAB.ToString();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}

三、VB语言实现

1. 界面设计

在这里插入图片描述

2. 源代码

计算按钮单击事件:


Private Sub Command1_Click()
    Dim xa, ya, xb, yb, R, aab, dab, dy, dx As Double
    xa = Val(Text1.Text)
    ya = Val(Text2.Text)
    
    xb = Val(Text3.Text)
    yb = Val(Text4.Text)
    
    dy = yb - ya
    dx = xb - xa
    
    Text7.Text = dy
    Text8.Text = dx
    
    R = Atn(Abs(dy) / Abs(dx))
    
    R = R * 180 / 3.14159265
    
    If dy > 0 And dx > 0 Then aab = R
    ElseIf dy > 0 And dx < 0 Then aab = 180 - R
    ElseIf dy < 0 And dx < 0 Then aab = 180 + R
    ElseIf dy < 0 And dx > 0 Then aab = 360 - R
    
    Text5.Text = aab
    
    dab = Sqr(dx ^ 2 + dy ^ 2)
    
    Text6.Text = dab
End Sub

退出按钮单击事件:

Private Sub Command2_Click()
	Unload Me
End Sub

以上是关于测量人看过来:多种语言编写的测量坐标反算神器附源码(C#/VB)的主要内容,如果未能解决你的问题,请参考以下文章

保姆级C语言版高斯坐标正算反算倾情奉献!

保姆级C语言版高斯坐标正算反算倾情奉献!

测绘程序设计坐标反算神器V1.0(附C/C#/VB源程序)

测绘程序设计坐标反算神器V1.0(附C/C#/VB源程序)

《工程测量大师》的评价

三坐标测量究竟有多高的精度