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
我想知道点和几何体轮廓之间的最短距离。我该怎么做
以下是我的努力:
基本上,你需要做的是通过你从几何体得到的路径上的每个点,测量其中一个点和隔离点之间的距离 上有一个帖子,可以找到离隔离点最近的点: <> 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;
}