计算“线”和“点”之间的最小距离

Posted

技术标签:

【中文标题】计算“线”和“点”之间的最小距离【英文标题】:Calculate min distance between a "line" and one "point" 【发布时间】:2014-01-28 19:26:21 【问题描述】:

我有一个“线串”(带有初始点和结束点)和一个“点”(两个坐标)。

并且我已经实现了以下ActionSctipt 代码来使用“haversine 公式”来计算两点之间的距离(每个点都有 x 和 y 坐标);这个函数可以返回以“kms”、“meters”、“feets”或“miles”为单位的“距离”:

private function distanceBetweenCoordinates(lat1:Number, lon1:Number, lat2:Number, lon2:Number, units:String = "miles"):Number 
    var R:int = RADIUS_OF_EARTH_IN_MILES;

    if (units == "km") 
        R = RADIUS_OF_EARTH_IN_KM;
    

    if (units == "meters") 
        R = RADIUS_OF_EARTH_IN_M;
    

    if (units == "feet") 
        R = RADIUS_OF_EARTH_IN_FEET;
    

    var dLat:Number = (lat2 - lat1) * Math.PI / 180;

    var dLon:Number = (lon2 - lon1) * Math.PI / 180;

    var lat1inRadians:Number = lat1 * Math.PI / 180;

    var lat2inRadians:Number = lat2 * Math.PI / 180;

    var a:Number = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1inRadians) * Math.cos(lat2inRadians);

    var c:Number = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

    var d:Number = R * c;

    return d;

此代码运行良好。但我需要改进此代码以允许计算“单点”和一个“线串”(有 2 个点)之间的最小距离。 我该怎么办?

我认为这个解决方案: *为每个点(初始和结束)划分“线条”......并为每个点计算到“单点”的距离......在我得到两个“距离”之后返回最小距离。 这个解决方案并不是更好,下图对此进行了解释:

“d1”和“d2”距离无效...因为只有“d0”是有效距离。

请!帮我!!!如何改进haversine公式来计算一条线和一个点之间的距离(以公里为单位)?

谢谢!!!!

【问题讨论】:

***.com/questions/1299567/… 可能有帮助 Distance from point to line on Earth的可能重复 【参考方案1】:

在您的情况下,d0 距离是三角形的高度。它是Hb=2*A/b,其中A- 基础边的面积和b-长度(您的线串)

如果给定 3 个点,您可以计算它们之间的距离(三角形的边 abc)。它将允许您计算三角形面积:A=sqrt(p*(p-a)*(p-b)*(p-c)) 其中p 是半周长:p=(a+b+c)/2。所以,现在你有了计算距离Hb(你的“d0”)所需的所有变量。

【讨论】:

以上是关于计算“线”和“点”之间的最小距离的主要内容,如果未能解决你的问题,请参考以下文章

如何计算一个python函数来计算/绘制点和曲线之间的最小距离?

最接近一组点的线[重复]

算法:点与点之间欧式距离最小

生成每个之间距离最小的3-d随机点?

估计两个集群之间的最小距离

《图像处理实例》之 曲线之间距离求解