Има ли някакъв друг начин за изчисляване на стойността 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 добре, докато се използва друго ако, но в моя пример той изчислява нещо грешно.

Надявам се някой да разбере това.

Актуализиран с нов код:

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