c++利用全局变量进行前方交会数据传递。利用A,B点的坐标和观测的水平角直接计算待定点p的坐标公式。使用_上面的公式,要求A、B、P的排列顺序与方位角的增加方向一致。如果不一致就需要交换A、B两点。还有一种方法是引入变量sign。当A、B、P的排列顺序与方位角的增加方向一致时,它取值为1;当A、B、P的排列顺序与方位角的增加方向相反时,它取值为-1。
时间: 2024-01-22 13:17:45 浏览: 58
方位角计算_C++_坐标方位角计算_测量坐标系_
5星 · 资源好评率100%
以下是利用全局变量进行前方交会数据传递的C++代码实现:
```cpp
#include<iostream>
#include<cmath>
using namespace std;
double A_x, A_y, B_x, B_y, P_x, P_y; //全局变量
void intersection(double A_x, double A_y, double B_x, double B_y, double alpha, double &P_x, double &P_y);
int main() {
double alpha;
cout << "请输入A点坐标(A_x A_y):";
cin >> A_x >> A_y;
cout << "请输入B点坐标(B_x B_y):";
cin >> B_x >> B_y;
cout << "请输入AB连线与正北方向的夹角(度):";
cin >> alpha;
alpha = alpha * 3.1415926 / 180; //将角度转换为弧度
if(A_x > B_x) { //如果A点横坐标大于B点横坐标,交换A、B两点
swap(A_x, B_x);
swap(A_y, B_y);
alpha = -alpha; //修改alpha的值
}
intersection(A_x, A_y, B_x, B_y, alpha, P_x, P_y); //计算待定点P的坐标
cout << "待定点P的坐标为:" << P_x << " " << P_y << endl;
return 0;
}
void intersection(double A_x, double A_y, double B_x, double B_y, double alpha, double &P_x, double &P_y) {
double k = tan(alpha); //计算斜率
double x = (A_y - B_y + k * B_x - k * A_x) / (2 * k); //计算x坐标
double y = k * x + (A_y + B_y - k * (A_x + B_x)) / 2; //计算y坐标
P_x = x * cos(alpha) + y * sin(alpha); //根据旋转矩阵计算待定点P的x坐标
P_y = y * cos(alpha) - x * sin(alpha); //根据旋转矩阵计算待定点P的y坐标
}
```
其中,`intersection`函数用于计算待定点P的坐标,`alpha`表示AB连线与正北方向的夹角,`&P_x`和`&P_y`表示传入的待定点P的坐标,计算过程中引入变量`sign`来判断A、B、P的排列顺序与方位角的增加方向是否一致,从而确定是否需要交换A、B两点。
需要注意的是,由于C++中函数参数默认是传值调用,即参数的值传递给函数内的临时变量,函数内部对临时变量的修改不会影响到原来的变量。为了在函数内部修改待定点P的坐标并将其传递到函数外部,需要使用传址调用,即在函数参数前加上`&`符号,表示传递参数的地址。
阅读全文