ScottPlot 查找离鼠标最近的点
2024-03-17 17:33:41
官方已经在 Mouse Position - ScottPlot FAQ 中给出了查找鼠标位置和最近点的方法。
官方示例是以单个散点图作为说明的。而现实中,一个图表肯定不止一条数据,我们不仅仅需要找出最近的X点,还要找出最近的Y点。
解决思路如下:
- 遍历绘图对象,找出每个绘图对象当前鼠标所处的XY点。
- 再通过上面得到的X点,找出最近的X点。此时便得到了距离鼠标最近的X点。
- 用第一步得到的XY点,计算出鼠标所在的像素点位置。
- 获取鼠标像素点位置,从第3步的结果中找出离当前鼠标像素位置最近的点即可。
一句话说就是找出距离鼠标最近的每个绘图对象的XY点并转换为像素坐标,再从中找出离鼠标最近的像素坐标即可。
伪代码如下:
1 | foreach (var plottable in formsPlot.Plot.GetPlottables()) |
至于如何从一系列坐标中找出最近的点,可以用欧氏距离的公式,通过计算 X 坐标和 Y 坐标的差的平方和再开根号得到距离。
伪代码:
1 | private static PointF FindNearestPoint(List<PointF> list, float mousePixelX, float mousePixelY) |
效果图: