抱歉,主题名称很奇怪,但我不知道该怎么命名。
问题是..我有一个 zedgraph 控件。里面画了一些线。
我有图表区域左边界和图表区域右边界的坐标。
我在 zedgraph 控件上绘制垂直线作为 PictureBoxes,因此它们在不同的坐标中移动。此垂直线可以向左和向右移动。
这样我试图在 XAxis 的坐标中获得 X 值:
public double Get_X_InContextOfChart(int left_coord_of_border) //Left of vertical line
{
//zed_graph.GraphPane.XAxis.Scale.Min is minimal X value shown on XAxis
//zed_graph.GraphPane.Chart.Rect.Left is Left of YAxis
//Same for else if, aside of using Right and maximum X at right
if (zed_graph.GraphPane.XAxis.Scale.Min != 0) //to avoid division by zero
return (left_coord_of_border * zed_graph.GraphPane.XAxis.Scale.Min) / zed_graph.GraphPane.Chart.Rect.Left;
else if (zed_graph.GraphPane.XAxis.Scale.Max != 0)
return (left_coord_of_border * zed_graph.GraphPane.XAxis.Scale.Max) / zed_graph.GraphPane.Chart.Rect.Right;
return double.NaN;
}
只要使用 else if,此代码就可以很好地计算 X,但在我的示例中,它计算出一些错误。
我希望有人能理解这一点。
更新了新代码:
public double Get_X_InContextOfChart(int left_coord_of_border)
{
double scale_left = zed_graph.GraphPane.XAxis.Scale.Min;
double scale_right = zed_graph.GraphPane.XAxis.Scale.Max;
double graph_width = zed_graph.GraphPane.Chart.Rect.Width;
double x = left_coord_of_border;
return scale_left + (scale_right - scale_left) / graph_width * x;
}
结果:
最佳答案
scale_left = -0.1
scale_right = 0.9
graph_width = 540 // pixels
x = 190 // pixels
scale_x = scale_left + (scale_right - scale_left) / graph_width * x // 0.25
关于algorithm - 有没有其他方法可以计算其他坐标系坐标中的 X 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16444682/