C# 如何在ZedGraph上找到索引位置

C# 如何在ZedGraph上找到索引位置,c#,graph,zedgraph,discretization,C#,Graph,Zedgraph,Discretization,有没有办法根据当前的X位置找到曲线的索引位置 假设我有一个曲线项-MyCurve,它有20k个点,当鼠标移动时,我可以得到鼠标的位置&然后我可以通过简单地使用以下函数得到x&y位置 double xPos=0, yPos=0; this.zedGraphControl1.GraphPane.ReverseTransform(MouseLoc, out xPos, out yPos); 但是我想从曲线项中找到数据点,有什么建议吗 提前感谢……)请记住,以下只是一个近似值,尤其是当鼠标靠近点时

有没有办法根据当前的X位置找到曲线的索引位置

假设我有一个曲线项-MyCurve,它有20k个点,当鼠标移动时,我可以得到鼠标的位置&然后我可以通过简单地使用以下函数得到x&y位置

double xPos=0, yPos=0;

this.zedGraphControl1.GraphPane.ReverseTransform(MouseLoc, out xPos, out yPos);
但是我想从曲线项中找到数据点,有什么建议吗


提前感谢……)

请记住,以下只是一个近似值,尤其是当鼠标靠近点时,它应该是准确的,但当您查看鼠标位置时,您可能不会直接位于曲线上的点上。它还假设您的
曲线项曲线
有点,它们是均匀分布的

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;

但请记住,这将查找最近的曲线和曲线内最近点的索引。

如果您不关心以编程方式使用位置,而只想查看图形中显示的位置,则可以将
zedGraphControl1.IsShowPointValues
设置为
true


非常感谢,我尝试了两种方法,但都不适合我的需要,我需要的是准确的数据点,而不是近似值。为了使用方法2,我必须将鼠标位置放在曲线项上,这对单曲线很好。@San而不是
(int)(xPos/xStep+startPos)
你可以玩
数学.Round()
地板()
天花板()
。由于您使用的是鼠标位置,因此您将接近该点,但不完全在该点上,因此必须对您获得的索引进行一些操作,以获得更准确的结果。@San有一个
FindNearestPoint
,允许您指定要为其查找点索引的目标曲线,您还可以使用配置搜索容差。这足以满足您的需要吗?@AndersGustafsson,再次为您指出过载选项而欢呼,但这种方法存在问题,请检查我更新的图像,它只会得到最近的点,而不是根据x轴。@San我回答中的第一种方法将是您最安全的赌注。谢谢您的建议,但是在zedgraph上显示所有20k标签是没有意义的。@San只是想指出,将
IsShowPointValues
设置为
true
只会显示曲线中离鼠标最近的点,而不是一次显示所有点。@NominSim,对不起&是的,你是对的……正如我在问题中提到的,我正在尝试找到准确的索引,这样我就可以读取功率和时间(x&y)并将这些值显示在标记表上,而不是图形上。
CurveItem n_curve;
int index;
zedGraphControl1.GraphPane.FindNearestPoint(mousePt, out n_curve, out index);