目录
1.3 接着,它计算中间线的向量和从中间线起点到给定点的向量。使用向量投影,我们可以找到给定点在中间线上的投影点。
1.4 最后,函数计算给定点到投影点的欧几里得距离,这就是我们要求的直线距离
由于本人在做实验时,需要计算空间点到给定直线的垂直距离。今天给大家分享一下我的求解思路。
1、思路步骤
1.1 首先,将所有输入的经纬度转换为弧度,
1.2 然后,使用球面坐标系将经纬度转换为三维笛卡尔坐标。
1.3 接着,它计算中间线的向量和从中间线起点到给定点的向量。使用向量投影,我们可以找到给定点在中间线上的投影点。
1.4 最后,函数计算给定点到投影点的欧几里得距离,这就是我们要求的直线距离
2、代码分享
2.1 函数定义:
function distance = point_to_midline_distance(lat1, lon1, lat_start, lon_start, lat_end, lon_end)
2.2 角度转换:
lat1 = deg2rad(lat1);
lon1 = deg2rad(lon1);
lat_start = deg2rad(lat_start);
lon_start = deg2rad(lon_start);
lat_end = deg2rad(lat_end);
lon_end = deg2rad(lon_end);
2.3 定义地球半径:
我这里使用的是WGS84的椭球半径
R = R = 6378.137;
2.4
计算坐标:
使用球面坐标系转换公式,将经纬度坐标转换为三维笛卡尔坐标。这样做是为了在三维空间中进行向量计算
x_start = R * cos(lat_start) * cos(lon_start);
y_start = R * cos(lat_start) * sin(lon_start);
z_start = R * sin(lat_start);
x_end = R * cos(lat_end) * cos(lon_end);
y_end = R * cos(lat_end) * sin(lon_end);
z_end = R * sin(lat_end);
x1 = R * cos(lat1) * cos(lon1);
y1 = R * cos(lat1) * sin(lon1);
z1 = R * sin(lat1);
2.5 计算向量:
计算中间线的向量(从起点到终点)和从中间线起点到给定点的向量
vec_line = [x_end - x_start, y_end - y_start, z_end - z_start];
vec_point = [x1 - x_start, y1 - y_start, z1 - z_start];
2.6 计算向量投影:
计算vec_point在vec_line上的标量投影。这告诉我们给定点在中间线上的投影位置
proj = dot(vec_point, vec_line) / norm(vec_line);
两个函数在Matlab中的定义与解释
2.7 计算投影点坐标:
使用投影标量计算投影点的笛卡尔坐标。
x_proj = x_start + proj * vec_line(1) / norm(vec_line);
y_proj = y_start + proj * vec_line(2) / norm(vec_line);
z_proj = z_start + proj * vec_line(3) / norm(vec_line);
2.8 计算距离
使用三维空间中的欧几里得距离公式计算给定点到其在中间线上的投影点的距离。
distance = sqrt((x1 - x_proj)^2 + (y1 - y_proj)^2 + (z1 - z_proj)^2);
3、注意
实际上,这种方法计算的不是严格意义上的垂直距离,而是在三维空间中两点之间的直线距离。让我详细解释一下
3.1 不是严格的垂直距离:
- 在平面上,点到线的最短距离总是垂直的。
- 但在球面或曲面上,"垂直"的概念变得复杂了。
3.2 近似垂直:
- 对于地球表面上相对较短的距离,这个计算得到的距离很接近真正的垂直距离。
- 这是因为地球的曲率在小范围内不太明显,局部上可以近似为平面。
3.3 曲率影响:
- 对于较长的距离,地球的曲率会产生更明显的影响。
- 在这种情况下,计算得到的距离不是严格意义上的垂直距离,而是球面上两点间的最短路径(大圆距离)。
3.4 精度考虑:
- 这种方法在大多数实际应用中提供了很好的近似。
- 对于需要极高精度的应用,可能需要使用更复杂的地球椭球模型和大地测量学方法。
3.5 改进方法:
- 如果需要更精确的"垂直"距离,可以考虑在投影点处计算地球表面的切平面,然后计算给定点到这个切平面的垂直距离。
- 这种方法会更复杂,但在某些情况下可能更准确。
3.6 实际应用:
- 在大多数地理信息系统(GIS)和导航应用中,使用这种近似方法是完全可以接受的。
- 对于航海、航空等需要高精度的领域,通常会使用更复杂的模型。
总结:
这种方法计算的是三维空间中的最短距离,它在大多数情况下是一个很好的近似。对于地球表面上相对较短的距离,它非常接近垂直距离。但严格来说,它不是真正的垂直距离,特别是对于较长的距离。在实际应用中,这种近似通常已经足够精确,除非您的应用需要极高的精度。
如果您的应用确实需要更精确的垂直距离计算,我们可以讨论一些更复杂的方法来实现这一点。