首页 > 编程语言 >C++ | 計算兩點的角度

C++ | 計算兩點的角度

时间:2023-03-10 22:32:39浏览次数:45  
标签:兩點 int double 計算 C++ brng lat lng getangle1


#include <math.h>
#include <iostream>
#include <stdio.h>
#define PI 3.141592654
#define EARTH_RADIUS 6378.137 //地球近似半徑
using namespace std;
double get_distance(double lat_b, double lng_b, double lat_a, double lng_a);//lat_b, lng_b為測速點經緯度,lat_a, lng_a為汽車坐標
int getangle1(double lat_b, double lng_b, double lat_a, double lng_a);
int main(int argc, char *argv[])
{
int anglee1 = getangle1(23.384720, 120.354828, 23.379593, 120.353493);//南部16度
cout << anglee1 << endl;
int anglee2 = getangle1(23.00083, 120.220245, 23.001230, 120.215630);//南部99度
cout << anglee2<< endl;
int anglee3 = getangle1(22.86454, 120.2860778, 22.868610, 120.284485);//南部159度
cout << anglee3 << endl;
int anglee4 = getangle1(22.67667, 120.3233194, 22.675587, 120.324677);//南部293度
cout << anglee4 << endl;
int anglee5 = getangle1(25.0284, 121.251423, 25.027662, 121.262108);//北部272度
cout << anglee5 << endl;
int anglee6 = getangle1(24.27358, 120.6931783, 24.2773881, 120.6935169);//中部187度
cout << anglee6 << endl;
int anglee7= getangle1(24.27198, 121.741965, 24.2688548, 121.7408256);//東部19度
cout << anglee7 << endl;
int anglee8 = getangle1(22.769, 121.120615, 22.7711695, 121.1114311);//東部103度
cout << anglee8 << endl;
int anglee9 = getangle1(24.45889, 118.43162, 24.4547165, 118.427789);//金門41度
cout << anglee9 << endl;
int anglee10 = getangle1(23.66487, 119.6, 23.6615943, 119.6000936);// 澎湖356度
cout << anglee10 << endl;
return 0;
}

//兩點的距離(緯度,經度)
double get_distance(double lat_b, double lng_b, double lat_a, double lng_a)
{
double radlat_b = lat_b * PI / 180.0;
double radlat_a = lat_a * PI / 180.0;
double a = radlat_b - radlat_a;//緯度之差
double b = lng_b * PI / 180.0 - lng_a* PI / 180.0; //經度之差
double dst = 2 * asin((sqrt(pow(sin(a / 2), 2) + cos(radlat_b) * cos(radlat_a) * pow(sin(b / 2), 2))));
dst = dst * EARTH_RADIUS;
dst = round(dst * 10000) / 10000;
return dst;
}

//計算兩點的角度
int getangle1(double lat_b, double lng_b, double lat_a, double lng_a)
{
double x = lat_b - lat_a;
double y = lng_b - lng_a;
int brng=-1;
if (y == 0 && x > 0) brng = 0;
if (y == 0 && x < 0) brng = 180;
if(x ==0 && y > 0) brng = 90;
if(x == 0 && y < 0) brng = 270;
if (brng == -1)
{
double dislat = get_distance(lat_b, lng_a, lat_a, lng_a);
double dislng = get_distance(lat_a, lng_b, lat_a, lng_a);
if (x > 0 && y > 0) brng = atan2(dislng, dislat) / PI * 180;
if (x < 0 && y > 0) brng = atan2(dislat, dislng) / PI * 180+90;
if (x < 0 && y < 0) brng = atan2(dislng, dislat) / PI * 180 + 180;
if (x > 0 && y < 0) brng = atan2(dislat, dislng) / PI * 180 + 270;
}
return brng;
}

标签:兩點,int,double,計算,C++,brng,lat,lng,getangle1
From: https://blog.51cto.com/u_13472468/6113667

相关文章

  • C++协程
    参考C++那些事之C++20协程#include<iostream>#include<coroutine>structgenerator{structpromise_type{intcurrent_value;std::suspend......
  • C/C++小学生测验[2023-03-10]
    C/C++小学生测验[2023-03-10]题目2:小学生测验面向小学1~2年级学生,随机选择两个整数和加减法形成算式要求学生解答。功能要求:(1)进入测试之前先输入用户名、密码登录,......
  • C++的常量
    在C++中,常量可以分为以下几种类型:1、整型常量(IntegerConstants):整数常量,可以是十进制、八进制或十六进制,例如42、052、0x2A等。整型常量可以使用后缀来指定类型。u......
  • 如何通过C++ 将数据写入 Excel 工作表
    直观的界面、出色的计算功能和图表工具,使Excel成为最流行的个人计算机数据处理软件。在独立的数据包含的信息量太少,而过多的数据又难以理清头绪时,制作成表格是数据管理的最......
  • C++ 数组 指针小记
    voidfun(int*aa){return;}int*a=newint[16];memset(a,0,16);fun(a);voidfun(int*aa){return;}inta[16]={0};fun(a);  总之,两......
  • matlab2c使用c++实现matlab函数系列教程-sort函数
    ​​​​全栈工程师开发手册(作者:栾鹏)​​matlab2c动态链接库下载​​​matlab库函数大全matlab2c基础教程matlab2c开发全解教程matlab2c调用方法:1、下载动态链接库2、......
  • matlab2c使用c++实现matlab函数系列教程-trace函数
    ​​​​全栈工程师开发手册(作者:栾鹏)​​matlab2c动态链接库下载​​​matlab库函数大全matlab2c基础教程matlab2c开发全解教程matlab2c调用方法:1、下载动态链接库2、......
  • matlab2c使用c++实现matlab函数系列教程-reshape函数
    ​​​​全栈工程师开发手册(作者:栾鹏)​​matlab2c动态链接库下载​​​matlab库函数大全matlab2c基础教程matlab2c开发全解教程matlab2c调用方法:1、下载动态链接库2、......
  • matlab2c使用c++实现matlab函数系列教程-triu函数
    ​​​​全栈工程师开发手册(作者:栾鹏)​​matlab2c动态链接库下载​​​matlab库函数大全matlab2c基础教程matlab2c开发全解教程matlab2c调用方法:1、下载动态链接库2、......
  • C++--类和对象--初始化列表, stattic
             ......