获取从点到几何的距离

时间:2014-05-14 06:12:45

标签: c# wpf

我有System.Windows.Media.Geometry gSystem.Windows.Point p

enter image description here

我想知道点和几何轮廓之间的最短距离。我该怎么办?

这是我的努力:

  1. Geometry.GetOutlinedPathGeometry()返回PathGeometry。

  2. PathGeometry.Figures返回PathFigure。

  3. PathFigure.Segments返回PathSegment。

  4. 在PathSegment上没有有用的方法...

1 个答案:

答案 0 :(得分:2)

基本上,你需要做的是遍历你从几何学中获得的那条路径上的每个点,并测量其中一个点与隔离点之间的距离。

有一篇关于SO的帖子找到了与隔离点最接近的点:

https://stackoverflow.com/a/19031758/2006048

还有一个用于测量距离的C ++算法。你只需要将它转换为C#:

https://stackoverflow.com/a/1501725/2006048

您也可以使用Point.Subtract()方法来获取并比较每个点之间的Vectors

如果你可以从那个形状得到一个数组或一个点列表,那么你可能会做这样的事情(请注意,这不像我提供的链接那么复杂。这将给你一个最短的距离可用点而不是段本身):

public static double GetShortestDistance(Point target, Point[] points)
{
    var dist = 0;
    foreach (var point in points)
    {
        var xDist = target.X - point.X;
        var yDist = target.Y - point.Y;
        var nDist = Math.Sqrt(xDist * xDist + yDist * yDist);

        if (nDist < dist)
        {
            dist = nDist;
        }
    }

    return dist;
}

我建议在第二个链接中使用C ++算法。