利用MATLAB实现空间两点距离的计算以及优化

首先在这里声明,本次使用的地球模型采用的是球形。参考的文章是美团的距离计算,说的很清晰,感兴趣的朋友可以参考。我自己使用了MATLAB实现了其中的算法。仅供参考,互相学习。

大致地说,这里实现的方法就是通过将经纬坐标转换为三维的以球心为原点的立体坐标计算地球表面两点之间的距离长度。

地理空间距离计算优化—美团技术团队

function [x y z] = LL2era(lon,lat)
%函数实现将经纬度坐标转换为以地心为原点的三维立体坐标
%lon:输入精度
%lat:输入纬度
%模型采用地球为球形
lat = lat*pi/180;
lon = lon*pi/180;
r = 6367000; %地球的半径
x = r*cos(lat)*cos(lon);
y = r*cos(lat)*sin(lon);
z = r*sin(lat);

function [distance1,distance2] = distance_compute(lon1,lat1,lon2,lat2)
%根据给出的两点之间的经纬度计算地球上两点之间的距离
%计算两点之间的距离
%对于地球球体来说,计算地球表面两点之间的距离就是求这两点相对地心形成的夹角对应的弧度
%那么为了求得这个弧度的长度,我们需要得到夹角的大小,再使用余弦公式得到弧度对应的边
%最后根据弧度计算公式获得距离
r = 6367000; %地球的半径
[x1 y1 z1] = LL2era(lon1,lat1);
[x2 y2 z2] = LL2era(lon2,lat2);
distance_direcr2 = (x1 - x2)^2 + (y1 - y2)^2 + (z1 - z2)^2; %弧长对应的弦长
costheta = (distance_direcr2 - 2*r^2)/(-2*r^2); %夹角的余弦值
distance1 = r*acos(costheta); %半径乘以角度等于弧长

%改进1,为了加快计算的速度,将arccostheta用sintheta代替,再用sqrt(1-costheta^2)变换
distance2 = r*sqrt((1  - costheta^2));

%同时,下面将给出更加一般化的简化函数
function distance = abstract_compute(lon1,lat1,lon2,lat2)
%以一种简化的方式计算距离
%由于计算的距离比较小,所以可将经纬线认为是互相垂直的
%于是就可以根据垂直、直线之间的关系来求解
r = 6367000; %地球的半径
dx = (lon1 - lon2)*pi/180; %经度差并转换为弧度
dy = (lat1 - lat2)*pi/180; %纬度差并转换为弧度
average = ((lat1 + lat2)/2)*pi/180; %平均纬度
SN = r*dy; %南北方向上的距离
SE = r*dx*cos(average); %东西方向上的距离
distance = sqrt(SN^2 + SE^2);

输入输出示例:
在这里插入图片描述
在这里插入图片描述
最后一步的简化就是将余弦函数用泰勒公式展开表示,只要展开到三次幂就可以得到误差比较小的结果了!

  • 5
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
空间直线的轨迹规划是一种常用的运动轨迹规划方法,可以应用于机器人、无人机、运动控制等领域。matlab软件是一款广泛使用的科学计算软件,可以用于编程求解各种数学问题。下面介绍一种基于matlab空间直线的轨迹规划程序设计思路。 首先,需要明确空间直线的轨迹规划问题,即给定起点和终点,求解一条直线路径,使得路径上的速度、加速度等达到要求。根据机器人运动学原理,空间直线路径可以表示为三维空间中两个点之间的直线,因此可以用向量来描述。在matlab中,向量可以用矩阵表示,例如[x,y,z]表示三维坐标。 其次,需要考虑轨迹规划的算法,常用的算法包括插值法、最小二乘法、Bezier曲线、样条曲线等。其中,样条曲线算法比较常用,可以通过多项式函数组成的曲线,实现路径平滑和优化。在matlab中,有现成的插值函数和样条曲线函数可以使用,例如interp1、spline、csapi等。 最后,需要建立程序框架,实现从起点到终点的轨迹规划计算。程序框架主要包括输入起点和终点坐标,计算路径各个点的坐标、速度、加速度、时间、距离等参数,绘制轨迹图像等步骤。在计算中,可以设置速度、加速度、时间等限制条件来控制轨迹质量。 综上所述,基于matlab空间直线轨迹规划程序编写,需要考虑问题的物理意义、算法原理和程序实现等方面,可以利用现成的函数和工具箱实现快速开发,也可以结合自己的需求和算法,进行定制化编程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值