DISLIN — высокоуровневая библиотека визуализации пользовательских данных

    dislin logo
    Думаю каждый сталкивался с проблемой визуализации данных внутри своей программы. Особенно, если программа консольная. В топике я хочу рассказать о бесплатной (для некоммерческого использования) кроссплатформенной библиотеке DISLIN, которая разработана институтом исследований Солнечной системы имени М. Планка (Германия). DISLIN может как просто отображать графики, так и сразу их сохранять в файлы. Разработчики заявляют возможность использования в fortran, c/c++, Perl, Python, Java, .NET.
    Библиотека поддерживает следующие типы дисплеев: VGA, X Windows, Windows API, OpenGL и Tektronix; и следующие форматы файлов GKSLIN, CGM, HPGL, PostScript, PDF, WMF, SVG, PNG, BMP, GIF, TIFF. При этом поддерживается импорт изображений в TeX, что не может не радовать.

    Что же умеет DISLIN?
    • Построение двух- и трехмерных графиков и поверхностей.
    • Построение кривых, в том числе заданных параметрически.
    • Элементарные операции построения линий, векторов, полей и геометрических фигур с различными типами заливки.
    • Работа с текстом: легенда, подписи и т. д.
    • Построение двух- и трехмерных гистограмм и диаграмм.
    • Построение карт (обычных и контурных) в различных проекциях.
    • Создание своего GUI.
    Как использовать?

    Покажу на примере c#. Чтобы включить DISLIN в свой проект нужно:
    • Добавить в «References» файл disnet.dll. Все вызовы библиотеки собраны в классе dislin.
    • Добавить в проект файл dislin.cs.
    • В папку проекта положить библиотеку dislnc.dll.
    Попробуем построить проекцию трехмерного графика на плоскость:
       // Определили формат вывода графика: xwin - вывод на экран
       dislin.metafl ("xwin");

       // Инициализировали библиотеку DISLIN
       dislin.disini ();

       // Определим заголовок
       dislin.titlin ("3-D Colour Plot of the Function", 1);
       dislin.titlin ("f(x,y) = sin(x) * cos(y)", 3);

       // Подписи осей
       dislin.name ("X-axis", "X");
       dislin.name ("Y-axis", "Y");
       dislin.name ("Z-axis", "Z");

       // Вывели заголовок
       dislin.title ();

       // Задали размеры осей
       dislin.ax3len(1000, 1000, 1000);

       // Строим систему координат
       dislin.graf3(0.0f, 360.0f, 0.0f, 90.0f, 0.0f, 360.0f, 0.0f, 90.0f, -2.0f, 2.0f, -2.0f, 1.0f);

       // Выводим график. В массиве func хранятся предвычисленные значения функции
       dislin.crvmat(func, n, n, 1, 1);

       // Завершили работу с DISLIN
       dislin.disfin ();


    * This source code was highlighted with Source Code Highlighter.
    А вот, что получилось:
    Проекция поверхности на плоскость

    Теперь построим обычный двумерный график:
      dislin.titlin("CURVE", 1);
      dislin.titlin("SIN^2(X), SIN(X) + COS(X)", 3);

      dislin.graf(0.0f, 360.0f, 0.0f, 90.0f, -2.0f, 2.0f, -1.0f, 0.5f);
      dislin.title();

       //Построим 2 кривые
      dislin.color("red");
      dislin.curve(xPoints, func1, n);
      dislin.color("green");
      dislin.curve(xPoints, func2, n);


    * This source code was highlighted with Source Code Highlighter.
    Кривая

    График в полярных координатах:
      dislin.polar(1.0f, 0.0f, 0.2f, 0.0f, 30.0f);
      dislin.curve(xPoint, func, n);

    * This source code was highlighted with Source Code Highlighter.
    Полярные координаты

    И наконец, трехмерная поверхность:
       dislin.view3d (-5.0f, -5.0f, 4.0f, "ABS");
       dislin.graf3d (0.0f, 360.0f, 0.0f, 90.0f, 0.0f, 360.0f, 0.0f, 90.0f,
        -3.0f, 3.0f, -3.0f, 1.0f);

       dislin.color ("red");
       //Задаем поверхность
       dislin.surmat (func, n, m, 1, 1);


    * This source code was highlighted with Source Code Highlighter.

    Поверхность

    Чтобы сразу сохранить график в файл, необходимо в функции metafl задать желаемое расширение, например:
       dislin.metafl ("png");
    В папке с программой появится файл dislin.png с картинкой.

    Минусы библиотеки:
    • Фигура получается статичной: нельзя повращать трехмерную поверхность или изменить масштаб. Хотя параметры проекции настраиваются.
    • Нет поддержки русского языка. Приходится подписи делать по-английски.
    Что еще почитать?

    Много примеров приведено на официальном сайте библиотеки: www.mps.mpg.de/dislin/examples.html
    Также можете посмотреть пользовательскую галерею.
    Презентация от разработчиков (англ.): www.mps.mpg.de/dislin/dislin.ppt
    Онлайн руководство (англ.): www.mps.mpg.de/dislin/manual.html
    Краткий справочник по функциям (англ.): www.mps.mpg.de/dislin/appa.html
    Ссылка для скачивания (v. 10.1): www.mps.mpg.de/dislin/downloads.html

    Между прочим, библиотеке DISLIN уже 25 лет. Первая версия вышла в свет в декабре 1986г.
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 10
    • +4
      Такое ощущение, что у разработчиков боязнь имен функций длиннее 6 символов))
      • +3
        для совместимости с фортраном древних стандартов;)
      • –3
        у maple (и на его двиге) имхо покрасивее графики… ну про возможности говорить не стоит вообще… правда это нечто большее чем библиотека.
        • +1
          DISLIN в общем-то известная библиотека для графики в области вычислений. Во всяком случае в computational fluid dynamics её пользуют довольно часто. Другой вопрос что пост по сути краткий перевод аннотации со странички проекта. Но тем не менее автор — молодец.

          У меня другой вопрос, к хабрасообществу, известны ли им хорошие свободные движки для CAD-подобных приложений?
          • +1
            Совсем недавно ковырял её на питоне. Хорошая, мощная либа. Вот только для меня надобность в ней пришла когда уже Matplotlib не мог помочь, т.е. для 3D графиков
            • +1
              А с Gnuplot сравнение уместно? Разница, чем DISLIN лучше?
              • +1
                Только вот она не бесплатная. Точнее бесплатная только для некоммерческого использования.

                Как она графики выводит? Создает свое окно или куда скажешь?
                • 0
                  Как она графики выводит? Создает свое окно или куда скажешь?

                  Насколько я понял из мануала, можно и так, и так.
                • 0
                  Оно умеет с нерегулярными треугольными сетками работать или только прямоугольники?
                  • 0
                    Почитал мануал. Умеет работать и с нерегулярными сетками.
                    Пожалуй, то, что надо. Буду использовать!

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.