Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取从点到几何体的距离_C#_Wpf - Fatal编程技术网

C# 获取从点到几何体的距离

C# 获取从点到几何体的距离,c#,wpf,C#,Wpf,我有System.Windows.Media.Geometry g和System.Windows.Point p 我想知道点和几何体轮廓之间的最短距离。我该怎么做 以下是我的努力: GetOutlinedPathGeometry()返回PathGeometry PathGeometry.Figures返回PathFigure Segments返回PathSegment 在PathSegment上没有有用的方法 基本上,你需要做的是通过你从几何体得到的路径上的每个点,测量其中一个点和隔离点之间的

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

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

以下是我的努力:

  • GetOutlinedPathGeometry()返回PathGeometry

  • PathGeometry.Figures返回PathFigure

  • Segments返回PathSegment

  • 在PathSegment上没有有用的方法


  • 基本上,你需要做的是通过你从几何体得到的路径上的每个点,测量其中一个点和隔离点之间的距离

    上有一个帖子,可以找到离隔离点最近的点:

    <> P.还有一个C++算法进行测距。您只需将其转换为C#:

    您可能还可以使用
    Point.Subtract()
    方法来获取并比较这些点之间的
    向量

    如果您可以从该形状获得一个数组或点列表,那么您可能可以执行类似操作(请注意,这并不像我提供的链接那样详细。这将为您提供到一个可用点的最短距离,而不是线段本身):

    public static double GetShortestDistance(点目标,点[]点)
    {
    var-dist=0;
    foreach(变量点到点)
    {
    var xDist=target.X—point.X;
    var yDist=target.Y-point.Y;
    var nDist=Math.Sqrt(xDist*xDist+yDist*yDist);
    如果(nDist

    我推荐在第二个链接中使用C++算法。< /P>我读MSDN和FoD <代码> GeOutLink PATH几何< /COR> >返回“<代码> PathGeometry < /COD> >的轮廓。但是我找不到任何关于路径几何的有用方法。作为一个完全脱离主题的评论,你真的需要获得如此精确的距离吗?距离包含框的距离不够?根据定义,这不是最短路径:给定(0,1)处的目标和分别位于(2,0)和(2,2)处的点,距离应正好为2.0。那么如何从

    几何体中获取路径或多段线?我不知道该使用哪种API。我是否最终需要有
    路径段
    ?@LoveRight,因此如果我理解正确,我需要测试ps是否为线段,ps是否为弧段,ps是否为BezierSegment,等等@taoufik好的,直接到边缘的值为2.0,但到这些点的测量值约为2.23。我不知道他怎样才能得到到边缘的最短路径,而不是点。与C++算法的链接比我发布的文章做得更好。
    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;
    }