答案 0 :(得分:0)
假设您的曲线由IEnumerable<Point> curve
给出,并且您的行由两个点start
和end
给出。
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)
如果你问的是直线和曲线之间的最长距离...曲线的距离最长...使用微积分的力量,你可以通过利用它来估计曲线的确切距离曲线上的直线段。您可以提供更多的线段,以提高距离的近似值。