地球任意两点求方位角 俯仰角

方位角

方位角(azimuthangle):从某点的指北方向线起,依顺时针方向到目标方向线之间的水平夹角,叫方位角。

地球上任意两点距离计算公式为 :

d=111.12cos1/(sinΦAsinΦB十cosΦAcosΦBcos(λB—λA))

其中A点的经、纬度分别为λA和ΦA,B点的经、纬度分别为λB和ΦB,d为距离。

俯仰角

俯仰角:坐标系y轴与水平面的夹角。当坐标系的y轴在惯性坐标系XOY平面上方时,俯仰角为正,否则为负。

方位角,距离,海拔在线计算器 (ab126.com)

C++ —— 两经纬度计算距离、方位角_automoblie0的博客-CSDN博客


#include <iostream>
 
// PI
#define M_PI		3.14159265358979323846
 
// 地球半径
const double EARTH_RADIUS = 6371000;
 
// 角度转弧度
double A2R(double d)
{
    return d * M_PI / 180.0;
}
 
// 弧度转角度
double R2A(double d)
{
    return d / M_PI * 180.0;
}
 
// 获取两经纬度之间的距离(m)
double GetDistanceCpp(double lat1, double lng1, double lat2, double lng2)
{
    double radLat1 = A2R(lat1);
    double radLat2 = A2R(lat2);
    double a = radLat1 - radLat2;
    double b = A2R(lng1) - A2R(lng2);
    double s = 2 * asin(sqrt(pow(sin(a/2),2) +cos(radLat1)*cos(radLat2)*pow(sin(b/2),2)));
    s = s * EARTH_RADIUS;
    return s;
}
 
// 获取两经纬度之间的方位角(°) 纬度 精度 纬度 经度
double GetYaw(double lat1, double lon1, double lat2, double lon2)
{
    double result = 0.0;
 
    int ilat1 = (int) (0.50 + lat1 * 360000.0);
    int ilat2 = (int) (0.50 + lat2 * 360000.0);
    int ilon1 = (int) (0.50 + lon1 * 360000.0);
    int ilon2 = (int) (0.50 + lon2 * 360000.0);
 
    lat1 = A2R(lat1);
    lon1 = A2R(lon1);
    lat2 = A2R(lat2);
    lon2 = A2R(lon2);
 
    if ((ilat1 == ilat2) && (ilon1 == ilon2)){return result;}
    else if (ilon1 == ilon2){if (ilat1 > ilat2){result = 180.0;}}
    else
    {
        double c = acos(sin(lat2) * sin(lat1) + cos(lat2)* cos(lat1) * cos((lon2 - lon1)));
        double A = asin(cos(lat2) * sin((lon2 - lon1)) / sin(c));
 
        result = R2A(A);
 
        if ((ilat2 > ilat1) && (ilon2 > ilon1)){}
        else if ((ilat2 < ilat1) && (ilon2 < ilon1)){result = 180.0 - result;}
        else if ((ilat2 < ilat1) && (ilon2 > ilon1)){result = 180.0 - result;}
        else if ((ilat2 > ilat1) && (ilon2 < ilon1)){result += 360.0;}
    }
 
    if(result<0){result +=360.0;}
    if(result>360){result -=360.0;}
 
    return result;
}
 
