有没有办法根据当前的xPosition查找曲线的索引位置呢?
假设我有一个曲线项目-MyCurve,它有20k个点,当鼠标移动时,我可以获取鼠标位置,然后通过使用以下函数简单地获取x和y位置。
double xPos=0, yPos=0;
this.zedGraphControl1.GraphPane.ReverseTransform(MouseLoc, out xPos, out yPos);
但我希望从曲线项目中找到数据点,有什么建议吗?
提前感谢....:)
有没有办法根据当前的xPosition查找曲线的索引位置呢?
假设我有一个曲线项目-MyCurve,它有20k个点,当鼠标移动时,我可以获取鼠标位置,然后通过使用以下函数简单地获取x和y位置。
double xPos=0, yPos=0;
this.zedGraphControl1.GraphPane.ReverseTransform(MouseLoc, out xPos, out yPos);
但我希望从曲线项目中找到数据点,有什么建议吗?
提前感谢....:)
CurveItem Curve
具有点,并且它们分布均匀。double startPos = Curve.Points[0].X
double xStep = Curve.Points[Curve.NPts - 1].X / Curve.NPts;
int xIndex = (int)(xPos / xStep + startPos);
// Make sure it is in bounds
xIndex = xIndex < 0 ? 0 : xIndex > Curve.NPts - 1 ? Curve.NPts - 1 : xIndex;
您可以使用以下函数:
CurveItem n_curve;
int index;
zedGraphControl1.GraphPane.FindNearestPoint(mousePt, out n_curve, out index);
请记住,这将会查找最近的曲线和该曲线中最近点的索引。
如果您不需要以编程方式使用位置,而只想在图表中查看位置,则可以将zedGraphControl1.IsShowPointValues
设置为true
:
Math.Round()
、.Floor()
或.Ceiling()
来代替(int)(xPos / xStep + startPos);
。由于你使用的是鼠标位置,所以你会接近这个点,但不会完全在它上面,因此需要对获取的索引进行一些操作,以获得更准确的结果。 - NominSimFindNearestPoint
重载,它允许您指定目标曲线以查找您的点索引,并且您还可以使用GraphPane.Default.NearestTol来配置搜索容差。这对您的需求是否足够? - Anders Gustafsson