已知地球球面上两个点的经纬度,求球面上第三个点和这两个点连线的距离的matlab代码
时间: 2024-09-20 15:17:40 浏览: 44
在MATLAB中计算地球上两点之间的大圆距离(也称为Haversine公式),可以利用`pi`、`cos`、`sin`函数以及一些基本的数学计算。以下是一个简单的示例代码:
```Matlab
% 定义地球半径(单位:公里)
R = 6371;
% 输入三个点的经纬度(纬度范围 -90 到 90,经度范围 -180 到 180)
lat1 = deg2rad(double(input('请输入第一个点的纬度 (°): '))); % 转换为弧度
lon1 = deg2rad(double(input('请输入第一个点的经度 (°): ')));
lat2 = deg2rad(double(input('请输入第二个点的纬度 (°): ')));
lon2 = deg2rad(double(input('请输入第二个点的经度 (°): ')));
% 第三个点的经纬度
lat3 = deg2rad(double(input('请输入第三个点的纬度 (°): ')));
lon3 = deg2rad(double(input('请输入第三个点的经度 (°): ')));
% Haversine公式
deltaLon = lon2 - lon1;
deltaLat = lat2 - lat1;
a = sin(deltaLat/2)^2 + cos(lat1) * cos(lat2) * sin(deltaLon/2)^2;
c = 2 * atan2(sqrt(a), sqrt(1-a));
% 计算距离(km)
distance = R * c;
% 显示结果
disp(['两点 (' num2str(lat1', ', ', lat2') 和 (' num2str(lon1', ', ', lon2) ') 之间的大圆距离为 ' num2str(distance, '%.2f', 'fixed') ' km.']);
% 计算第三点到两点连线的直线距离(仅用于参考,实际地球表面不是平面)
lineDistance = hypot(R * deltaLat, R * deltaLon);
disp(['而从 (' num2str(lat3', ', ', lon3) ') 到这两点的直线距离为 ' num2str(lineDistance, '%.2f', 'fixed') ' km.']);
% 相关问题:
阅读全文