Шпаргалка по ZedGraph. Как узнать координаты мыши в системе координат графика

Несмотря на то, что на странице шпаргалки в комментариях есть пример пересчета координат в систему координат графика, вопросы на эту тему все-равно возникают. Данный пример показывает, что нужно сделать, чтобы при клике на компонент ZedGraph отображались координаты точки, на которую кликнули.

Все примеры объединены в одном solution для Visual Studio 2005 и написаны на языке C#, скачать их можно отсюда.

Проект в примере - ClickCoordinates

public partial class Form1 : Form
{
    public Form1 ()
    {
        InitializeComponent ();

        DrawGraph ();
    }

    /// <summary>
    /// Обработчик события MouseClick.
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void zedGraph_MouseClick (object sender, MouseEventArgs e)
    {
        // Сюда будут записаны координаты в системе координат графика
        double x, y;

        // Пересчитываем пиксели в координаты на графике
        // У ZedGraph есть несколько перегруженных методов ReverseTransform.
        zedGraph.GraphPane.ReverseTransform (e.Location, out x, out y);

        // Выводим результат
        string text = string.Format ("X: {0};    Y: {1}", x, y);
        coordLabel.Text = text;
    }

    private double f (double x)
    {
        if (x == 0)
        {
            return 1;
        }

        return Math.Sin (x) / x;
    }

    private void DrawGraph ()
    {
        // Получим панель для рисования
        GraphPane pane = zedGraph.GraphPane;

        // Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы
        pane.CurveList.Clear ();

        // Создадим список точек
        PointPairList list = new PointPairList ();

        double xmin = -50;
        double xmax = 50;

        // Заполняем список точек
        for (double x = xmin; x <= xmax; x += 0.01)
        {
            // добавим в список точку
            list.Add (x, f (x));
        }

        // Создадим кривую с названием "Sinc",
        // которая будет рисоваться голубым цветом (Color.Blue),
        // Опорные точки выделяться не будут (SymbolType.None)
        LineItem myCurve = pane.AddCurve ("Sinc", list, Color.Blue, SymbolType.None);

        // Включим отображение сетки
        pane.XAxis.MajorGrid.IsVisible = true;
        pane.YAxis.MajorGrid.IsVisible = true;

        // Вызываем метод AxisChange (), чтобы обновить данные об осях.
        // В противном случае на рисунке будет показана только часть графика,
        // которая умещается в интервалы по осям, установленные по умолчанию
        zedGraph.AxisChange ();

        // Обновляем график
        zedGraph.Invalidate ();
    }
}
 

Вернуться к остальным примерам

Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
4.5 stars

Рейтинг 4.4/5. Всего 5 голос(а, ов)



Владимир 18.03.2013 - 17:08

Вычисление пересечениея с прямой X=Const

Задача состоит в следующем:
Отрисовать прямую X=Const, а затем определив место пересечения с прямой графика, необходимо вывести значения полученной точки (точек).

Саму прямую отрисовал, но возникло сразу два Вопроса:
1. Как ограничить прямую так что-бы она была от верха до низу самого контрола, и при получении динамических данных оставалась на одном месте.
2. Как получить значения прорисовки.
вот код по клику мышки.
private void zedGraph_MouseClick(object sender, MouseEventArgs e)

        {



        GraphPane pane = zedGraph.GraphPane;
        // Сюда будут записаны координаты в системе координат графика
        double x, yx;

        // Пересчитываем пиксели в координаты на графике
        // У ZedGraph есть несколько перегруженных методов ReverseTransform.
        zedGraph.GraphPane.ReverseTransform (e.Location, out x, out yx);





            PointPairList list = new PointPairList();

            // Заполним список точек
            for (double y = -10; y <= 10; y += 0.01)
            {
                // Добавим в список точку
                list.Add(x, y);
            }
            // Создадим кривую с названием "Scot", 
            // которая будет рисоваться голубым цветом (Color.Rad),
            // Опорные точки выделяться не будут (SymbolType.None)
            LineItem myCurve = pane.AddCurve("Scot", list, Color.Red, SymbolType.None);

            // Включим отображение сетки
            pane.XAxis.MajorGrid.IsVisible = false;
            pane.YAxis.MajorGrid.IsVisible = false;

            // Вызываем метод AxisChange (), чтобы обновить данные об осях. 
            // В противном случае на рисунке будет показана только часть графика, 
            // которая умещается в интервалы по осям, установленные по умолчанию
            zedGraph.AxisChange();

            // Обновляем график
            zedGraph.Invalidate();

        }
        }

Подскажите что мне делать и куда двигаться???


Подписаться на комментарии
Автор:
Тема:
 Ваш комментарий
 
 
Введите код 883