Pull to refresh

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

Programming *
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г.
Tags:
Hubs:
Total votes 22: ↑22 and ↓0 +22
Views 18K
Comments Comments 11