使用c#语言编写一个windows窗体应用程序,包括简单的程序界面,能够实现测角交会定点计算,包括: 前方交会 、 后方交会 、 侧方交会 、 距离交会
时间: 2024-01-24 10:18:21 浏览: 22
以下是一个简单的测角交会定点计算的Windows窗体应用程序示例,使用C#语言编写。程序界面包括四个选项卡,分别对应前方交会、后方交会、侧方交会和距离交会。用户可以输入所需的测量数据和控制点坐标,程序将计算并输出结果。
```csharp
using System;
using System.Windows.Forms;
namespace AngleIntersection
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void FrontIntersectionButton_Click(object sender, EventArgs e)
{
double angle1 = double.Parse(Angle1TextBox.Text);
double angle2 = double.Parse(Angle2TextBox.Text);
double distance = double.Parse(DistanceTextBox.Text);
double controlX = double.Parse(ControlXTextBox.Text);
double controlY = double.Parse(ControlYTextBox.Text);
double radian1 = angle1 * Math.PI / 180.0;
double radian2 = angle2 * Math.PI / 180.0;
double x = controlX + distance * Math.Sin(radian1) / Math.Sin(radian1 + radian2);
double y = controlY + distance * Math.Sin(radian2) / Math.Sin(radian1 + radian2);
ResultTextBox.Text = "交点坐标:(" + x.ToString("F3") + ", " + y.ToString("F3") + ")";
}
private void BackIntersectionButton_Click(object sender, EventArgs e)
{
double angle1 = double.Parse(Angle1TextBox.Text);
double angle2 = double.Parse(Angle2TextBox.Text);
double distance = double.Parse(DistanceTextBox.Text);
double controlX = double.Parse(ControlXTextBox.Text);
double controlY = double.Parse(ControlYTextBox.Text);
double radian1 = angle1 * Math.PI / 180.0;
double radian2 = angle2 * Math.PI / 180.0;
double x = controlX - distance * Math.Sin(radian1) / Math.Sin(radian1 + radian2);
double y = controlY - distance * Math.Sin(radian2) / Math.Sin(radian1 + radian2);
ResultTextBox.Text = "交点坐标:(" + x.ToString("F3") + ", " + y.ToString("F3") + ")";
}
private void SideIntersectionButton_Click(object sender, EventArgs e)
{
double angle1 = double.Parse(Angle1TextBox.Text);
double angle2 = double.Parse(Angle2TextBox.Text);
double distance = double.Parse(DistanceTextBox.Text);
double controlX = double.Parse(ControlXTextBox.Text);
double controlY = double.Parse(ControlYTextBox.Text);
double radian1 = angle1 * Math.PI / 180.0;
double radian2 = angle2 * Math.PI / 180.0;
double x = controlX + distance * Math.Cos(radian1) + distance * Math.Sin(radian2) * Math.Tan(Math.PI / 2 - radian1 - radian2);
double y = controlY + distance * Math.Sin(radian1) + distance * Math.Cos(radian2) * Math.Tan(Math.PI / 2 - radian1 - radian2);
ResultTextBox.Text = "交点坐标:(" + x.ToString("F3") + ", " + y.ToString("F3") + ")";
}
private void DistanceIntersectionButton_Click(object sender, EventArgs e)
{
double angle1 = double.Parse(Angle1TextBox.Text);
double angle2 = double.Parse(Angle2TextBox.Text);
double controlX1 = double.Parse(ControlX1TextBox.Text);
double controlY1 = double.Parse(ControlY1TextBox.Text);
double controlX2 = double.Parse(ControlX2TextBox.Text);
double controlY2 = double.Parse(ControlY2TextBox.Text);
double radian1 = angle1 * Math.PI / 180.0;
double radian2 = angle2 * Math.PI / 180.0;
double x1 = controlX1 + Distance1TextBox.Value * Math.Sin(radian1);
double y1 = controlY1 + Distance1TextBox.Value * Math.Cos(radian1);
double x2 = controlX2 + Distance2TextBox.Value * Math.Sin(radian2);
double y2 = controlY2 + Distance2TextBox.Value * Math.Cos(radian2);
double deltaX = x2 - x1;
double deltaY = y2 - y1;
double distance = Math.Sqrt(deltaX * deltaX + deltaY * deltaY);
double angle = Math.Atan2(deltaX, deltaY) * 180.0 / Math.PI;
ResultTextBox.Text = "交点坐标:(" + x1.ToString("F3") + ", " + y1.ToString("F3") + ")" + Environment.NewLine
+ "交点距离:" + distance.ToString("F3") + " 米" + Environment.NewLine
+ "交点方位角:" + angle.ToString("F3") + " 度";
}
}
}
```
界面设计如下:
![angle_intersection_form](https://user-images.githubusercontent.com/44708223/126883932-1d94e9d4-78b0-4a80-b6c5-40d3f9b8e7b2.png)
其中,每个选项卡包括以下控件:
- 角度1:角度1的输入框。
- 角度2:角度2的输入框。
- 距离:距离的输入框。
- 控制点坐标X:控制点的X坐标输入框。
- 控制点坐标Y:控制点的Y坐标输入框。
- 计算交点:计算交点的按钮。
- 交点坐标:交点坐标的输出框。
距离交会选项卡还包括以下控件:
- 控制点1坐标X:控制点1的X坐标输入框。
- 控制点1坐标Y:控制点1的Y坐标输入框。
- 控制点2坐标X:控制点2的X坐标输入框。
- 控制点2坐标Y:控制点2的Y坐标输入框。
- 距离1:控制点1到交点的距离输入框。
- 距离2:控制点2到交点的距离输入框。
- 交点距离:交点到控制点1的距离输出框。
- 交点方位角:控制点1到交点的方位角输出框。