Есть ли другой способ рассчитать значение X в координатах другой системы координат?

Извините за странное название темы, но я не знаю, как ее еще назвать. введите здесь описание изображения

Проблема в том, что у меня есть элемент управления zedgraph. Внутри нарисовано несколько линий.

У меня есть координаты левой границы области диаграммы и правой границы области диаграммы.

Я рисую вертикальные линии в виде PictureBox поверх элемента управления zedgraph, поэтому они перемещаются в разных координатах. Эти вертикальные линии можно перемещать влево и вправо.

Таким образом я пытаюсь получить значение X в координатах XAxis:

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;
}

Этот код вычисляет X точно, пока используется else if, но в моем примере он вычисляет что-то неправильное.

Я надеюсь, что кто-то это понимает.

Обновлен новым кодом:

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;
}

Результат: введите здесь описание изображения


person Kosmo零    schedule 08.05.2013    source источник


Ответы (1)


person    schedule
comment
Спасибо за ваш ответ, однако он все еще вычисляет что-то неправильно... Пожалуйста, посмотрите обновление в моем вопросе - person Kosmo零; 08.05.2013
comment
Исправил это, выполнив следующее: double x = left_coord_of_border - zed_graph.GraphPane.Chart.Rect.Left; Это было корнем всех моих проблем... Спасибо за основную идею - person Kosmo零; 08.05.2013
comment
@Космос - double x = left_coord_of_border - 56; - person Egor Skriptunoff; 08.05.2013