int main(int argc, char *argv[])
{
    //double ln_1 = 119.2928,la_1 = 26.07907;
    //double ln_2 = 114.0538,la_2 = 22.54151;
 
    //double ln_1 = 123.449,la_1 = 41.72306;
    //double ln_2 = 123.4494,la_2 = 41.72217;
    double delta1=0.00001,delta2=0.0001; //偏差
 
    double ln_1 = 118.4723,la_1 = 32.65736;
    double ln_2 = 118.4715,la_2 = 32.65258;
    double height=150;
 
    // 计算距离
    double dis  =GetDistanceCpp(la_1,ln_1,la_2,ln_2);
    double dis1  =GetDistanceCpp(la_1+delta1,ln_1,la_2,ln_2);
    std::cout << dis << "m\n";
    double hudu=atan2(height,dis);
    double jiaodu=R2A(hudu);
    double hudu1=atan2(height,dis1);
    double jiaodu1=R2A(hudu1);
    std::cout << "俯仰角"<<jiaodu << "°\n";
    std::cout << "俯仰角偏差"<<jiaodu1- jiaodu<< "°\n";
 
 
    // 计算方位角
    std::cout << GetYaw(la_1,ln_1,la_2,ln_2);
 
    return 0;
}

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 方位角俯仰角是通过查表法计算空中任意两点的角度的。 首先,我们需要定义一个表格,将所有可能的方位角俯仰角组合存储起来。假设我们以1度为步长,方位角从0度到359度,俯仰角从-90度到90度,我们需要一个数组来存储这些角度。 接下来,在FPGA代码中,我们可以引入输入信号,包括两个点的坐标(经度和纬度)。我们可以通过坐标转换运算得到两个点的方位角俯仰角。 然后,在代码中,我们可以使用查找表法来计算方位角俯仰角,即根据输入的方位角俯仰角的值,从表格中索引对应的数值,并将其作为输出信号。 最后,我们可以将计算得到的方位角俯仰角输出到相应的目标设备,例如显示屏、控制系统等。 使用查表法计算空中任意两点方位角俯仰角的FPGA代码可以提供实时的角度计算,并且具有高速、精确和可调节的特点。这种方法可以应用于航空导航、雷达系统、地图服务等领域。 ### 回答2: 方位角俯仰角是用来描述空中两点之间的位置关系的指标。方位角是指一个点相对于参考方向的旋转角度,一般以北方为参照,逆时针方向为正。俯仰角是指一个点相对于参考平面的偏转角度,一般以水平面为参照,上升方向为正。 在计算空中任意两点方位角俯仰角时,可以使用查表法,将已知的点的方位角俯仰角的数值存储在一个查找表中,根据给定的点在查找表中查找对应的数值即可得到结果。 以下是一个简单的使用FPGA编写的查表法计算空中任意两点方位角俯仰角的代码示例: ''' module Lookup_Table ( input wire [7:0] point_A, // 点A在查找表中的索引 input wire [7:0] point_B, // 点B在查找表中的索引 output reg [7:0] azimuth_angle, // 方位角 output reg [7:0] elevation_angle // 俯仰角 ); reg [7:0] lookup_table [255:0]; // 查找表,存储方位角俯仰角数值 initial begin // 初始化查找表 // 将点A和点B的方位角俯仰角数值存储在查找表中 // 注意查找表的索引需要和点A和点B相对应 lookup_table[0] = 0; // 点A的方位角 lookup_table[1] = 45; // 点A的俯仰角 lookup_table[2] = 90; // 点B的方位角 lookup_table[3] = 60; // 点B的俯仰角 // 其他数据省略... // 根据输入的点A和点B的索引值,在查找表中查找对应的方位角俯仰角数值 azimuth_angle <= lookup_table[point_A]; elevation_angle <= lookup_table[point_B]; end endmodule ''' 以上是一个简单的FPGA代码示例,使用查表法计算空中任意两点方位角俯仰角。其中,查找表的初始化部分需要根据实际需来编写,将每个点的方位角俯仰角数值存储在查找表中。在计算时,通过输入的点A和点B的索引值,从查找表中查找对应的方位角俯仰角数值,并输出给相应的输出端口。 ### 回答3: 方位角俯仰角是描述空中两点位置关系的角度,可以使用三角函数计算。FPGA代码实现查表法计算空中任意两点方位角俯仰角的步骤如下: 1. 创建一个包含预先计算方位角俯仰角的查找表。这个查找表可以是一个二维数组,其中每个元素存储某个方位角俯仰角对应的数值。 2. 输入两点的空间坐标,将坐标转换为极坐标形式。通过使用三角函数,可以计算两点之间的水平距离和高度差。 3. 使用计算得到的水平距离和高度差,从查找表中找到相应的方位角俯仰角。 4. 输出得到的方位角俯仰角。 具体的FPGA代码可以按照以下步骤进行编写: 1. 定义并初始化查找表,填充其中的方位角俯仰角数值。 2. 从输入端口获取两点的空间坐标。 3. 将坐标转换为极坐标形式,计算水平距离和高度差。 4. 使用水平距离和高度差,在查找表中查找对应的方位角俯仰角。 5. 将方位角俯仰角输出到输出端口。 需要注意的是,查表法计算空中任意两点方位角俯仰角的精度受限于查找表的分辨率。为了提高计算精度,可以增加查找表的尺寸或者使用插值算法。对于更高精度的计算,可以考虑使用更复杂的算法,如三角函数的数值逼近或迭代解等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fyzy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值