Съжалявам за странното име на темата, но не знам как да я кръстя по друг начин.
Проблемът е.. че имам 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;
}
Резултат: