用C语言写一段代码实现以下功能:程序提示用户依次输入A、B两点的经纬度和海拔,然后程序计算出A, B两点之间的距离单位是千米,计算出B点在A点的什么方位,计算出B点到A点和地面形成的角度,计算完毕后程序循环至开头继续依次输入
时间: 2024-03-12 17:45:24 浏览: 102
以下是一份用C语言实现题目要求的代码:
```c
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846
int main()
{
double latA, lonA, altA, latB, lonB, altB;
double dist, bearing, angle;
while(1)
{
// 输入A点的经纬度和海拔
printf("请输入A点的经度、纬度和海拔(以空格分隔):");
scanf("%lf %lf %lf", &lonA, &latA, &altA);
getchar(); // 消耗换行符
// 输入B点的经纬度和海拔
printf("请输入B点的经度、纬度和海拔(以空格分隔):");
scanf("%lf %lf %lf", &lonB, &latB, &altB);
getchar(); // 消耗换行符
// 计算距离
double dlat = (latB - latA) / 180 * PI;
double dlon = (lonB - lonA) / 180 * PI;
double a = pow(sin(dlat / 2), 2) + cos(latA / 180 * PI) * cos(latB / 180 * PI) * pow(sin(dlon / 2), 2);
dist = 2 * atan2(sqrt(a), sqrt(1 - a)) * 6378.137;
// 计算方位角
double y = sin(dlon) * cos(latB / 180 * PI);
double x = cos(latA / 180 * PI) * sin(latB / 180 * PI) - sin(latA / 180 * PI) * cos(latB / 180 * PI) * cos(dlon);
bearing = atan2(y, x) / PI * 180;
if(bearing < 0) bearing += 360;
// 计算角度
double dalt = altB - altA;
angle = atan2(dalt, dist) / PI * 180;
// 输出结果
printf("A, B两点之间的距离为 %.2f 千米\n", dist);
printf("B点在A点的方位为 %.2f 度\n", bearing);
printf("B点到A点和地面形成的角度为 %.2f 度\n", angle);
}
return 0;
}
```
以上代码使用了 Haversine 公式计算两点间距离,使用了大圆航向公式计算方位角,使用了反正切函数计算角度。
阅读全文