我有System.Windows.Media.Geometry g
和System.Windows.Point p
。
我想知道点和几何轮廓之间的最短距离。我该怎么办?
这是我的努力:
Geometry.GetOutlinedPathGeometry()返回PathGeometry。
PathGeometry.Figures返回PathFigure。
PathFigure.Segments返回PathSegment。
在PathSegment上没有有用的方法...
答案 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 ++算法。