UNITY中直线与曲线之间的最长距离

时间:2017-01-26 12:51:13

标签: c# distance unity5

我读过许多与我“相似”的问题,但没有人对我有好处。问题是我想知道曲线和直线的最长距离。曲线是用户的触摸输入,每个点,直线是从起始触摸点到结束触摸点。

Here is an example of what I want to get

实现这一目标的最佳和有效方法是什么?

谢谢。

2 个答案:

答案 0 :(得分:0)

假设您的曲线由IEnumerable<Point> curve给出,并且您的行由两个点startend给出。

Func<Point, double> distance = p =>
    Math.Abs(
          (end.Y - start.Y)*p.X
        - (end.X - start.X)*p.Y
        + end.X*start.Y
        - end.Y*start.X
    )
    / Math.Sqrt(
          (end.Y - start.Y)*(end.Y - start.Y)
        + (end.X - start.X)*(end.X - start.X));

Point nearest  = curve.OrderBy(distance).First();
Point farthest = curve.OrderByDescending(distance).First();

这不是最有效的方法,因为对数据的一次迭代就足够了,并且排序过度。但是,Linq中没有内置ArgMinAndMaxBy,速度可能不是问题。

顺便说一下,您可以通过Point类型替换类型System.Drawing(来自Vector2)。

答案 1 :(得分:0)

如果你问的是直线和曲线之间的最长距离...曲线的距离最长...使用微积分的力量,你可以通过利用它来估计曲线的确切距离曲线上的直线段。您可以提供更多的线段,以提高距离的近似值。