我有一个用vb.net编写的程序,它创建一个图形并在其上绘制从XML文件解析的各种行。每一行都定义图表上的点是否必须高于或低于它。
简单地说,我正在寻找一种方法来找到最接近的数字ABOVE和BELOW某一点。
所以说我们有一条直线{(0,0)(1,1)(2,2)(3,3)}
我们要验证的一点(1.5,4)
说这一点需要超出界限。
另外,我应该提一下,这条线可能并不总是一条直线,而是有许多代表曲线的线段。
我怀疑最简单的方法是找到x轴上我们点周围线上的2个点,得到它们之间的斜率,然后进行插值。
所以我尝试了这个:
pointBelow = validationLine.points.Aggregate(Function(x, y) If(Math.Abs(x.X - paramPoint.XValue) < Math.Abs(y.X - paramPoint.YValues(0)), x, y))
pointAbove = validationLine.points.Aggregate(Function(x, y) If(Math.Abs(x.X - paramPoint.XValue) < Math.Abs(y.X - paramPoint.YValues(0)), x, y))
正如你所看到的,这些显然都会返回相同的值,所以我想知道如何在列表中搜索给定值的最接近的数字,然后执行相同的操作,但搜索ABOVE该值。
P.S。我们验证的点也可能在x轴上与我们线上的一个顶点完全相同,我正在寻找一种解决方案,无论如何都能解决这个问题。
答案 0 :(得分:0)
很抱歉,但发表评论的时间太长了。
这取决于你要比较它的线...如果你的线是一个函数,它意味着它永远不会'向后',你只需要比较点和你的线的Y值在X点。
如果它不是一个功能,那就更难了,也许你应该在数学Q&amp; A网站上提出这个问题,比如https://mathematica.stackexchange.com/