有没有其他方法来计算其他坐标系统的坐标系中的X值?

时间:2013-05-08 15:34:16

标签: algorithm coordinates

抱歉,对于奇怪的主题名称,但我不知道如何命名它。 enter image description here

问题是..我有一个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;
}

结果: enter image description here

1 个答案:

答案 0 :(得分:1)

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