c# - 获取点到几何体的距离

标签 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 上没有有用的方法...

最佳答案

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

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++算法。

关于c# - 获取点到几何体的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23646904/

相关文章:

WPF DataGrid 列忽略宽度

c# - 将 cefSharp 客户端与 Selenium Chrome 驱动程序绑定(bind) c#

c# - 如何使用 .Net 读取 .cds 数据库 (TClientDataSet)

c# - Xamarin.Forms RadioButtons 文本不可见

wpf - 有什么理由将 POCO 变成 Model 对象吗?

c# - WPF - 字节数组到十六进制 View (类似于 Notepad++ HEX-Editor 插件)

wpf - MVVM WPF ComboBox SelectedItem 绑定(bind)未在数据网格内激活

使用 IDataErrorInfo 提交 WPF 验证

c# - 无法将使用 'not in (subquery)' 的查询语法 LINQ 查询转换为方法语法

c# - 更改 outlook MailItem 图标