我有 System.Windows.Media.Geometry g
和 System.Windows.Point p
。
我想知道该点与几何轮廓之间的最短距离。我该怎么做?
这是我的努力:
Geometry.GetOutlinedPathGeometry() 返回 PathGeometry。
PathGeometry.Figures 返回 PathFigure。
PathFigure.Segments 返回 PathSegment。
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/