--- /dev/null
+This is mgl_ru.info, produced by makeinfo version 4.13 from mgl_ru.texi.
+
+Это документация для MathGL (версии 1.11) - библиотеки классов и
+функций для построения научной графики. Пожалуйста сообщайте о любых
+ошибках в этом руководстве на <mathgl.abalakin@gmail.org>.
+
+ Copyright (C) 2009 Алексей Балакин.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.2 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover Texts
+ being "A GNU Manual," and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ "GNU Free Documentation License."
+
+ (a) The FSF's Back-Cover Text is: "You have the freedom to copy
+ and modify this GNU manual. Buying copies from the FSF supports
+ it in developing GNU and promoting software freedom."
+
+INFO-DIR-SECTION MathGL documentation system
+START-INFO-DIR-ENTRY
+* MathGL: (mathgl). The library for scientific graphics.
+END-INFO-DIR-ENTRY
+
+\1f
+File: mgl_ru.info, Node: Top, Next: MGL interface, Up: (dir)
+
+Язык MGL
+************
+
+Это документация для языка MGL (версии 1.11). Пожалуйста сообщайте о
+любых ошибках в этом руководстве на <mathgl.abalakin@gmail.org>.
+Дополнительную информацию о MGL и MathGL можно найти на домашней
+странице проекта `http://mathgl.sourceforge.net/'.
+
+ Copyright (C) 2010 Алексей Балакин.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.2 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover Texts
+ being "A GNU Manual," and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ "GNU Free Documentation License."
+
+ (a) The FSF's Back-Cover Text is: "You have the freedom to copy
+ and modify this GNU manual. Buying copies from the FSF supports
+ it in developing GNU and promoting software freedom."
+
+* Menu:
+
+* MGL interface::
+* Examples::
+* Samples::
+* Copying This Manual::
+* Index::
+
+\1f
+File: mgl_ru.info, Node: MGL interface, Next: Examples, Up: Top
+
+1 Язык MGL
+**************
+
+MathGL имеет встроенный скриптовый язык MGL для обработки и отображения
+данных. Скрипты MGL можно использовать как независимо (программами
+UDAV, mgl2png, mgl2eps, mgl2svg и пр., *note Utilities::) так и
+вызовами библиотеки.
+
+ Язык MGL достаточно простой. Каждая строка - отдельная команда.
+Первое слово - имя команды, а все остальные ее аргументы. Команда может
+иметь до 1000 аргументов (по крайней мере сейчас). Слова разделяются
+одно от другого пробелом или символом табуляции. Различий между верхним
+и нижним индексом нет, т.е. переменные A и A идентичны. Символ `#'
+начинает комментарий - все символы после него игнорируются до конца
+строки. Исключением является случай, когда `#' входит в строку. Опции
+команды указываются после символа `;' (*note Command options::). Символ
+`:' начинает новую команду (подобно переводу строки) если он расположен
+не внутри скобок или строки.
+
+ Если строка содержит ссылки на внешние параметры (`$0', `$1' ...
+`$9') или макроопределения (`$a', `$b' ... `$z'), то текущие значения
+параметров/макроопределений подставляются в строку вместо ссылки до
+выполнением команды. Это позволяет использовать один и тот же скрипт
+при различных входных параметрах командной строки или вводить
+макроопределения по ходу исполнения команд скрипта.
+
+ Аргументы команды могут быть строками, переменными или числами.
+ * Строка - произвольный набор символов между метками `''.
+
+ * Обычно переменная имеет имя, состоящее из букв и чисел (должно
+ начинаться с буквы и не быть длиннее 64 символов). В качестве
+ переменной можно использовать временные массивы, включающие в себя:
+ * срезы ("подмассивы") массивов данных (подобно команде *note
+ subdata::). Например, `a(1)' или `a(1,:)' или `a(1,:,:)' -
+ вторая строка массива A, `a(:,2)' или `a(:,2,:)' - третий
+ столбец, `a(:,:,0)' - первый срез и т.д. Также можно выделить
+ часть массива с m-го по n-ый элемент `a(m:n,:,:)' или просто
+ `a(m:n)'.
+
+ * произвольные комбинации столбцов данных (например,
+ `a('n*w^2/exp(t)')'), если столбцы данных были именованы
+ командой *note idset:: или в файле данных (в строке
+ начинающейся с `##').
+
+ * произвольное выражение из существующих переменных и констант.
+ Например, `sqrt(dat(:,5)+1)' даст временный массив данных с
+ элементами равными `tmp[i,j] = sqrt(dat[i,5,j]+1)'.
+
+ * массивы с элементами заданными в квадратных скобках [],
+ разделенные `,'. При этом внутри выражения не должно быть
+ пробелов! Например, `[1,2,3]' даст временный массив из 3
+ элементов {1, 2, 3}; `[[11,12],[21,22]]' даст матрицу 2*2 и
+ т.д. Элементами такой конструкции могут быть и массивы если
+ их размерности одинаковые, например `[v1,v2,...,vn]'.
+
+ * результат команд построения новых данных (*note Make another
+ data::), если они заключены в фигурные скобки {}. Например,
+ `{sum dat 'x'}' даст временный массив, который есть результат
+ суммирования DAT вдоль 'x'. Это такой же массив как и TMP,
+ полученный командой `sum tmp dat 'x''. При этом можно
+ использовать вложенные конструкции, например `{sum {max dat
+ 'z'} 'x'}'.
+ Временные массивы не могут стоять в качестве первого аргумента
+ команд, создающих массивы (например, `new', `read', `hist' и т.д.).
+
+ * К скалярным переменным, кроме собственно чисел, относятся:
+ специальные переменные `nan=#QNAN, pi=3.1415926..., on=1, off=0,
+ :=-1', переменные с суффиксами (*note Suffixes::), переменные
+ определенные командой *note define::. Также массивы размером 1x1x1
+ считаются скалярами (например, `pi/dat.nx').
+ Перед первым использованием все переменные должны быть определены с
+помощью команд, создающих массивы (*note new::, *note var::, *note
+list::, *note copy::, *note read::, *note hist::, *note sum:: и др.,
+*note Data create:: и *note Make another data::).
+
+ Команды могут иметь несколько наборов аргументов (например, `plot
+ydat' и `plot xdat ydat'). Все аргументы команды для выбранного набора
+должны быть указаны, однако часть из них могут иметь значения по
+умолчанию. Такие аргументы в описании команд будут помещены в
+квадратные скобки [], например `plot ydat ['stl'='' zval=nan]'. При
+этом запись `[arg1 arg2 arg3 ...]' подразумевает `[arg1 [arg2 [arg3
+...]]]', т.е. опускать можно только аргументы с конца, если вы согласны
+с их значениями по умолчанию. Например, `plot ydat '' 1' или `plot ydat
+''' правильно, а `plot ydat 1' не правильно (аргумент `'stl'' пропущен).
+
+ Все команды MGL можно разделить на несколько групп. В дальнейшем
+будет использованы следующие обозначения при описании команд: имя
+команды выделено жирным, строки заключены в одинарные кавычки ",
+переменные выделены курсивом, числа (скаляры) выделены моноширинным
+шрифтом. Необязательные аргументы будут помещены в квадратные скобки []
+и показаны их значения по умолчанию. Подробную информацию о цвете и
+стиле линий (*note Line styles::), цветовых схемах (*note Color
+scheme::), стиле текста и символах TeX (*note Font styles::), текстовых
+формулах (*note Textual formulas::) можно найти в соответствующих
+разделах.
+
+* Menu:
+
+
+* General concepts::
+* Graphics setup ::
+* Axis settings ::
+* Transformation matrix ::
+* Export to file ::
+* Primitives drawing ::
+* Text printing ::
+* Axis and Colorbar ::
+* Legend ::
+* 1D plotting ::
+* 2D plotting ::
+* 3D plotting ::
+* Dual plotting ::
+* Vector fields ::
+* Other plotting ::
+* Nonlinear fitting ::
+* Data create ::
+* Data filling ::
+* Rearrange data ::
+* File I/O ::
+* Make another data ::
+* Change data ::
+* Operators ::
+* Program flow ::
+* Command options ::
+* Suffixes::
+* Utilities::
+
+\1f
+File: mgl_ru.info, Node: General concepts, Prev: Utilities, Up: MGL interface
+
+1.1 Основные принципы
+=====================================
+
+Возможности библиотеки MathGL довольно богаты - число только основных
+типов графиков превышает 50 видов. Кроме того, есть функции для
+обработки данных, настройки вида графика и пр. и пр. Тем не менее, я
+старался придерживаться единого стиля в порядке аргументов функций и
+способе их "настройки". В основном все ниже сказанное относится к
+функциям рисования различных графиков.
+
+ Всего основных концепций (базисных идей) четыре:
+ 1. *Все настройки графиков (стиль линий, цветовые схемы поверхностей,
+ стиль и цвет текста) задаются строками.* Это обеспечивает:
+ удобство для пользователя - короткую строку легче читать и здесь
+ тяжелее ошибиться, чем в большом списке параметров; переносимость
+ - строки выглядят одинаково на всех платформах и не надо
+ заботиться о типе и числе аргументов.
+
+ 2. *Все функции имеют "упрощенный" и "продвинутый" варианты.* Сделано
+ опять из-за удобства. В "упрощенном" варианте для построения
+ графика нужны только один-два массив(а) данных, которые
+ автоматически равнораспределяются в заданном диапазоне осей
+ координат. В "продвинутой" версии можно не только указать явно
+ диапазон построения графика, но и задать его параметрически.
+ Последнее позволяет легко строить довольно сложные кривые и
+ поверхности. В обоих вариантах функций порядок аргументов
+ стандартен: сначала идут массивы данных, потом необязательный
+ строковый параметр стиля графика, а далее - второстепенные
+ необязательные параметры для более точной настройки графика.
+
+ 3. *Все элементы рисунков векторные.* Изначально библиотека MathGL
+ была ориентированна на работу с научными данными, которые по своей
+ природе векторные (линии, грани, матрицы и т.д.). Поэтому
+ векторность используется во всех рисунках! Причем иногда даже в
+ ущерб производительности (например, при выводе шрифтов). Помимо
+ всего прочего, векторность позволяет легко масштабировать рисунок
+ - измените размер картинки в 2 раза, и рисунок пропорционально
+ растянется.
+
+ 4. *Новые графики не удаляют уже нарисованное.* Этот, в чем-то
+ неожиданный, подход позволяет создавать огромное количество
+ "комбинированных" графиков. Например, поверхность с наложенными
+ линиями уровня строится двумя последовательными вызовами функций
+ рисования поверхности и линий уровня (в любом порядке). И
+ совершенно не надо писать специальную функцию (как в Matlab и
+ некоторых других программах) для рисования этого графика. Примеров
+ таких графиков можно привести множество (см. раздел *note Hints::
+ и сайт программы `http://mathgl.sf.net/index.html').
+
+ Кроме основных концепций я хотел бы остановиться на нескольких, как
+оказалось, нетривиальных моментах - способе указания положения графика,
+осей координат и строковых параметров линий, поверхностей, текста.
+
+* Menu:
+
+* Coordinate axes::
+* Line styles::
+* Color scheme::
+* Font styles::
+* Textual formulas::
+
+\1f
+File: mgl_ru.info, Node: Coordinate axes, Next: Line styles, Up: General concepts
+
+1.1.1 Оси координат
+-------------------------------
+
+Представление системы координат в MathGL состоит из двух частей.
+Вначале координаты нормируются в интервал MINxMAX (*note Axis
+settings::). Если флаг CUT установлен, то точки вне интервала
+отбрасываются, в противном случае, они проецируются на ограничивающий
+параллелепипед (*note Cutting::). Кроме того, отбрасываются точки
+внутри границ, определенных переменными CUTMINxCUTMAX и точки, для
+которых значение функции `CutOff'() не равно нулю. После этого формулы
+перехода в криволинейную систему координат `SetFunc()'применяются к
+каждой точке. Наконец, точка данных отображается с помощью одной из
+графических функций.
+
+ Величины MAX, MIN можно изменять вручную. Однако, после этого
+необходимо вызвать функцию `RecalcBorder()' для настройки графика.
+Более удобный и безопасный путь состоит в вызове функций `Axis(),
+SetRanges()' и др. В последнем случае функция `RecalcBorder()'
+вызывается автоматически. Размеры осей можно задавать и автоматически
+по минимальному и максимальному значениям массива данных. Для этого
+предназначены функции `XRange(), YRange(), ZRange()'. Второй не
+обязательный аргумент указывает, заменять ли новые значения диапазона
+изменения оси координат (по умолчанию) или только расширить уже
+существующий диапазон.
+
+ Точка пересечения осей координат задается переменной ORG и действует
+на последующие вызовы функций рисования осей координат и сетки. По
+умолчанию, если точка пересечения осей координат попадает вне диапазона
+осей координат, то она проецируется на границу области. Изменить такое
+поведение можно, задав AUTOORG=`false'. В случае, если одно из значений
+ORG равно NAN, то соответствующее значение будет выбрано автоматически.
+
+ Кроме привычных осей _x, y, z_ есть еще одна ось - цветовая шкала -
+ось _c_. Она используется при окрашивании поверхностей и задает границы
+изменения функции при окрашивании. При вызове `Axis()' ее границы
+автоматически устанавливаются равными Min.z и Max.z. Возможно и ручное
+изменение границ цветового интервала посредством вызова функции
+`CAxis()' или изменение границ по заданному массиву `CRange()'.
+Используйте `Colorbar()' для отображения цветовой шкалы.
+
+ Вид меток по осям определяется функцией `SetTicks()' (*note Axis
+settings::). Она имеет 3 аргумента: первый D задает шаг меток (если
+положительны) или их число (если отрицательны) или логарифмические
+метки (если равны нулю); второ NS задает число "подметок"; последний
+определяет начальную точку для меток (по умолчанию это точка
+пересечения осей). Функция SETTUNETICKS включает/выключает выделение
+общего множителя (большого или малого факторов в диапазоне) для меток
+осей координат. Наконец, если стандартный вид меток не устраивает
+пользователя, то их шаблон можно задать явно (можно использовать и ТеХ
+символы), воспользовавшись функциями `SetXTT(), SetYTT(). SetZTT().
+SetCTT()'. Кроме того, в качестве меток можно вывести произвольный
+текст использовав функцию `SetTicksVal()'.
+
+\1f
+File: mgl_ru.info, Node: Line styles, Next: Color scheme, Prev: Coordinate axes, Up: General concepts
+
+1.1.2 Стиль линий
+---------------------------
+
+Стиль линии задается строкой, которая может содержать символ цвета
+(`wkrgbcymhRGBCYMHWlenupqLENUPQ'), тип пунктира (`-|;:ji' или пробел),
+ширину линии (`0123456789') и тип маркера (`o+xsd.^v' и модификатор
+`#'). Если пропущен цвет или тип пунктира, то используется значение по
+умолчанию с последним указанным цветом или значение из палитры (для
+*note 1D plotting::). По умолчанию палитры содержит следующие цвета:
+темно серый `H', синий `b', зеленый `g', красный `r', голубой `c',
+пурпурный `m', yellow `y', серый `h', сине-зеленый `l', небесно-синий
+`n', оранжевый `q', желто-зеленый `e', сине-фиолетовый `u', фиолетовый
+`p'.
+
+ Символы цвета те же, что и в классе mglColor (*note mglColor
+class::): `k' - черный, `r' - красный, `R' - темно красный, `g' -
+зеленый, `G' - темно зеленый, `b' - синий, `B' - темно синий, `c' -
+голубой, `C' - темно голубой, `m' - пурпурный, `M' - темно пурпурный,
+`y' - желтый, `Y' - темно желтый (золотой), `h' - серый, `H' - темно
+серый, `w' - белый, `W' - светло серый, `l' - сине-зеленый, `L' - темно
+сине-зеленый, `e' - желто-зеленый, `E' - темно желто-зеленый, `n' -
+небесно-синий, `N' - темно небесно-синий, `u' - сине-фиолетовый, `U' -
+темно сине-фиолетовый, `p' - фиолетовый, `P' - темно фиолетовый, `q' -
+оранжевый, `Q' - темно оранжевый (коричневый).
+
+ Тип пунктира: пробел - нет линии (для рисования только маркеров),
+`-' - сплошная линия (################), `|' - длинный пунктир
+(########________), `;' - пунктир (####____####____), `=' - короткий
+пунктир (##__##__##__##__), `:' - точки (#___#___#___#___), `j' -
+пунктир с точками (#######____#____), `i' - мелкий пунктир с точками
+(###__#__###__#__).
+
+ Типы маркеров: `o' - окружность, `+' - крест, `x' - косой крест, `s'
+- квадрат, `d' - ромб, `.' - точка, `^' - треугольник вверх, `v' -
+треугольник вниз, `<' - треугольник влево, `>' - треугольник вправо,
+`#*' - знак Y, `#+' - крест в квадрате, `#x' - косой крест в квадрате,
+`#.' - точка в окружности. Если в строке присутствует символ `#', то
+используются символы с заполнением.
+
+\0\b[image src="../png/sample5.png"\0\b]
+
+Стили линий и маркеров.
+
+ На конце и в начале линии можно выводить специальный символ
+(стрелку), если в строке указать один из символов: `A' - стрелка
+наружу, `V' - стрелка внутрь, `I' - поперечная черта, `K' - стрелка с
+чертой, `T' - треугольник, `S' - квадрат, `D' - ромб, `O' - круг, `_' -
+нет стрелки (по умолчанию). При этом действует следующее правило:
+первый символ определяет стрелку на конце линии, второй символ -
+стрелку в начале линии. Например, `r-A' - красная сплошная линия со
+стрелкой на конце, `b|AI' - синий пунктир со стрелкой на конце и чертой
+вначале, `_O' - линия с текущим стилем и кружком вначале. Эти стили
+действуют и при построении графиков (например, *note 1D plotting::).
+
+\0\b[image src="../png/sampled.png"\0\b]
+
+Стили стрелок.
+
+\1f
+File: mgl_ru.info, Node: Color scheme, Next: Font styles, Prev: Line styles, Up: General concepts
+
+1.1.3 Цветовая схема
+---------------------------------
+
+Цветовая схема используется для определения цвета поверхностей, линий
+уровня и пр. Цветовая схема задается строкой _s_, которая содержит
+символы цвета (*note Line styles::) или символы `d#:|'. Символ `d'
+указывает на определение цвета в зависимости от положения точки в
+пространстве, а не по амплитуде данных. Символ `#' переключает
+рисование поверхности на сетчатое (для трехмерных поверхностей) или
+включает рисование сетки на поверхности. Символ `|' отключает
+интерполяцию цвета в цветовой схеме. Это может быть полезно для
+"резких" цветов, например, при рисовании матриц. Если в строке
+встречается символ `:', то он принудительно заканчивает разбор строки
+для стиля поверхности. После этого символа могут идти описание стиля
+текста или оси вращения кривой/линий уровня. Цветовая схема может
+содержать до 32 значений цвета.
+
+ В цветовой схеме можно использовать тональные ("подсвеченные") цвета
+(_не в стиле линий!_). Тональный цвет задается двумя символами: первый
+- обычный цвет, второй - его яркость цифрой. Цифра может быть в
+диапазоне `1'...`9'. При этом `5' соответствует нормальному цвету, `1'
+- очень темная версия цвета (почти черный), `9' - очень светлая версия
+цвета (почти белый). Например цветовая схема может быть `b2b7wr7r2'.
+
+\0\b[image src="../png/colors.png"\0\b]
+
+Цвета и их идентификаторы.
+
+ При определении цвета по _амплитуде_ (наиболее часто используется)
+окончательный цвет определяется путем линейной интерполяции массива
+цветов. Массив цветов формируется из цветов, указанных в строке
+спецификации. Аргумент - амплитуда, нормированная между CMIN - CMAX
+(*note Axis settings::). Например, строка из 4 символов `bcyr'
+соответствует изменению цвета от синего (минимальное значение) через
+голубой и желтый (промежуточные значения) к красному (максимальное
+значение). Строка `kw' соответствует изменению цвета от черного
+(минимальное значение) к белому (максимальное значение). Строка из
+одного символа (например, `g') соответствует однотонному цвету (в
+данному случае зеленому).
+
+ Есть несколько полезных цветовых схем. Строка `kw' дает обычную
+серую (черно-белую) схему, когда большие значения светлее. Строка `wk'
+представляет обратную серую схему, когда большие значения темнее.
+Строки `kRryw', `kGgw', `kBbcw' представляют собой хорошо известные
+схемы _hot_, _summer_ и _winter_. Строки `BbwrR' и `bBkRr' позволяют
+рисовать двухцветные фигуры на белом или черном фоне, когда
+отрицательные значения показаны синим цветом, а положительные -
+красным. Строка `BbcyrR' дает цветовую схему, близкую к хорошо
+известной схеме _jet_.
+
+\0\b[image src="../png/color_schemes.png"\0\b]
+
+Наиболее популярные цветовые схемы.
+
+ При определении цвета по _положению точки в пространстве_
+окончательный цвет определяется по формуле c=x*c[1] + y*c[2] + z*c[3].
+Здесь c[1], c[2], c[3] - первые три цвета в цветовом массиве; x, y, z -
+координаты точки, нормированные на MINxMAX. Такой тип определения цвета
+полезен, например, при построении поверхностей уровня, когда цвет дает
+представление о положении точки в пространстве.
+
+\1f
+File: mgl_ru.info, Node: Font styles, Next: Textual formulas, Prev: Color scheme, Up: General concepts
+
+1.1.4 Стиль текста
+-----------------------------
+
+Стиль текста задается строкой, которая может содержать несколько
+символов: тип шрифта (`ribwou') и/или выравнивания (`LRC'), а также
+цвет текста `wkrgbcymhRGBCYMHW' (*note Line styles::) после символа
+`:'. Например, `biC:b' соответствует жирному курсиву с выравниванием по
+центру синего цвета.
+
+ Начертания шрифта: `r' - прямой шрифт, `i' - курсив, `b' - жирный.
+По умолчанию используется прямой шрифт. Типы выравнивания текста: `L' -
+по левому краю (по умолчанию), `C' - по центру, `R' - по правому краю.
+Дополнительные эффекты шрифта: `w' - контурный, `o' - надчеркнутый, `u'
+- подчеркнутый.
+
+ Синтаксический разбор LaTeX-их команд по умолчанию включен. Это
+команды смены стиля текста (например, \b для жирного текста): \a или
+\overline - надчеркивание, \b или \textbf - жирный, \i или \textit -
+курсив, \r или \textrm - прямой (отменяет стили жирного и курсива), \u
+или \underline - подчеркнутый, \w или \wire - контурный, \big -
+большего размера, @ - меньшего размера. Нижний и верхний индексы
+задаются символами `_' и `^'. При этом изменение стиля применяется
+только к следующему символу или к символам в фигурных скобках {},
+которые понимаются как единый блок. Например, сравните строки `sin
+(x^{2^3})' и `sin (x^2^3)'. Можно также менять цвет текста внутри
+строки с помощью команд #? или \color?, где `?' - символ цвета (*note
+Line styles::). Например, слова `Blue' и `red' будут окрашены в
+соответствующий цвет в строке `#b{Blue} and \colorr{red} text'.
+Большинство функций понимает символ новой строки `\n' и позволяет
+выводить много строчный текст. Наконец, можно использовать символы с
+произвольным UTF кодом с помощью команды `\utf0x????'. Например,
+`\utf0x3b1' даст символ \alpha.
+
+ Распознаются также большинство символов TeX и AMSTeX, команды смены
+стиля текста (\textrm, \textbf, \textit, \textsc, \overline,
+\underline), акценты (\hat, \tilde, \dot, \ddot, \acute, \check,
+\grave, \bar, \breve) и корни (\sqrt, \sqrt3, \sqrt4). Полный список
+содержит около 2000 символов. Отмечу, что первый пробел (пробел,
+табуляция и пр.) после команды игнорируется, а все остальные пробелы
+печатаются обычным образом. Например, следующие строки дают одинаковый
+результат \tilde a: `\tilde{a}'; `\tilde a'; `\tilde{}a'.
+
+ В частности, распознаются греческие буквы: \alpha - \alpha, \beta -
+\beta, \gamma - \gamma, \delta - \delta, \epsilon - \epsilon, \eta -
+\eta, \iota - \iota, \chi - \chi, \kappa - \kappa, \lambda - \lambda,
+\mu - \mu, \nu - \nu, o - \o, \omega - \omega, \phi - \phi, \pi - \pi,
+\psi - \psi, \rho - \rho, \sigma - \sigma, \theta - \theta, \tau -
+\tau, \upsilon - \upsilon, \xi - \xi, \zeta - \zeta, \varsigma -
+\varsigma, \varepsilon - \varepsilon, \vartheta - \vartheta, \varphi -
+\varphi, A - \Alpha, B - \Beta, \Gamma - \Gamma, \Delta - \Delta, E -
+\Epsilon, H - \Eta, I - \Iota, C - \Chi, K - \Kappa, \Lambda - \Lambda,
+M - \Mu, N - \Nu, O - \O, \Omega - \Omega, \Phi - \Phi, \Pi - \Pi, \Psi
+- \Psi, R - \Rho, \Sigma - \Sigma, \Theta - \Theta, T - \Tau, \Upsilon
+- \Upsilon, \Xi - \Xi, Z - \Zeta.
+
+ Еще примеры наиболее общеупотребительных TeX-их символов: \angle -
+\angle, \aleph - \aleph, \cdot - \cdot, \clubsuit - \clubsuit, \cup -
+\cup, \cap - \cap, \diamondsuit - \diamondsuit, \diamond - \diamond,
+\div - \div, \downarrow - \downarrow, \dag - \dag, \ddag - \ddag,
+\equiv - \equiv, \exists - \exists, \frown - \frown, \flat - \flat, \ge
+- \ge, \geq - \geq, \gets - \gets, \heartsuit - \heartsuit, \infty -
+\infty, \in - \in, \int - \int, \Im - \Im, \langle - \langle, \le -
+\le, \leq - \leq, \leftarrow - \leftarrow, \mp - \mp, \nabla - \nabla,
+\ne - \ne, \neq - \neq, \natural - \natural, \oint - \oint, \odot -
+\odot, \oplus - \oplus, \partial - \partial, \parallel - \parallel,
+\perp - \perp, \pm - \pm, \propto - \propto, \prod - \prod, \Re - \Re,
+\rightarrow - \rightarrow, \rangle - \rangle, \spadesuit - \spadesuit,
+\sim - \sim, \smile - \smile, \subset - \subset, \supset - \supset,
+\surd - \sqrt or \surd, \S - \S, \sharp - \sharp, \sum - \sum, \times -
+\times, \to - \to, \uparrow - \uparrow, \wp - \wp and so on.
+
+ Размер текста может быть задан явно (если SIZE>0) или относительно
+базового размера шрифта для рисунка |SIZE|*FONTSIZE при SIZE<0.
+Значение SIZE=0 указывает, что соответствующая строка выводиться не
+будет. Базовый размер шрифта измеряется во внутренних единицах.
+Специальные функции `SetFontSizePT(), SetFontSizeCM(), SetFontSizeIN()'
+позволяют задавать его в более "привычных" единицах.
+
+\1f
+File: mgl_ru.info, Node: Textual formulas, Prev: Font styles, Up: General concepts
+
+1.1.5 Текстовые формулы
+---------------------------------------
+
+MathGL имеет быстрый парсер текстовых формул , понимающий большое число
+функций и операций. Базовые операции: `+' - сложение, `-' - вычитание,
+`*' - умножение, `/' - деление, `^' - возведение в целосичленную
+степень. Также есть логические операции: `<' - истина если if x<y, `>'
+- истина если x>y, `=' - истина если x=y, `&' - истина если x и y оба
+не равны нулю, `|' - истина если x или y не нуль. Логические операции
+имеют наинизший приоритет и возвращают 1 если истина или 0 если ложно.
+
+ Базовые функции: `sqrt(x)' - квадратный корень из X, `pow(x,y)' - X
+в степени Y, `ln(x)' - натуральный логарифм X, `lg(x)' - десятичный
+логарифм X, `log(a,x)' - логарифм по основанию A от X, `abs(x)' -
+модуль X, `sign(x)' - знак X, `mod(x,y)' - остаток от деления x на y,
+`step(x)' - ступенчатая функция, `int(x)' - целая часть X, `rnd' -
+случайное число, `pi' - число \pi=3.1415926...
+
+ Тригонометрические функции: `sin(x)', `cos(x)', `tan(x)' (или
+`tg(x)'). Обратные тригонометрические функции: `asin(x)', `acos(x)',
+`atan(x)'. Гиперболические функции: `sinh(x)' (или `sh(x)'), `cosh(x)'
+(или `ch(x)'), `tanh(x)' (или `th(x)'). Обратные гиперболические
+функции: `asinh(x)', `acosh(x)', `atanh(x)'.
+
+ Специальные функции: `gamma(x)' - гамма функция \Gamma(x) =
+\int_0^\infty dt t^{x-1} \exp(-t) , `psi(x)' - дигамма функция \psi(x)
+= \Gamma</samp>’(x)/\Gamma(x) для x!=0, `ai(x)' - Эйри функция
+Ai(x), `bi(x)' - Эйри функция Bi(x), `cl(x)' - функция Клаузена,
+`li2(x)' (или `dilog(x)') - дилогарифм Li_2(x) = - \Re \int_0^x ds
+\log(1-s)/s, `sinc(x)' - функция sinc(x) = \sin(\pi x) / (\pi x) для
+любых x, `zeta(x)' - зета функция Римана \zeta(s) = \sum_{k=1}^\infty
+k^{-s} для s!=1, `eta(x)' - эта функция \eta(s) = (1-2^{1-s}) \zeta(s)
+для произвольного s, `lp(l,x)' - полином Лежандра P_l(x), (|x|<=1,
+l>=0), `w0(x)', `w1(x)' - функции Ламберта W. Функции W(x) определены
+как решение уравнения W \exp(W) = x.
+
+ Экспоненциальные интегралы: `ci(x)' - cos-интеграл Ci(x) = \int_0^x
+dt \cos(t)/t, `si(x)' - sin-интеграл Si(x) = \int_0^x dt \sin(t)/t,
+`erf(x)' - функция ошибки erf(x) = (2/\sqrt(\pi)) \int_0^x dt
+\exp(-t^2), `ei(x)' - интеграл Ei(x) := - PV(\int_{-x}^\infty dt
+\exp(-t)/t) (где PV обозначает главное значение), `e1(x)' - интеграл
+E_1(x) := Re \int_1^\infty dt \exp(-xt)/t , `e2(x)' - интеграл E_2(x)
+:= Re \int_1^\infty dt \exp(-xt)/t^2, `ei3(x)' - интеграл Ei_3(x) =
+\int_0^x dt \exp(-t^3) для x>=0.
+
+ Функции Бесселя: `j(nu,x)' - функция Бесселя первого рода, `y(nu,x)'
+- функция Бесселя второго рода, `i(nu,x)' - модифицированная функция
+Бесселя первого рода, `k(nu,x)' - модифицированная функция Бесселя
+второго рода.
+
+ Эллиптические интегралы: `ee(k)' - полный эллиптический интеграл
+E(k) = E(\pi/2, k), `ek(k)' - полный эллиптический интеграл K(k) =
+F(\pi/2, k), `e(phi,k)' - эллиптический интеграл E(\phi,k) =
+\int_0^\phi dt \sqrt((1 - k^2 \sin^2(t))), `f(phi,k)' - эллиптический
+интеграл F(\phi,k) = \int_0^\phi dt 1/\sqrt((1 - k^2 \sin^2(t))).
+
+ Функции Якоби: `sn(u,m)', `cn(u,m)', `dn(u,m)', `sc(u,m)',
+`sd(u,m)', `ns(u,m)', `cs(u,m)', `cd(u,m)', `nc(u,m)', `ds(u,m)',
+`dc(u,m)', `nd(u,m)'.
+
+ Некоторые из функций могут быть недоступны если флаг NO_GSL был
+определен при компиляции библиотеки MathGL.
+
+ При разборе формул нет различия между верхним и нижним регистром.
+Если аргумент лежит вне области определения функции, то возвращается
+NaN.
+
+\1f
+File: mgl_ru.info, Node: Graphics setup, Next: Axis settings, Prev: General concepts, Up: MGL interface
+
+1.2 Настройка графика
+=====================================
+
+Команды в этой группе влияют на вид всего рисунка. Соответственно они
+должны располагаться _перед_ вызовом функций непосредственно рисующих
+графики.
+
+* Menu:
+
+* Transparency ::
+* Lighting ::
+* Fog ::
+* Default sizes ::
+* Zooming ::
+* Cutting ::
+* Other settings ::
+
+\1f
+File: mgl_ru.info, Node: Transparency, Next: Lighting, Up: Graphics setup
+
+1.2.1 Прозрачность
+------------------------------
+
+Эти команды настраивают тип и степень прозрачности поверхностей.
+Главной является функция *note alpha::, которая включает/выключает
+прозрачность для всех графиков, созданных после вызова *note alpha::.
+Функция *note alphadef:: устанавливает величину alpha-канала по
+умолчанию. Прозрачность можно выключить для отдельного графика с
+помощью *note transparent::. Наконец, функция *note transptype:: задает
+тип прозрачности. См. раздел *note Transparent surface sample::, для
+примеров кода и графика.
+
+ -- Команда MGL: alpha `[val=on]'
+ Включает/выключает прозрачность для _всего_ рисунка. По умолчанию
+ прозрачность выключена. Используйте `transparent off' для
+ конкретного графика для выключения прозрачности.
+
+ -- Команда MGL: alphadef `val'
+ Задает значение прозрачности по умолчанию для всех графиков.
+ Начальное значение 0.5.
+
+ -- Команда MGL: transparent `val'
+ Временно включает/возвращает прозрачность графиков.
+
+ -- Команда MGL: transptype `val'
+ Задает тип прозрачности. Обычная прозрачность (`0') - "закрытые"
+ объекты видны меньше чем закрывающие. "Стеклянная" прозрачность
+ (`1') - закрытые и закрывающие объекты единообразно ослабляют
+ интенсивность света (по RGB каналам). "Ламповая" прозрачность
+ (`2') - закрытые и закрывающие объекты являются источниками
+ дополнительного освещения (рекомендую установить `alphadef 0.3'
+ или меньше в этом случае). *Note Normal transparency::, *note
+ Glass-like transparency::, *note Lamp-like transparency::.
+
+\1f
+File: mgl_ru.info, Node: Lighting, Next: Fog, Prev: Transparency, Up: Graphics setup
+
+1.2.2 Освещение
+------------------------
+
+Эти функции настраивают освещение графика. Главная функция *note
+light:: включает/выключает освещение графиков построенных после ее
+вызова. MathGL поддерживает до 10 независимых источников света.
+Положение, цвет, яркость каждого источника света можно задавать по
+отдельности. По умолчанию включен только первый (с порядковым номером
+`0') источник света белого цвета, расположенный сверху.
+
+ -- Команда MGL: light `[val=on]'
+ Включает/выключает освещение графика. По умолчанию освещение
+ выключено.
+
+ -- Команда MGL: light `n val'
+ Включает/выключает N-ый источник света.
+
+ -- Команда MGL: light `n xpos ypos zpos' ['col'='w' `br=0.5']
+ Добавляет источник света с номером N в положение {XPOS, YPOS,
+ ZPOS} с цветом COL и яркостью BR, которая должна быть в диапазоне
+ [0,1].
+
+ -- Команда MGL: ambient `val'
+ Задает яркость рассеянного освещения. Значение должно быть в
+ диапазоне [0,1].
+
+\1f
+File: mgl_ru.info, Node: Fog, Next: Default sizes, Prev: Lighting, Up: Graphics setup
+
+1.2.3 Туман
+----------------
+
+ -- Команда MGL: fog `val [dz=0.25]'
+ Имитирует туман на графике. Туман начинается на относительном
+ расстоянии DZ от точки обзора и его плотность растет
+ экспоненциально вглубь по закону ~1-exp(-d*z). Здесь _z_ -
+ нормализованная на 1 глубина графика. Если D=`0' то туман
+ отсутствует. См. раздел *note Surface in fog sample::, для
+ примеров кода и графика.
+
+\1f
+File: mgl_ru.info, Node: Default sizes, Next: Zooming, Prev: Fog, Up: Graphics setup
+
+1.2.4 Базовые размеры
+-----------------------------------
+
+Эти команды задают величины большинства параметров графика, включая
+размеры маркеров, стрелок, толщину линий и т.д. Как и любые другие
+настройки, они подействуют только на графики созданные после изменения
+настроек.
+
+ -- Команда MGL: barwidth `val'
+ Относительный размер прямоугольников в `bars, barh, boxplot'.
+ Значение по умолчанию `0.7'.
+
+ -- Команда MGL: marksize `val'
+ Размер маркеров для *note 1D plotting::. Значение по умолчанию `1'.
+
+ -- Команда MGL: arrowsize `val'
+ Размер стрелок для *note 1D plotting::, линий и кривых (*note
+ Primitives drawing::). Значение по умолчанию `1'.
+
+ -- Команда MGL: linewidth `val'
+ Базовая толщина линий. Значения <1 игнорируются. Для значений >1
+ реальная толщина получается перемножением указанной ширины линии
+ на данное значение. Увеличение ширины линии актуально для больших
+ растровых рисунков. Значение по умолчанию `1'.
+
+ -- Команда MGL: ticklen `val' [`stt=1']
+ Относительная длина меток осей координат. Значение по умолчанию
+ `0.1'. Параметр STT>0 задает относительную длину подметок, которые
+ в `sqrt(1+stt)' раз меньше.
+
+ -- Команда MGL: tickstl 'stl' ['sub'="]
+ Стиль меток (STL) и подметок (SUB) осей координат. Если `stl=''',
+ то используется стиль по умолчанию (`k' или `w' в зависимости от
+ типа прозрачности). Если `sub=''', то используется стиль меток
+ (т.е. STL).
+
+\1f
+File: mgl_ru.info, Node: Zooming, Next: Cutting, Prev: Default sizes, Up: Graphics setup
+
+1.2.5 Масштабирование
+------------------------------------
+
+Эти команды управляют масштабированием всего рисунка (*note zoom::) или
+отдельной картинки (*note plotfactor::). Обычно эти функции
+используются для удаления пустого места вокруг графиков.
+
+ -- Команда MGL: plotfactor `val'
+ Масштаб картинки (значение должно быть больше 1). Не рекомендуется
+ устанавливать значения меньше 1.5. Это аналог *note zoom::, но
+ применяется только к конкретной картинке, заданной *note inplot::.
+ Используйте ноль для включения автоматического масштабирования.
+
+ -- Команда MGL: zoom `x1 y1 x2 y2'
+ Масштабирует весь рисунок. После вызова функции текущий график
+ будет очищен и в дальнейшем рисунок будет содержать только область
+ [x1,x2]*[y1,y2] от исходного рисунка. Координаты X1, X2, Y1, Y2
+ меняются в диапазоне от 0 до 1. Внимание! эти настройки не могут
+ быть переписаны никакими другими функциями. Используйте `zoom 0 0
+ 1 1' для перехода в масштаб по умолчанию.
+
+\1f
+File: mgl_ru.info, Node: Cutting, Next: Other settings, Prev: Zooming, Up: Graphics setup
+
+1.2.6 Обрезание
+------------------------
+
+Эти команды задают условия когда точка будет исключена (вырезана) из
+рисования. Замечу, что все точки со значением(-ями) `nan' по одной из
+координат или амплитуде автоматически исключаются из рисования.
+
+ -- Команда MGL: cut `val'
+ Задает обрезание точек за пределами осей координат. Если `on' то
+ такие точки исключаются из рисования (это по умолчанию) иначе они
+ проецируются на ограничивающий прямоугольник.
+
+ -- Команда MGL: cut `x1 y1 z1 x2 y2 z2'
+ Задает границы параллелепипеда внутри которого точки не рисуются.
+ Если границы одинаковы (переменные равны), то параллелепипеда
+ считается пустым. См. раздел *note CutMinMax sample::, для
+ примеров кода и графика.
+
+ -- Команда MGL: cut 'cond'
+ Задает условие обрезания по формуле COND. Это условие исключает
+ точки из рисования если результат вычисления формулы не равен
+ нулю. Установите аргумент `''' для выключения условия обрезания.
+ См. раздел *note CutOff sample::, для примеров кода и графика.
+
+\1f
+File: mgl_ru.info, Node: Other settings, Prev: Cutting, Up: Graphics setup
+
+1.2.7 Прочие настройки
+-------------------------------------
+
+ -- Команда MGL: font 'fnt' [`val=6']
+ Задает стиль и размер шрифта (*note Text printing::). Вначале
+ используется `rC' - прямой шрифт с выравниванием по центру. По
+ умолчанию размер подписей оси координат в 1.4 раза больше.
+
+ -- Команда MGL: rotatetext `val'
+ Включает/выключает вращение меток и подписей осей координат вдоль
+ оси. Начальное значение `on'.
+
+ -- Команда MGL: palette 'colors'
+ Задает палитру как последовательность цветов. Значение по
+ умолчанию `"Hbgrcmyhlnqeup"', что соответствует цветам: темно
+ серый `H', синий `b', зеленый `g', красный `r', голубой `c',
+ малиновый `m', желтый `y', серый `h', сине-зеленый `l',
+ небесно-голубой `n', оранжевый `q', желто-зеленый `e',
+ сине-фиолетовый `u', фиолетовый `p'. Палитра в основном
+ используется в 1D графиках (*note 1D plotting::) для кривых с
+ неопределенным стилем линии.
+
+ -- Команда MGL: meshnum `num'
+ Задает ориентировочное число линий в *note mesh::, *note fall::,
+ *note grid::, число стрелок (штрихов) в *note vect::, *note dew::
+ и число ячеек в *note cloud::. По умолчанию (=0) рисуются все
+ линии, стрелки, ячейки.
+
+ -- Команда MGL: axialdir 'dir'
+ Задает ось вращения для *note axial::, *note torus::. По умолчанию
+ это 'z'.
+
+\1f
+File: mgl_ru.info, Node: Axis settings, Next: Transformation matrix, Prev: Graphics setup, Up: MGL interface
+
+1.3 Параметры осей координат
+==================================================
+
+Этот большой набор команд определяет вид осей и меток координат. Перед
+построением для каждой точки выполняются 3 преобразования: сначала
+определяется возможность рисования точки (*note Cutting::), далее
+применяются формулы перехода к криволинейным координатам и наконец
+точка отображается.
+
+ -- Команда MGL: axis `x1 y1 x2 y2'
+ -- Команда MGL: axis `x1 y1 z1 x2 y2 z2'
+ -- Команда MGL: ranges `x1 x2 y1 y2 [z1=0 z2=0]'
+ Задает диапазон изменения координат. Если минимальное и
+ максимальное значение координаты равны, то они игнорируются по
+ данному направлению. Также устанавливает размер цветовой шкалы,
+ аналогично команде `caxis z1 z2'. Начальные диапазоны равны [-1,
+ 1].
+
+ -- Команда MGL: axis 'fx' 'fy' ['fz'=" 'fa'="]
+ Задает формулы перехода к криволинейным координатам. Каждая строка
+ является математическим выражением, зависящим от старых координат
+ `x', `y', `z' и `a' или `c' для цветовой шкалы. Например, для
+ цилиндрических координат будет `axis 'x*cos(y)' 'x*sin(y)' 'z''.
+ Для удаления формул соответствующий параметр должен быть пустым
+ `'''. Использование формул преобразования слегка замедляет
+ программу, т.е.. `axis '' '' ''' быстрее чем `axis '1*x' '1*y'
+ '1*z''. Параметр FA задает аналогичную формулу для цветовой шкалы.
+ *Note Textual formulas::.
+
+ -- Команда MGL: axis `how'
+ Устанавливает одну из предопределенных систем криволинейных
+ координат в зависимости от параметра HOW: `0' - декартова система
+ (нет преобразования координат, наиболее быстрая); `1' - полярные
+ координаты x_n=x*cos(y),y_n=x*sin(y), z_n=z; `2' - сферические
+ координаты x_n=x*sin(y)*cos(z), y_n=x*sin(y)*sin(z), z_n=x*cos(y);
+ `3' - параболические координаты x_n=x*y, y_n=(x*x-y*y)/2, z_n=z;
+ `4' - Paraboloidal coordinates x_n=(x*x-y*y)*cos(z)/2,
+ y_n=(x*x-y*y)*sin(z)/2, z_n=x*y; `5' - Oblate coordinates
+ x_n=cosh(x)*cos(y)*cos(z), y_n=cosh(x)*cos(y)*sin(z),
+ z_n=sinh(x)*sin(y); `6' - Prolate coordinates
+ x_n=sinh(x)*sin(y)*cos(z), y_n=sinh(x)*sin(y)*sin(z),
+ z_n=cosh(x)*cos(y); `7' - эллиптические координаты
+ x_n=cosh(x)*cos(y), y_n=sinh(x)*sin(y), z_n=z; `8' - тороидальные
+ координаты x_n=sinh(x)*cos(z)/(cosh(x)-cos(y)),
+ y_n=sinh(x)*sin(z)/(cosh(x)-cos(y)), z_n=sin(y)/(cosh(x)-cos(y));
+ `9' - бисферические координаты x_n=sin(y)*cos(z)/(cosh(x)-cos(y)),
+ y_n=sin(y)*sin(z)/(cosh(x)-cos(y)), z_n=sinh(x)/(cosh(x)-cos(y));
+ `10' - биполярные координаты x_n=sinh(x)/(cosh(x)-cos(y)),
+ y_n=sin(y)/(cosh(x)-cos(y)), z_n=z.
+
+ -- Команда MGL: caxis `z1 z2'
+ Задает масштаб цветовой шкалы (c-координаты). Эти значения
+ используются для определения цвета поверхностей и прочих 2D и 3D
+ графиков. Начальный диапазон равен [-1, 1].
+
+ -- Команда MGL: origin `x0 y0 [z0=nan]'
+ Задает центр пересечения осей координат. Если одно из значений
+ равно `nan', то выбрается оптимальное положение осей координат по
+ этому направлению.
+
+ -- Команда MGL: ternary `val'
+ Задает рисование треугольных (Ternary) осей координат. Это
+ специальный тип графика для 3 зависимых координат (компонент) A,
+ B, C таких, что A+B+C=1. MathGL использует только 2 независимые
+ координаты A=x и B=y поскольку их достаточно для построения всех
+ графиков. При этом третья координата z является независимым
+ параметром для построения линий уровня, поверхностей и т.д. См.
+ раздел *note Ternary plot sample::, для примеров кода и графика.
+
+ -- Команда MGL: xrange dat [`add=off fact=0']
+ -- Команда MGL: yrange dat [`add=off fact=0']
+ -- Команда MGL: zrange dat [`add=off fact=0']
+ -- Команда MGL: crange dat [`add=off fact=0']
+ Задает диапазон изменения x-,y-,z-,c- координат как минимальное и
+ максимальное значение массива DAT. Параметр ADD указывает
+ добавлять новый диапазон к существующему или заменять его.
+ Параметр FACT дополнительно расширяет диапазон на величину
+ (MAX-MIN)*FACT.
+
+ -- Команда MGL: xrange `x1 x2'
+ -- Команда MGL: yrange `x1 x2'
+ -- Команда MGL: zrange `x1 x2'
+ -- Команда MGL: crange `x1 x2'
+ Задает диапазон изменения x-,y-,z-,c- координат. См. также *note
+ axis::.
+
+ -- Команда MGL: xtick `val [sub=0 org=nan]'
+ -- Команда MGL: ytick `val [sub=0 org=nan]'
+ -- Команда MGL: ztick `val [sub=0 org=nan]'
+ -- Команда MGL: ctick `val'
+ Задает шаг меток осей VAL, число подметок NS и начальное положение
+ меток ORG. Переменная VAL задает шаг меток (если положительна) или
+ их число на оси (если отрицательна). Нулевое значение задает
+ логарифмические метки. Если ORG=`NAN', то используется значение из
+ *note origin::.
+
+ -- Команда MGL: xtick 'templ'
+ -- Команда MGL: ytick 'templ'
+ -- Команда MGL: ztick 'templ'
+ -- Команда MGL: ctick 'templ'
+ Задает шаблоны для меток вдоль x-,y-,z-оси или colorbar. Шаблон
+ может содержать и символы TeX. Если XTT, YTT, ZTT, CTT=`''', то
+ используется шаблон по умолчанию (в простейшем случае `%.2g').
+ Установка шаблона выключает автоматическое улучшение вида меток.
+
+ -- Команда MGL: xtick `val1' 'lbl1' [`val2' 'lbl2' ...]
+ -- Команда MGL: ytick `val1' 'lbl1' [`val2' 'lbl2' ...]
+ -- Команда MGL: ztick `val1' 'lbl1' [`val2' 'lbl2' ...]
+ Задает явное положение VAL и подписи LBL для меток вдоль оси.
+ Метки могут содержать и символы TeX.
+
+ -- Команда MGL: adjust ['dir'='xyzc']
+ Автоматически задает шаг меток осей, число подметок и начальное
+ положение меток для осей координат DIR в виде наиболее удобном для
+ человека.
+
+\1f
+File: mgl_ru.info, Node: Transformation matrix, Next: Export to file, Prev: Axis settings, Up: MGL interface
+
+1.4 Матрица преобразования
+===============================================
+
+Эти команды контролируют где и как график будет расположен. Существует
+определенный порядок вызова этих функций для лучшего вида графика.
+Вначале должны вызываться команды *note subplot:: или *note inplot::
+для указания местоположения вывода. После них - команды вращения *note
+rotate:: и сжатия *note aspect::. И наконец любые другие функции для
+рисования графика. Вместо вращения графика можно вызвать команды *note
+columnplot:: для расположения графиков в столбец одного над другим или
+*note stickplot:: для расположения в линейку.
+
+ -- Команда MGL: subplot `nx ny m [dx=0 dy=0]'
+ Помещает последующий вывод в M-ую ячейку сетки размером NX*NY от
+ всего рисунка. Функция сбрасывает матрицу трансформации (повороты
+ и сжатие графика) и должна вызываться первой для создания
+ "подграфика". С эстетической точки зрения не рекомендуется
+ вызывать эту функцию с различными (или не кратными) размерами
+ сетки. Ячейка может быть дополнительно сдвинута относительно
+ своего обычного положения на относительный размер DX, DY.
+
+ -- Команда MGL: subplot `nx ny m' 'style'
+ Аналогично предыдущему, но место для осей/colorbar резервируется
+ только если строка STYLE содержит: `L' или `<' - с левого края,
+ `R' или `>' - с правого края, `A' или `^' - с верхнего края, `U'
+ или `_' - с нижнего края.
+
+ -- Команда MGL: inplot `x1 x2 y1 y2 [rel=off]'
+ Помещает последующий вывод в прямоугольную область [X1, X2]*[Y1,
+ Y2] (исходный размер [0,1]*[0,1]). Эта функция позволяет поместить
+ график в произвольную область рисунка. Если параметр REL=`on', то
+ используется позиция относительно текщего *note subplot:: (или
+ *note inplot:: с REL=`off'). Функция сбрасывает матрицу
+ трансформации (повороты и сжатие графика) и должна вызываться
+ первой для создания "подграфика".
+
+ -- Команда MGL: columnplot `num ind [d=0]'
+ Помещает последующий вывод в IND-ую строку столбца из NUM строк.
+ Положение столбца выбирается относительно последнего вызова *note
+ subplot:: (или *note inplot:: с REL=`off'). Параметр D задает
+ дополнительный зазор между строк. См. раздел *note ColumnPlot
+ sample::, для примеров кода и графика.
+
+ -- Команда MGL: stickplot `num ind tet phi'
+ Помещает последующий вывод в IND-ую ячейку "бруска" из NUM ячеек.
+ При этом сам брусок повернут на углы TET, PHI. Положение
+ выбирается относительно последнего вызова *note subplot:: (или
+ *note inplot:: с REL=`off'). См. раздел *note StickPlot sample::,
+ для примеров кода и графика.
+
+ -- Команда MGL: rotate `tetz tetx [tety=0]'
+ Вращает систему координат относительно осей {x, z, y}
+ последовательно на углы TETX, TETZ, TETY.
+
+ -- Команда MGL: rotate `tet x y z'
+ Вращает систему координат относительно вектора {X, Y, Z} на угол
+ TET.
+
+ -- Команда MGL: aspect `ax ay [az=1]'
+ Устанавливает соотношение размеров осей в отношении AX:AY:AZ. Для
+ лучшего вида следует вызывать после функции *note rotate::.
+
+ -- Команда MGL: perspective `val'
+ Добавляет (включает) перспективу для графика. Параметр val ~
+ 1/z_{eff} \in [0,1). По умолчанию (`val=0') перспектива отключена.
+
+\1f
+File: mgl_ru.info, Node: Export to file, Next: Primitives drawing, Prev: Transformation matrix, Up: MGL interface
+
+1.5 Экспорт в файл
+==============================
+
+ -- Команда MGL: write 'fname' [`solid=off']
+ Экспортирует текущий кадр в файл 'fname' (тип определяется по
+ расширению). Параметр SOLID задает вывод картинки на текущем фоне
+ (обычно белом) или полупрозрачной. Если 'fname'=", то используется
+ имя `frame####.jpg', где `####' - текущий номер кадра.
+
+ -- Команда MGL: setsize `w h'
+ Изменяет размер картинки в пикселях. Функция должна вызываться
+ *перед* любыми функциями построения потому что полностью очищает
+ содержимое рисунка. В некоторых программах исполнение этой команды
+ может запрещено.
+
+\1f
+File: mgl_ru.info, Node: Primitives drawing, Next: Text printing, Prev: Export to file, Up: MGL interface
+
+1.6 Рисование примитивов
+===========================================
+
+Эти команды рисуют рисуют простые объекты типа линий, точек, сфер,
+капель, конусов, и т.д.
+
+ -- Команда MGL: clf
+ Очищает рисунок и заполняет его цветом по умолчанию (обычно белым).
+
+ -- Команда MGL: ball `x y' ['col'='r']
+ -- Команда MGL: ball `x y z' ['col'='r']
+ Рисует точку (шарик) с координатами {X, Y, Z} и цветом COL.
+
+ -- Команда MGL: line `x1 y1 x2 y2' ['stl'="]
+ -- Команда MGL: line `x1 y1 z1 x2 y2 z2' ['stl'="]
+ Рисует геодезическую линию (декартовых координатах - прямую) из
+ точки {X1,Y1,Z1} в {X2,Y2,Z2} использую стиль линии STL. Кривая
+ рисуется даже если часть ее лежит вне диапазона осей координат.
+
+ -- Команда MGL: curve `x1 y1 dx1 dy1 x2 y2 dx2 dy2' ['stl'="]
+ -- Команда MGL: curve `x1 y1 z1 dx1 dy1 dz1 x2 y2 z2 dx2 dy2 dz2'
+ ['stl'="]
+ Рисует кривую Безье из точки {X1,Y1,Z1} в {X2,Y2,Z2} использую
+ стиль линии STL. Касательные в точках пропорциональны
+ {DX1,DY1,DZ1}, {DX2,DY2,DZ2}. Кривая рисуется даже если часть ее
+ лежит вне диапазона осей координат.
+
+ -- Команда MGL: facex `x0 y0 z0 wy wz' ['stl'=" `d1=0 d2=0']
+ -- Команда MGL: facey `x0 y0 z0 wx wz' ['stl'=" `d1=0 d2=0']
+ -- Команда MGL: facez `x0 y0 z0 wx wy' ['stl'=" `d1=0 d2=0']
+ Рисует закрашенный прямоугольник (грань) перпендикулярно оси
+ [x,y,z] в точке {X0, Y0, Z0} цветом STL и шириной WX, WY, WZ вдоль
+ соответствующего направления. При этом цвет может быть один для
+ всей грани, или различным для разных вершин если указаны все 4
+ цвета (полезно для градиента цвета, например `wwrr'). Параметры
+ D1!=0, D2!=0 задают дополнительный сдвиг последней точки (т.е.
+ рисуют четырехугольник). Грань будет нарисована даже если часть ее
+ лежит вне диапазона осей координат.
+
+ -- Команда MGL: sphere `x0 y0 r' ['col'='r']
+ -- Команда MGL: sphere `x0 y0 z0 r' ['col'='r']
+ Рисует сферу радиуса R с центром в точке {X, Y, Z} цветом STL.
+
+ -- Команда MGL: drop `x0 y0 dx dy r' ['col'='b' `sh=1 asp=1']
+ -- Команда MGL: drop `x0 y0 z0 dx dy dz r' ['col'='b' `sh=1 asp=1']
+ Рисует каплю радиуса R в точке {X0,Y0,Z0} вытянутую вдоль
+ направления {DX,DY,DZ} цветом COL. Параметр SH определяет степень
+ вытянутости: `0' - сфера, `1' - классическая капля. Параметр ASP
+ определяет относительную ширину капли (аналог "эллиптичности" для
+ сферы). См. раздел *note Drops sample::, для примеров кода и
+ графика.
+
+ -- Команда MGL: cone `x1 y1 z1 x2 y2 z2 r1' [`r2=-1' 'stl'="
+ `edge=off']
+ Рисует трубу (или усеченный конус если EDGE=`off') между точками
+ {X1,Y1,Z1}, {X2,Y2,Z2} с радиусами на концах R1, R2. Если R2<0, то
+ полагается R2=R1. Цвет конуса задается строкой STL.
+
+ -- Команда MGL: rect `x1 y1 x2 y2' ['st'="]
+ -- Команда MGL: rect `x1 y1 z1 x2 y2 z2' ['st'="]
+ Рисует закрашенный прямоугольник (грань) с противоположными
+ вершинами в точках {X1,Y1,Z1}, {X2,Y2,Z2} цветом STL. При этом
+ цвет может быть один для всей грани, или различным для разных
+ вершин если указаны все 4 цвета (полезно для градиента цвета,
+ например `wwrr'). Грань будет нарисована даже если часть ее лежит
+ вне диапазона осей координат.
+
+\1f
+File: mgl_ru.info, Node: Text printing, Next: Axis and Colorbar, Prev: Primitives drawing, Up: MGL interface
+
+1.7 Вывод текста
+===========================
+
+Команды для вывода текста позволяют вывести строку текста в
+произвольном месте рисунка, в произвольном направлении и вдоль
+произвольной кривой. Можно использовать произвольное начертание шрифта
+и многие ТеХ-ие команды (детальнее *note Font styles::). Аргумент SIZE
+определяет размер текста: размер шрифта если положителен или
+относительный размер (=-SIZE*FONTSIZE) если отрицателен.
+
+ Параметры шрифта задаются строкой, которая может содержать символы
+стиля (`rbiwou') и/или выравнивания (`LRC'). Также строка может
+содержать символы цвета `wkrgbcymhRGBCYMHW' (*note Line styles::) после
+символа `:'. Стили шрифта: `r' - прямой, `i' - курсив, `b' - жирный,
+`w' - контурный, `o' - надчеркнутый, `u' - подчеркнутый. По умолчанию
+используется прямой шрифт. Типы выравнивания: `L' - по левому краю (по
+умолчанию), `C' - по центру, `R' - по правому краю. Например, строка
+`iC:b' соответствует курсиву синего цвета с выравниванием по центру. По
+умолчанию используются параметры, определенные командой *note font::.
+
+ Если строка содержит символы `aA', то текст выводится в абсолютных
+координатах (полагаются в диапазоне [0,1]). При этом используются
+координаты относительно рисунка (если указано `A') или относительно
+последнего *note subplot::/*note inplot:: (если указано `a').
+
+ -- Команда MGL: text `x y' 'text' ['fnt'=" `size=-1.4']
+ -- Команда MGL: text `x y z' 'text' ['fnt'=" `size=-1.4']
+ Выводит строку TEXT от точки {X,Y,Z} шрифтом FNT и размером SIZE.
+
+ -- Команда MGL: text `x y dx dy' 'text' [`size=-1.4']
+ -- Команда MGL: text `x y z dx dy dz' 'text' [`size=-1.4']
+ Выводит строку TEXT от точки {X,Y,Z} вдоль направления {DX,DY,DZ}
+ шрифтом FNT и размером SIZE.
+
+ -- Команда MGL: text ydat 'text' ['fnt'=" `size=-1 zval=nan']
+ -- Команда MGL: text xdat ydat 'text' ['fnt'=" `size=-1 zval=nan']
+ -- Команда MGL: text xdat ydat zdat 'text' ['fnt'=" `size=-1']
+ Выводит строку TEXT вдоль кривой {XDAT[i], YDAT[i], ZDAT[i]}
+ шрифтом FONT. Строка FONT может содержать символы: `t' для вывода
+ текста под кривой (по умолчанию), или `T' для вывода текста над
+ кривой. Если массив XDAT не указан, то используется массив со
+ значениями равно распределенными вдоль оси x. Если массив ZDAT не
+ указан, то используется ZDAT[i] = ZVAL. См. раздел *note Text
+ sample::, для примеров кода и графика.
+
+ -- Команда MGL: title 'text' ['fnt'=" `size=-2']
+ Выводит строку TEXT как заголовок (сверху рисунка). Может
+ использоваться в любом месте (даже внутри *note subplot::).
+
+ -- Команда MGL: fgets `x y' 'fname' [`n=0' 'fnt'=" `size=-1.4']
+ -- Команда MGL: fgets `x y z' 'fname' [`n=0' 'fnt'=" `size=-1.4']
+ Выводит N-ую строку файла FNAME от точки {X,Y,Z} шрифтом FNT и
+ размером SIZE.
+
+\1f
+File: mgl_ru.info, Node: Axis and Colorbar, Next: Legend, Prev: Text printing, Up: MGL interface
+
+1.8 Оси и Colorbar
+======================
+
+Эти команды рисуют объекты для "измерения" типа осей координат,
+цветовой таблицы (colorbar), сетку по осям, обрамляющий параллелепипед
+и подписи по осям координат. См. также *note Axis settings::.
+
+ -- Команда MGL: axis ['dir'='xyz' `adjust=off']
+ Рисует оси координат и метки на них (*note Axis settings::) в
+ направлениях, указанных строкой DIR. Если строка содержит символ
+ `_', то подписи меток отображаться не будут. Шрифт подписей
+ определяется командой *note font::. Метки будут "подогнаны" если
+ ADJUST=`on' (с помощью вызова `adjust 'dir'').
+
+ -- Команда MGL: colorbar ['sch'=" `pos=0']
+ Рисует полосу соответствия цвета и числовых значений (colorbar)
+ для цветовой схемы SCH (используется текущая для `sch=''') с краю
+ от графика. Параметр POS задает местоположение: `0' - справа (по
+ умолчанию), `1' - слева, `2' - сверху, `3' - снизу. Если строка
+ SCH содержит `<>^_', то параметр POS определяется как: `pos=0' для
+ `>' (справа), `pos=1' для `<' (слева), `pos=2' для `^' (сверху),
+ `pos=3' для `_' (снизу). Если строка содержит `A', то используются
+ абсолютные координаты (относительно рисунка). См. раздел *note
+ Dens sample::, для примеров кода и графика.
+
+ -- Команда MGL: colorbar vdat ['sch'=" `pos=0']
+ Аналогично предыдущему, но для цветовой схемы без сглаживания с
+ заданными значениями VDAT. См. раздел *note ContD sample::, для
+ примеров кода и графика.
+
+ -- Команда MGL: colorbar 'sch' `pos x y w h'
+ Аналогично первому, но в произвольном месте графика {X, Y}
+ (полагаются в диапазоне [0,1]). Параметры W, H задают
+ относительную ширину и высоту colorbar.
+
+ -- Команда MGL: grid ['dir'='xyz' 'pen'='B']
+ Рисует линии сетки в направлениях перпендикулярным DIR. Шаг сетки
+ такой же как у меток осей координат. Стиль линий задается
+ параметром PEN (по умолчанию - сплошная темно синяя линия `B-').
+
+ -- Команда MGL: box ['stl'='k' `ticks=on']
+ Рисует ограничивающий параллелепипед цветом 'stl'. При `ticks=on'
+ рисуются метки в соответствии с текущими настройками осей
+ координат *note axis::.
+
+ -- Команда MGL: xlabel 'text' [`pos=0 size=-1.4 shift=0']
+ -- Команда MGL: ylabel 'text' [`pos=0 size=-1.4 shift=0']
+ -- Команда MGL: zlabel 'text' [`pos=0 size=-1.4 shift=0']
+ -- Команда MGL: tlabel 'text' [`pos=0 size=-1.4 shift=0']
+ Выводит подпись TEXT для x-,y-,z-,t-оси (где `t' - "тернарная" ось
+ t=1-x-y). Параметр POS задает положение подписи: при POS=0 - по
+ центру оси, при POS>0 - около максимальных значений, при POS<0 -
+ около минимальных значений. Параметр SIZE задает размер шрифта (по
+ умолчанию в 1.4 раза больше чем у меток). *Note Text printing::.
+
+\1f
+File: mgl_ru.info, Node: Legend, Next: 1D plotting, Prev: Axis and Colorbar, Up: MGL interface
+
+1.9 Легенда
+==================
+
+Эти команды обеспечивают рисование легенды графика (полезно для *note
+1D plotting::). Запись в легенде состоит из двух строк: одна для стиля
+линии и маркеров, другая с текстом описания (с включенным разбором
+TeX-их команд), накапливаемые во внутренние массивы с помощью команды
+*note addlegend:: или опции *note legend::. Положение легенды можно
+задать автоматически или вручную. Параметры FONT и SIZE задают стиль и
+размер шрифта. Параметр LLEN задает относительную ширину примера линии.
+Ели стиль линии пустой, то соответствующий текст печатается без
+отступа. Если строка FONT содержит символ `A', то координаты легенды
+считаются относительно картинки (а не текущего subplot). См. раздел
+*note Legend sample::, для примеров кода и графика.
+
+ -- Команда MGL: legend [`pos=3' 'fnt'='rL' `size=-1 llen=0.1']
+ Рисует легенду из накопленных записей шрифтом FNT размером SIZE.
+ Параметр POS задает положение легенды: `0' - в нижнем левом углу,
+ `1' - нижнем правом углу, `2' - верхнем левом углу, `3' - верхнем
+ правом углу (по умолчанию).
+
+ -- Команда MGL: legend `x y' ['fnt'='rL' `size=-1 llen=0.1']
+ Рисует легенду из накопленных записей шрифтом FONT размером SIZE.
+ Положение легенды задается параметрами X, Y, которые полагаются
+ нормированными в диапазоне [0,1].
+
+ -- Команда MGL: addlegend 'text' 'stl'
+ Добавляет описание TEXT кривой со стилем STL (*note Line styles::)
+ во внутренний массив записей легенды. Максимальное число записей
+ 100.
+
+ -- Команда MGL: clearlegend
+ Очищает внутренний массив записей легенды.
+
+ -- Команда MGL: legendbox `val'
+ Включает/выключает рисование прямоугольника вокруг легенды. По
+ умолчанию (=`on') прямоугольник рисуется.
+
+ -- Команда MGL: legendmarks `val'
+ Задает число маркеров в легенде. По умолчанию используется 1
+ маркер.
+
+\1f
+File: mgl_ru.info, Node: 1D plotting, Next: 2D plotting, Prev: Legend, Up: MGL interface
+
+1.10 1D графики
+======================
+
+Эти команды строят графики для одномерных (1D) массивов. Одномерными
+считаются массивы, зависящие только от одного параметра (индекса)
+подобно кривой в параметрической форме {x(i),y(i),z(i)}, i=1...n. Есть
+5 основных типов 1D графиков: линия (*note plot::), линия с заполнением
+(*note area::), ступеньки (*note step::), прямоугольники (*note bars::,
+*note barh::) и вертикальные линии (*note stem::). Все эти типы
+графиков имеют похожий интерфейс. Есть версии для рисования в
+пространстве и на плоскости. В последнем случае имеется возможность
+использования только одного массива. Стиль линии и маркеров указывается
+строковой переменной. Если она равна `'''. Кроме того, есть еще
+несколько типов графиков для одномерных массивов, имеющих другой
+интерфейс и вид: поверхность вращения кривой (*note torus::), диаграмма
+(*note chart::), размер ошибки (*note error::), маркеры переменного
+размера (*note mark::), трубками (*note tube::) и т.д. См. раздел *note
+1D plot sample::, для примеров кода и графика.
+
+ График рисуется для каждой строки если один из массивов матрица.
+Размер по 1-ой координате *должен быть одинаков* для всех массивов
+`xdat.nx=ydat.nx=zdat.nx'. Если массив XDAT не указан, то используется
+массив со значениями равно распределенными вдоль оси x. Если массив
+ZDAT не указан, то используется ZDAT[i] = ZVAL. Строка STL задает цвет
+и стиль линии и маркеров (*note Line styles::). По умолчанию (`stl=''')
+рисуется сплошная линия с текущим цветом из палитры.
+
+ -- Команда MGL: plot ydat ['stl'=" `zval=nan']
+ -- Команда MGL: plot xdat ydat ['stl'=" `zval=nan']
+ -- Команда MGL: plot xdat ydat zdat ['stl'="]
+ Рисует ломанную линию между точками {X[i], Y[i], Z[i]}. См. также
+ *note area::, *note step::, *note stem::, *note tube::, *note
+ mark::, *note error::, *note belt::, *note tens::. См. раздел
+ *note Plot sample::, для примеров кода и графика.
+
+ -- Команда MGL: radar adat ['stl'=" `r=-1']
+ Рисует radar chart, представляющий собой ломанную с вершинами на
+ радиальных линиях (типа ломанной в полярных координатах). График
+ рисуется для каждой строки если один из массивов матрица. Параметр
+ R задает дополнительный сдвиг данных (т.е. используется A+R вместо
+ A). Если `r<0', то `r=max(0, -min(a)'. Если STL содержит символ
+ `#', то также рисуется "сетка" (радиальные линии и круг для R).
+ См. также *note plot::. См. раздел *note Radar sample::, для
+ примеров кода и графика.
+
+ -- Команда MGL: tens ydat cdat ['stl'=" `zval=nan']
+ -- Команда MGL: tens xdat ydat cdat ['stl'=" `zval=nan']
+ -- Команда MGL: tens xdat ydat zdat cdat ['stl'="]
+ Рисует ломанную линию по точкам {X[i], Y[i], Z[i]} с цветом,
+ определяемым массивом C[i] (типа графика натяжений). См. также
+ *note plot::, *note mesh::, *note fall::. См. раздел *note Tens
+ sample::, для примеров кода и графика.
+
+ -- Команда MGL: area ydat ['stl'=" `zval=nan']
+ -- Команда MGL: area xdat ydat ['stl'=" `zval=nan']
+ -- Команда MGL: area xdat ydat zdat ['stl'="]
+ Рисует ломанную линию по точками {XDAT[i], YDAT[i], ZDAT[i]} и
+ закрашивает ее вниз до плоскости осей координат. Можно
+ использовать градиентное закрашивание если число указанных цветов
+ в STL равно удвоенному числу кривых для построения. Если строка
+ содержит символ `a', то линии рисуются одна поверх другой (с
+ суммированием) - того же эффекта можно достичь вызовом `cumsum
+ ydat 'y'' перед построением графика. См. также *note plot::, *note
+ bars::, *note stem::, *note region::. См. раздел *note Area
+ sample::, для примеров кода и графика.
+
+ -- Команда MGL: region fdat gdat ['stl'=" `inside=off']
+ -- Команда MGL: region xdat fdat gdat ['stl'=" `inside=off']
+ Закрашивает область между 2 кривыми {XDAT[i], FDAT[i]} и {XDAT[i],
+ GDAT[i]}. При `inside=off' закрашивается только область y1<y<y2,
+ в противном случае также будет закращена область y2<y<y1. Можно
+ использовать градиентное закрашивание если число указанных цветов
+ STL равно удвоенному числу кривых для построения. См. также *note
+ area::, *note bars::, *note stem::. См. раздел *note Region
+ sample::, для примеров кода и графика.
+
+ -- Команда MGL: stem ydat ['stl'=" `zval=nan']
+ -- Команда MGL: stem xdat ydat ['stl'=" `zval=nan']
+ -- Команда MGL: stem xdat ydat zdat ['stl'="]
+ Рисует вертикальные линии из точек {XDAT[i], YDAT[i], ZDAT[i]} до
+ плоскости осей координат. См. также *note area::, *note bars::,
+ *note plot::, *note mark::. См. раздел *note Stem sample::, для
+ примеров кода и графика.
+
+ -- Команда MGL: bars ydat ['stl'=" `zval=nan']
+ -- Команда MGL: bars xdat ydat ['stl'=" `zval=nan']
+ -- Команда MGL: bars xdat ydat zdat ['stl'="]
+ Рисует вертикальные полосы (прямоугольники) из точек {XDAT[i],
+ YDAT[i], ZDAT[i]} до плоскости осей координат. Если строка STL
+ содержит символ `a', то линии рисуются одна поверх другой. Если
+ строка содержит символ `f', то рисуется график типа waterfall для
+ определения кумулятивного эффекта последовательности положительных
+ и отрицательных значений. Можно использовать разные цвета для
+ положительных и отрицательных значений если число указанных цветов
+ равно удвоенному числу кривых для построения. См. также *note
+ barh::, *note area::, *note stem::, *note chart::. См. раздел
+ *note Bars sample::, для примеров кода и графика.
+
+ -- Команда MGL: barh xdat ['stl'=" `zval=nan']
+ -- Команда MGL: barh ydat xdat ['stl'=" `zval=nan']
+ Рисует горизонтальные полосы (прямоугольники) из точек {XDAT[i],
+ YDAT[i]} до плоскости оси y. Если массив YDAT не указан, то
+ используется массив со значениями равно распределенными вдоль оси
+ y. Если строка STL содержит символ `a', то линии рисуются одна
+ поверх другой. Если строка содержит символ `f', то рисуется график
+ типа waterfall для определения кумулятивного эффекта
+ последовательности положительных и отрицательных значений. Можно
+ использовать разные цвета для положительных и отрицательных
+ значений если число указанных цветов равно удвоенному числу кривых
+ для построения. См. также *note bars::. См. раздел *note Barh
+ sample::, для примеров кода и графика.
+
+ -- Команда MGL: chart adat ['col'="]
+ Рисует цветные полосы (пояса) для массива данных ADAT. Число полос
+ равно числу строк ADAT (равно A.NY). Цвет полос поочередно
+ меняется из цветов указанных в COL или в палитре (если `col=''').
+ Пробел в цветах соответствует прозрачному "цвету", т.е.
+ соответствующая полоса не рисуется. Ширина полосы пропорциональна
+ значению элемента в ADAT. График строится только для массивов не
+ содержащих отрицательных значений. Если строка COL содержит `#',
+ то рисуется также черная граница полос. График выглядит лучше в 3d
+ (после вращения системы координат) и/или в полярной системе
+ координат (становится Pie chart). См. раздел *note Chart sample::,
+ для примеров кода и графика.
+
+ -- Команда MGL: step ydat ['stl'=" `zval=nan']
+ -- Команда MGL: step xdat ydat ['stl'=" `zval=nan']
+ -- Команда MGL: step xdat ydat zdat ['stl'="]
+ Рисует ступеньки для точек массива {XDAT[i], YDAT[i], ZDAT[i]}.
+ См. также *note plot::, *note stem::, *note tile::, *note boxs::.
+ См. раздел *note Step sample::, для примеров кода и графика.
+
+ -- Команда MGL: torus zdat ['stl'="]
+ -- Команда MGL: torus rdat zdat ['stl'="]
+ Рисует поверхность вращения кривой {RDAT[i], ZDAT[i], ZDAT[i]}
+ относительно оси *note axialdir::. Если массив RDAT не указан, то
+ используется массив со значениями равно распределенными вдоль оси
+ x. См. также *note plot::, *note axial::. См. раздел *note Torus
+ sample::, для примеров кода и графика.
+
+ -- Команда MGL: tube ydat rdat ['stl'=" `zval=nan']
+ -- Команда MGL: tube ydat `rval' ['stl'=" `zval=nan']
+ -- Команда MGL: tube xdat ydat rdat ['stl'=" `zval=nan']
+ -- Команда MGL: tube xdat ydat `rval' ['stl'=" `zval=nan']
+ -- Команда MGL: tube xdat ydat zdat rdat ['stl'="]
+ -- Команда MGL: tube xdat ydat zdat `rval' ['stl'="]
+ Рисует трубу радиуса RDAT[i] (or RVAL) вдоль кривой между точками
+ {XDAT[i], YDAT[i], ZDAT[i]}. См. также *note plot::. См. раздел
+ *note Tube sample::, для примеров кода и графика.
+
+ -- Команда MGL: mark ydat rdat ['stl'=" `zval=nan']
+ -- Команда MGL: mark xdat ydat rdat ['stl'=" `zval=nan']
+ -- Команда MGL: mark xdat ydat zdat rdat ['stl'="]
+ Рисует маркеры размером RDAT[i]*`marksize' в точках {XDAT[i],
+ YDAT[i], ZDAT[i]}. Для рисования маркеров одинакового размера
+ можно использовать функцию `plot' с невидимой линией (со стилем
+ содержащим ` '). См. также *note plot::, *note textmark::, *note
+ stem::, *note error::. См. раздел *note Mark sample::, для
+ примеров кода и графика.
+
+ -- Команда MGL: textmark ydat 'txt' ['stl'=" `zval=nan']
+ -- Команда MGL: textmark ydat rdat 'txt' ['stl'=" `zval=nan']
+ -- Команда MGL: textmark xdat ydat rdat 'txt' ['stl'=" `zval=nan']
+ -- Команда MGL: textmark xdat ydat zdat rdat 'txt' ['stl'="]
+ Рисует текст TXT как маркер с размером пропорциональным
+ RDAT[i]*`marksize' в точках {XDAT[i], YDAT[i], ZDAT[i]}. Если
+ массив RDAT не указан, то полагается RDAT[i] = 1. См. также *note
+ plot::, *note mark::, *note stem::. См. раздел *note TextMark
+ sample::, для примеров кода и графика.
+
+ -- Команда MGL: error ydat yerr ['stl'=" `zval=nan']
+ -- Команда MGL: error xdat ydat yerr ['stl'=" `zval=nan']
+ -- Команда MGL: error xdat ydat xerr yerr ['stl'=" `zval=nan']
+ Рисует размер ошибки {XERR[i], YERR[i]} в точках {XDAT[i],
+ YDAT[i]} на плоскости Z = ZVAL. Такой график полезен для
+ отображения ошибки эксперимента, вычислений и пр. См. также *note
+ plot::. См. раздел *note Error sample::, для примеров кода и
+ графика.
+
+ -- Команда MGL: boxplot adat ['stl'=" `zval=nan']
+ -- Команда MGL: boxplot xdat adat ['stl'=" `zval=nan']
+ Рисует boxplot (называемый также как box-and-whisker diagram или
+ как "ящик с усами") в точках XDAT[i] на плоскости Z = ZVAL. Это
+ график, компактно изображающий распределение вероятностей
+ ADAT[i,j] (минимум, нижний квартиль (Q1), медиана (Q2), верхний
+ квартиль (Q3) и максимум) вдоль второго (j-го) направления. См.
+ также *note plot::, *note error::, *note bars::. См. раздел *note
+ BoxPlot sample::, для примеров кода и графика.
+
+\1f
+File: mgl_ru.info, Node: 2D plotting, Next: 3D plotting, Prev: 1D plotting, Up: MGL interface
+
+1.11 2D графики
+======================
+
+Эти команды строят графики для двумерных (2D) массивов. Двумерными
+считаются массивы, зависящие только от двух параметров (индексов)
+подобно матрице f(x_i,y_j), i=1...n, j=1...m. Есть несколько основных
+типов 2D графиков: сплошная поверхность (*note surf::), сетчатая
+поверхность (*note mesh::), поверхность из ящиков (*note boxs::),
+поверхность из плиток (*note tile::), водопад (*note fall::), ленточки
+(*note belt::), график плотности (*note dens::), линии уровня (*note
+cont::), линии уровня с заполнением (*note contf::) и результат их
+вращения (*note axial::). В функциях *note cont::, *note contf:: и
+*note axial:: значения уровней можно задавать автоматически и вручную.
+Можно также нарисовать сетку (*note grid::) по массиву данных для
+улучшения вида графика плотности или линий уровня. Каждый тип графика
+имеет похожий интерфейс. Есть версия для рисования одного массива с
+автоматическими координатами и версия для параметрически заданной
+поверхности. См. раздел *note 1D plot sample::, для примеров кода и
+графика.
+
+ Строка SCH задает цветовую схему (*note Color scheme::. Предыдущая
+цветовая схема используется по умолчанию. Младшие размерности массивов
+XDAT, YDAT, ZDAT должны быть одинаковы `xdat.nx=zdat.nx &&
+ydat.nx=zdat.ny' или `xdat.nx=ydat.nx=zdat.nx &&
+xdat.ny=ydat.ny=zdat.ny'. Массивы XDAT и YDAT могут быть векторами (не
+матрицами как ZDAT). Если массивы XDAT, YDAT не указаны, то
+используются массивы со значениями равно распределенными вдоль осей x,
+y. График строится для каждого z среза данных.
+
+ -- Команда MGL: surf zdat ['sch'="]
+ -- Команда MGL: surf xdat ydat zdat ['sch'="]
+ Рисует параметрически заданную поверхность {XDAT[i,j], YDAT[i,j],
+ ZDAT[i,j]}. Если SCH содержит `#', то на поверхности рисуется
+ сетка. См. также *note mesh::, *note dens::, *note belt::, *note
+ tile::, *note boxs::, *note surfc::, *note surfa::. См. раздел
+ *note Surf sample::, для примеров кода и графика.
+
+ -- Команда MGL: mesh zdat ['sch'="]
+ -- Команда MGL: mesh xdat ydat zdat ['sch'="]
+ Рисует сетчатую поверхность, заданную параметрически {XDAT[i,j],
+ YDAT[i,j], ZDAT[i,j]}. См. также *note surf::, *note fall::, *note
+ meshnum::, *note cont::, *note tens::. См. раздел *note Mesh
+ sample::, для примеров кода и графика.
+
+ -- Команда MGL: fall zdat ['sch'="]
+ -- Команда MGL: fall xdat ydat zdat ['sch'="]
+ Рисует водопад для параметрически заданной поверхности {XDAT[i,j],
+ YDAT[i,j], ZDAT[i,j]}. График удобен для построения нескольких
+ кривых, сдвинутых вглубь друг относительно друга. Если SCH
+ содержит `x', то линии рисуются вдоль x-оси (по умолчанию линии
+ рисуются вдоль y-оси). См. также *note belt::, *note mesh::, *note
+ tens::, *note meshnum::. См. раздел *note Fall sample::, для
+ примеров кода и графика.
+
+ -- Команда MGL: belt zdat ['sch'="]
+ -- Команда MGL: belt xdat ydat zdat ['sch'="]
+ Рисует ленточки для параметрически заданной поверхности
+ {XDAT[i,j], YDAT[i,j], ZDAT[i,j]}. Если SCH содержит `x', то линии
+ рисуются вдоль x-оси (по умолчанию линии рисуются вдоль y-оси).
+ См. также *note fall::, *note surf::, *note plot::, *note
+ meshnum::. См. раздел *note Belt sample::, для примеров кода и
+ графика.
+
+ -- Команда MGL: boxs zdat ['sch'="]
+ -- Команда MGL: boxs xdat ydat zdat ['sch'="]
+ Рисует вертикальные ящики для параметрически заданной поверхности
+ {XDAT[i,j], YDAT[i,j], ZDAT[i,j]}. См. также *note surf::, *note
+ dens::, *note tile::, *note step::. См. раздел *note Boxs
+ sample::, для примеров кода и графика.
+
+ -- Команда MGL: tile zdat ['sch'="]
+ -- Команда MGL: tile xdat ydat zdat ['sch'="]
+ Рисует плитки для параметрически заданной поверхности {XDAT[i,j],
+ YDAT[i,j], ZDAT[i,j]}. График может использоваться как 3d
+ обобщение *note step::. См. также *note surf::, *note boxs::,
+ *note step::, *note tiles::. См. раздел *note Tile sample::, для
+ примеров кода и графика.
+
+ -- Команда MGL: dens zdat ['sch'=" `zval=nan']
+ -- Команда MGL: dens xdat ydat zdat ['sch'=" `zval=nan']
+ Рисует график плотности для параметрически заданной поверхности
+ {XDAT[i,j], YDAT[i,j], ZDAT[i,j]} при Z = ZVAL. Если SCH содержит
+ `#', то рисуется сетка. См. также *note surf::, *note cont::,
+ *note contf::, *note boxs::, *note tile::, `dens[xyz]'. См. раздел
+ *note Dens sample::, для примеров кода и графика.
+
+ -- Команда MGL: cont vdat zdat ['sch'=" `zval=nan']
+ -- Команда MGL: cont vdat xdat ydat zdat ['sch'=" `zval=nan']
+ Рисует линии уровня для параметрически заданной поверхности
+ {XDAT[i,j], YDAT[i,j], ZDAT[i,j]} при Z = ZVAL (или при Z=VDAT[k]
+ если `zval==nan'). Линии уровня рисуются для Z=VDAT[k]. Если SCH
+ содержит `#', то рисуется сетка. Если SCH содержит `t' или `T', то
+ значения VDAT[k] будут выведены вдоль контуров над (или под)
+ кривой. См. также *note dens::, *note contf::, *note contd::,
+ *note axial::, `cont[xyz]'. См. раздел *note Cont sample::, для
+ примеров кода и графика.
+
+ -- Команда MGL: cont zdat ['sch'=" `num=7 zval=nan']
+ -- Команда MGL: cont xdat ydat zdat ['sch'=" `num=7 zval=nan']
+ Как предыдущий с вектором V из NUM элементов равно распределенных
+ в интервале цветовой шкалы (см., *note caxis::).
+
+ -- Команда MGL: contf vdat zdat ['sch'=" `zval=nan']
+ -- Команда MGL: contf vdat xdat ydat zdat ['sch'=" `zval=nan']
+ Рисует закрашенные линии (контуры) уровня для параметрически
+ заданной поверхности {XDAT[i,j], YDAT[i,j], ZDAT[i,j]} при Z =
+ ZVAL (или при Z=V[k] если `zval=nan'). Линии уровня рисуются для
+ Z=VDAT[k]. Если SCH содержит `#', то рисуется сетка. См. также
+ *note dens::, *note cont::, *note contd::, `contf[xyz]'. См.
+ раздел *note ContF sample::, для примеров кода и графика.
+
+ -- Команда MGL: contf zdat ['sch'=" `num=7 zval=nan']
+ -- Команда MGL: contf xdat ydat zdat ['sch'=" `num=7 zval=nan']
+ Как предыдущий с вектором V из NUM элементов равно распределенных
+ в интервале цветовой шкалы (см., *note caxis::).
+
+ -- Команда MGL: contd vdat zdat ['sch'=" `zval=nan']
+ -- Команда MGL: contd vdat xdat ydat zdat ['sch'=" `zval=nan']
+ Рисует закрашенные линии (контуры) уровня для параметрически
+ заданной поверхности {XDAT[i,j], YDAT[i,j], ZDAT[i,j]} при Z =
+ ZVAL (или при Z=V[k] если `zval==nan') цветами заданными явно.
+ Линии уровня рисуются для Z=VDAT[k]. Строка SCH задает цвет
+ контуров: цвет k-го контура определяется символом
+ `sch[k%strlen(sch)]'. См. также *note dens::, *note cont::, *note
+ contf::, `cont[xyz]'. См. раздел *note ContD sample::, для
+ примеров кода и графика.
+
+ -- Команда MGL: contd zdat ['sch'=" `num=7 zval=nan']
+ -- Команда MGL: contd xdat ydat zdat ['sch'=" `num=7 zval=nan']
+ Как предыдущий с вектором V из NUM элементов равно распределенных
+ в интервале цветовой шкалы (см., *note caxis::).
+
+ -- Команда MGL: axial vdat zdat ['sch'="]
+ -- Команда MGL: axial vdat xdat ydat zdat ['sch'="]
+ Рисует поверхность вращения линии уровня для параметрически
+ заданной поверхности {XDAT[i,j], YDAT[i,j], ZDAT[i,j]}. Линии
+ уровня рисуются для ZDAT[i,j]=VDAT[k]. Если SCH содержит `#', то
+ рисуется сетчатая поверхность. Если строка содержит символы `x',
+ `y' или `z', то ось вращения устанавливается в указанное
+ направление (по умолчанию вдоль оси *note axialdir::). См. также
+ *note cont::, *note contf::, *note torus::, *note surf3::. См.
+ раздел *note Axial sample::, для примеров кода и графика.
+
+ -- Команда MGL: axial zdat ['sch'=" `num=3']
+ -- Команда MGL: axial xdat ydat zdat ['sch'=" `num=3']
+ Как предыдущий с вектором V из NUM элементов равно распределенных
+ в интервале цветовой шкалы (см., *note caxis::).
+
+ -- Команда MGL: grad pdat ['sch'=" `num=5 zval=nan']
+ -- Команда MGL: grad xdat ydat pdat ['sch'=" `num=5 zval=nan']
+ -- Команда MGL: grad xdat ydat zdat pdat ['sch'=" `num=5']
+ Рисует линии градиента скалярного поля PDAT заданного
+ параметрически {XDAT[i,j], YDAT[i,j]} или {XDAT[i,j,k],
+ YDAT[i,j,k], ZDAT[i,j,k]}. Число линий пропорционально NUM. Линии
+ рисуются только с границ интервала при NUM<0. См. также *note
+ dens::, *note cont::, *note dens3::, *note cont3::, *note flow::.
+ См. раздел *note Grad sample::, для примеров кода и графика.
+
+ -- Команда MGL: grid2 zdat ['sch'=" `zval=nan']
+ -- Команда MGL: grid2 xdat ydat zdat ['sch'=" `zval=nan']
+ Рисует плоскую сету для параметрически заданной поверхности
+ {XDAT[i,j], YDAT[i,j], ZDAT[i,j]} при Z = ZVAL. См. также *note
+ dens::, *note cont::, *note contf::.
+
+\1f
+File: mgl_ru.info, Node: 3D plotting, Next: Dual plotting, Prev: 2D plotting, Up: MGL interface
+
+1.12 3D графики
+======================
+
+Эти функции строят графики для трехмерных (3D) массивов. Трехмерными
+считаются массивы, зависящие от трех параметров (индексов) подобно
+матрице f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l. Есть 5 основных
+типов 3D графиков: поверхность постоянного уровня (*note surf3::),
+график плотности на срезе (DENS3), линии уровня на срезе (*note
+cont3::), закрашенные контуры уровня на срезе (*note contf3::) и график
+объемной прозрачности типа облака (*note cloud::). В функциях *note
+cont3::, *note contf3:: и *note surf3:: значения уровней можно задавать
+автоматически и вручную. Можно также нарисовать на срезе сетку (*note
+grid3::) по массиву данных для улучшения вида графика плотности или
+линий уровня. Каждый тип графика имеет похожий интерфейс. Есть версия
+для рисования одного массива с автоматическими координатами и версия
+для параметрически заданного массива. См. раздел *note 3D plot
+sample::, для примеров кода и графика.
+
+ Строка SCH задает цветовую схему (*note Color scheme::). Предыдущая
+цветовая схема используется по умолчанию. Массивы X, Y, Z могут быть
+векторами (не 3d массивами как A). Если массивы XDAT, YDAT, ZDAT не
+указаны, то используются массивы со значениями равно распределенными
+вдоль осей x, y, z.
+
+ -- Команда MGL: surf3 adat `val' ['sch'="]
+ -- Команда MGL: surf3 xdat ydat zdat adat `val' ['sch'="]
+ Рисует поверхность уровня для 3d массива, заданного параметрически
+ ADAT[i,j,k](XDAT[i,j,k], YDAT[i,j,k], ZDAT[i,j,k]) при
+ ADAT(x,y,z)=VAL. Если SCH содержит `#', то рисуется сетчатая
+ поверхность. См. также *note cloud::, *note dens3::, *note
+ surf3c::, *note surf3a::, *note axial::. См. раздел *note Surf3
+ sample::, для примеров кода и графика.
+
+ -- Команда MGL: surf3 adat ['sch'=" `num=5']
+ -- Команда MGL: surf3 xdat ydat zdat adat ['sch'=" `num=5']
+ Рисует NUM поверхностей уровня равномерно распределенных в
+ интервале цветовой шкалы (см. *note caxis::).
+
+ -- Команда MGL: dens3 adat 'dir' [`sval=-1' 'sch'="]
+ -- Команда MGL: dens3 xdat ydat zdat adat 'dir' [`sval=-1' 'sch'="]
+ Рисует график плотности для 3d массива, заданного параметрически
+ ADAT[i,j,k](XDAT[i,j,k], YDAT[i,j,k], ZDAT[i,j,k]). График
+ рисуется на срезе SVAL в направлении DIR={`x', `y', `z'}. Если STL
+ содержит `#', то на срезе рисуется сетка. См. также *note cont3::,
+ *note contf3::, *note dens::, *note grid3::. См. раздел *note
+ Dens3 sample::, для примеров кода и графика.
+
+ -- Команда MGL: densa adat ['sch'="]
+ -- Команда MGL: densa xdat ydat zdat adat ['sch'="]
+ Рисует графики плотности на всех центральных срезах 3d данных.
+
+ -- Команда MGL: cont3 vdat adat 'dir' [`sval=-1' 'sch'="]
+ -- Команда MGL: cont3 vdat xdat ydat zdat adat 'dir' [`sval=-1'
+ 'sch'="]
+ Рисует линии уровня для 3d массива, заданного параметрически
+ ADAT[i,j,k](XDAT[i,j,k], YDAT[i,j,k], ZDAT[i,j,k]). Линии рисуются
+ для значений из массива V на срезе SVAL в направлении DIR={`x',
+ `y', `z'}. Если STL содержит `#', то на срезе рисуется сетка. Если
+ SCH содержит `t' или `T', то значения VDAT[k] будут выведены вдоль
+ контуров над (или под) кривой. См. также *note dens3::, *note
+ contf3::, *note cont::, *note grid3::. См. раздел *note Cont3
+ sample::, для примеров кода и графика.
+
+ -- Команда MGL: cont3 adat 'dir' [`sval=-1' 'sch'=" `num=7']
+ -- Команда MGL: cont3 xdat ydat zdat adat 'dir' [`sval=-1' 'sch'="
+ `num=7']
+ Как предыдущий с вектором V из NUM элементов равно распределенных
+ в интервале цветовой шкалы (см., *note caxis::).
+
+ -- Команда MGL: conta adat ['sch'=" `num=7']
+ -- Команда MGL: conta xdat ydat zdat adat ['sch'=" `num=7']
+ Рисует линии уровня на всех центральных срезах 3d данных.
+
+ -- Команда MGL: contf3 vdat adat 'dir' [`sval=-1' 'sch'="]
+ -- Команда MGL: contf3 vdat xdat ydat zdat adat 'dir' [`sval=-1'
+ 'sch'="]
+ Рисует закрашенные линии (контуры) уровня для 3d массива,
+ заданного параметрически ADAT[i,j,k](XDAT[i,j,k], YDAT[i,j,k],
+ ZDAT[i,j,k]). Линии рисуются для значений из массива V на срезе
+ SVAL в направлении DIR={`x', `y', `z'}. Если STL содержит `#', то
+ на срезе рисуется сетка. См. также *note dens3::, *note cont3::,
+ *note contf::, *note grid3::. См. раздел *note ContF3 sample::,
+ для примеров кода и графика.
+
+ -- Команда MGL: contf3 adat 'dir' [`sval=-1' 'sch'=" `num=7']
+ -- Команда MGL: contf3 xdat ydat zdat adat 'dir' [`sval=-1' 'sch'="
+ `num=7']
+ Как предыдущий с вектором V из NUM элементов равно распределенных
+ в интервале цветовой шкалы (см., *note caxis::).
+
+ -- Команда MGL: contfa adat ['sch'=" `num=7']
+ -- Команда MGL: contfa xdat ydat zdat adat ['sch'=" `num=7']
+ Рисует закрашенные линии (контуры) уровня на всех центральных
+ срезах 3d данных.
+
+ -- Команда MGL: grid3 adat 'dir' [`sval=-1' 'sch'="]
+ -- Команда MGL: grid3 xdat ydat zdat adat 'dir' [`sval=-1' 'sch'="]
+ Рисует сетку для 3d массива, заданного параметрически
+ ADAT[i,j,k](XDAT[i,j,k], YDAT[i,j,k], ZDAT[i,j,k]). График
+ рисуется на срезе SVAL в направлении DIR={`x', `y', `z'}. См.
+ также *note cont3::, *note contf3::, *note dens3::, *note grid2::.
+
+ -- Команда MGL: grida adat ['sch'="]
+ -- Команда MGL: grida xdat ydat zdat adat ['sch'="]
+ Рисует сетку на всех центральных срезах 3d данных.
+
+ -- Команда MGL: cloud adat ['sch'="]
+ -- Команда MGL: cloud xdat ydat zdat adat ['sch'="]
+ Рисует облачный график для 3d массива, заданного параметрически
+ ADAT[i,j,k](XDAT[i,j,k], YDAT[i,j,k], ZDAT[i,j,k]). График состоит
+ из кубиков с цветом и прозрачностью пропорциональной значениям
+ ADAT. Результат похож на облако - малые значения прозрачны, а
+ большие нет. Число кубиков зависит от *note meshnum::. Параметр
+ ALPHA меняет общую прозрачность графика. См. также *note surf3::.
+ См. раздел *note Cloud sample::, для примеров кода и графика.
+
+ -- Команда MGL: beam tr g1 g2 adat `rval' ['sch'=" `flag=0 num=3']
+ Рисует поверхность уровня для 3d массива ADAT при постоянном
+ значении ADAT=VAL. Это специальный тип графика для ADAT заданного
+ в сопровождающей системе координат вдоль кривой TR с ортами G1, G2
+ и с поперечным размером RVAL. Переменная FLAG - битовый флаг:
+ `0x1' - рисовать в сопровождающих (не лабораторных) координатах;
+ `0x2' - рисовать проекцию на плоскость \rho-z; `0x4' - рисовать
+ нормированное в каждом сечении поле. Размеры массивов по 1-му
+ индексу TR, G1, G2 должны быть nx>2. Размеры массивов по 2-му
+ индексу TR, G1, G2 и размер по 3-му индексу массива ADAT должны
+ быть одинаковы. См. также *note surf3::.
+
+\1f
+File: mgl_ru.info, Node: Dual plotting, Next: Vector fields, Prev: 3D plotting, Up: MGL interface
+
+1.13 Парные графики
+================================
+
+Эти команды строят графики для двух связанных массивов. Есть несколько
+основных типов 3D графиков: поверхность и поверхность уровня с окраской
+по второму массиву (*note surfc::, *note surf3c::), поверхность и
+поверхность уровня с прозрачностью по второму массиву (*note surfa::,
+*note surf3a::), плитки переменного размера (*note tiles::), диаграмма
+точечного отображения (*note map::), STFA диаграмма (*note stfa::). В
+командах *note surf3a:: и *note surf3c:: значения уровней можно
+задавать автоматически и вручную. Каждый тип графика имеет похожий
+интерфейс. Есть версия для рисования одного массива с автоматическими
+координатами и версия для параметрически заданного массива.
+
+ Строка SCH задает цветовую схему (*note Color scheme::). Предыдущая
+цветовая схема используется по умолчанию. Массивы X, Y, Z могут быть
+векторами (не 3d массивами как A). Если массивы XDAT, YDAT, ZDAT не
+указаны, то используются массивы со значениями равно распределенными
+вдоль осей x, y, z.
+
+ -- Команда MGL: surfc zdat cdat ['sch'="]
+ -- Команда MGL: surfc xdat ydat zdat cdat ['sch'="]
+ Рисует параметрически заданную поверхность {XDAT[i,j], YDAT[i,j],
+ ZDAT[i,j]} с цветом, заданным массивом CDAT[i,j]. Если SCH
+ содержит `#', то на поверхности рисуется сетка. См. также *note
+ surf::, *note surfa::, *note surf3c::. См. раздел *note SurfC
+ sample::, для примеров кода и графика.
+
+ -- Команда MGL: surf3c adat cdat `val' ['sch'="]
+ -- Команда MGL: surf3c xdat ydat zdat adat cdat `val' ['sch'="]
+ Рисует поверхность уровня для 3d массива, заданного параметрически
+ ADAT[i,j,k](XDAT[i,j,k], YDAT[i,j,k], ZDAT[i,j,k]) при
+ A(x,y,z)=VAL. Аналогично *note surf3::, но цвет задается массивом
+ CDAT. Если SCH содержит `#', то рисуется сетчатая поверхность. См.
+ также *note surf3::, *note surfc::, *note surf3a::. См. раздел
+ *note Surf3C sample::, для примеров кода и графика.
+
+ -- Команда MGL: surf3c adat cdat ['sch'=" `num=5']
+ -- Команда MGL: surf3c xdat ydat zdat adat cdat ['sch'=" `num=5']
+ Рисует NUM поверхностей уровня равномерно распределенных в
+ интервале цветовой шкалы (см. *note caxis::).
+
+ -- Команда MGL: surfa zdat cdat ['sch'="]
+ -- Команда MGL: surfa xdat ydat zdat cdat ['sch'="]
+ Рисует параметрически заданную поверхность {XDAT[i,j], YDAT[i,j],
+ ZDAT[i,j]} с прозрачностью, заданным массивом CDAT[i,j]. Если SCH
+ содержит `#', то на поверхности рисуется сетка. См. также *note
+ surf::, *note surfc::, *note surf3a::. См. раздел *note SurfA
+ sample::, для примеров кода и графика.
+
+ -- Команда MGL: surf3a adat cdat `val' ['sch'="]
+ -- Команда MGL: surf3a xdat ydat zdat adat cdat `val' ['sch'="]
+ Рисует поверхность уровня для 3d массива, заданного параметрически
+ ADAT[i,j,k](XDAT[i,j,k], YDAT[i,j,k], ZDAT[i,j,k]) при
+ A(x,y,z)=VAL. Аналогично *note surf3::, но прозрачность задается
+ массивом CDAT. Если SCH содержит `#', то рисуется сетчатая
+ поверхность. См. также *note surf3::, *note surfa::, *note
+ surf3c::. См. раздел *note Surf3A sample::, для примеров кода и
+ графика.
+
+ -- Команда MGL: surf3a adat cdat ['sch'=" `num=5']
+ -- Команда MGL: surf3a xdat ydat zdat adat cdat ['sch'=" `num=5']
+ Рисует NUM поверхностей уровня равномерно распределенных в
+ интервале цветовой шкалы (см. *note caxis::).
+
+ -- Команда MGL: tiles zdat rdat ['sch'="]
+ -- Команда MGL: tiles xdat ydat zdat rdat ['sch'="]
+ Рисует плитки для параметрически заданной поверхности {XDAT[i,j],
+ YDAT[i,j], ZDAT[i,j]}. Аналогично *note tile::, но размер плиток
+ задается массивов RDAT. Это создает эффект "прозрачности" при
+ экспорте в файлы EPS. См. также *note surfa::, *note tile::. См.
+ раздел *note TileS sample::, для примеров кода и графика.
+
+ -- Команда MGL: map udat vdat ['sch'=" `pnts=on']
+ -- Команда MGL: map xdat ydat udat vdat ['sch'=" `pnts=on']
+ Визуализирует точечное отображение для матриц {UDAT, VDAT }
+ параметрически зависящих от координат XDAT, YDAT. Исходное
+ положение ячейки задает ее цвет. Высота пропорциональна якобиану
+ Jacobian(udat,vdat). График является аналогом диаграммы Арнольда.
+ Если `pnts=off', то рисуются грани, иначе цветные точки рисуются в
+ узлах матриц (полезно для "запутанного" отображения). См. раздел
+ *note Map sample::, для примеров кода и графика.
+
+ -- Команда MGL: stfa re im `dn' ['sch'=" `pnts=on']
+ -- Команда MGL: stfa xdat ydat re im `dn' ['sch'=" `pnts=on']
+ Рисует спектрограмму комплексного массива RE+i*`im' для Фурье
+ размером DN точек. Параметр DN - любое четное число. Например в 1D
+ случае, результатом будет график плотности от массива
+ res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn
+ размером {int(nx/dn), dn, ny}. Массивы RE, IM параметрически
+ зависят от координат XDAT, YDAT. См. раздел *note STFA sample::,
+ для примеров кода и графика.
+
+\1f
+File: mgl_ru.info, Node: Vector fields, Next: Other plotting, Prev: Dual plotting, Up: MGL interface
+
+1.14 Векторные поля
+================================
+
+Эти функции рисуют графики для 2D и 3D векторных полей. Есть несколько
+типов графиков: просто векторное поле (*note vect::), вектора вдоль
+траектории (*note traj::), векторное поле каплями (*note dew::), нити
+тока (*note flow::), трубки тока (*note pipe::). Каждый тип графика
+имеет похожий интерфейс. Есть версия для рисования одного массива с
+автоматическими координатами и версия для параметрически заданного
+массива.
+
+ Строка SCH задает цветовую схему (*note Color scheme::). Предыдущая
+цветовая схема используется по умолчанию. Все размеры массивов AX и AY
+должны быть одинаковы. Младшие размерности массивов X, Y и AX должны
+быть одинаковы. Массивы X и Y могут быть векторами (не матрицами как
+AX). График строится для каждого z среза AX, AY для 2D случаев.
+
+ -- Команда MGL: traj xdat ydat udat vdat ['sch'=" `zval=nan len=0']
+ -- Команда MGL: traj xdat ydat zdat udat vdat wdat ['sch'=" `len=0']
+ Рисует вектора {UDAT, VDAT, WDAT} вдоль кривой {XDAT, YDAT, ZDAT}.
+ Длина векторов пропорциональна \sqrt{udat^2+vdat^2+wdat^2}. Строка
+ PEN задает цвет (*note Line styles::). По умолчанию (`pen=''').
+ Параметр LEN задает фактор длины векторов (если не нуль) или
+ выбирать длину пропорционально расстоянию между точками кривой
+ (если LEN=0). См. также *note vect::. См. раздел *note Traj
+ sample::, для примеров кода и графика.
+
+ -- Команда MGL: vect udat vdat ['sch'=" `zval=nan flag=0']
+ -- Команда MGL: vect xdat ydat udat vdat ['sch'=" `zval=nan flag=0']
+ Рисует векторное поле {UDAT, VDAT} параметрически зависящее от
+ координат XDAT, YDAT на плоскости при Z=ZVAL. Длина и цвет
+ векторов пропорциональна \sqrt{ax^2+ay^2}. Число рисуемых векторов
+ зависит от *note meshnum::. Параметр FLAG побитовый флаг для
+ настройки вид векторов: `1' - двуцветный вектор, `2' - одинаковая
+ длина векторов, `4' - рисует стрелку в точку сетки, `8' - рисует
+ стрелку с серединой в точке сетки, `16' - рисует штрихи вместо
+ стрелок. См. также *note flow::, *note dew::, *note vectc::. См.
+ раздел *note Vect sample::, для примеров кода и графика.
+
+ -- Команда MGL: vect udat vdat wdat ['sch'=" `flag=0']
+ -- Команда MGL: vect xdat ydat zdat udat vdat wdat ['sch'=" `flag=0']
+ Это 3D версия графика. Здесь массивы UDAT, VDAT, WDAT должны быть
+ 3d массивами, а длина и цвет пропорциональны
+ \sqrt{udat^2+vdat^2+wdat^2}. См. раздел *note Vect 3D sample::,
+ для примеров кода и графика.
+
+ -- Команда MGL: vectc udat vdat ['sch'=" `zval=nan']
+ -- Команда MGL: vectc xdat ydat udat vdat ['sch'=" `zval=nan']
+ Аналогично *note vect:: c `flag=2+16=18'. См. раздел *note VectC
+ sample::, для примеров кода и графика.
+
+ -- Команда MGL: vectc udat vdat wdat ['sch'="]
+ -- Команда MGL: vectc xdat ydat zdat udat vdat wdat ['sch'="]
+ Это 3D версия графика. Здесь массивы UDAT, VDAT, WDAT должны быть
+ 3d массивами, а длина и цвет пропорциональны
+ \sqrt{udat^2+vdat^2+wdat^2}. См. раздел *note VectC 3D sample::,
+ для примеров кода и графика.
+
+ -- Команда MGL: vectl udat vdat ['sch'=" `zval=nan']
+ -- Команда MGL: vectl xdat ydat udat vdat ['sch'=" `zval=nan']
+ Аналогично *note vect:: c `flag=1+16=17'. См. раздел *note VectL
+ sample::, для примеров кода и графика.
+
+ -- Команда MGL: vectl udat vdat wdat ['sch'="]
+ -- Команда MGL: vectl xdat ydat zdat udat vdat wdat ['sch'="]
+ Это 3D версия графика. Здесь массивы UDAT, VDAT, WDAT должны быть
+ 3d массивами, а длина и цвет пропорциональны
+ \sqrt{udat^2+vdat^2+wdat^2}. См. раздел *note VectL 3D sample::,
+ для примеров кода и графика.
+
+ -- Команда MGL: dew udat vdat ['sch'=" `zval=nan']
+ -- Команда MGL: dew xdat ydat udat vdat ['sch'=" `zval=nan']
+ Рисует капли для векторного поля {UDAT, VDAT}, параметрически
+ зависящего от координат XDAT, YDAT при Z=ZVAL. Замечу, что график
+ требует много памяти и процессорного времени для своего создания!
+ Цвет капель пропорционален \sqrt{ax^2+ay^2}. Число капель
+ определяется *note meshnum::. См. также *note vect::. См. раздел
+ *note Dew sample::, для примеров кода и графика.
+
+ -- Команда MGL: flow udat vdat ['sch'=" `num=5 zval=nan']
+ -- Команда MGL: flow xdat ydat udat vdat ['sch'=" `num=5 zval=nan']
+ Рисует нити тока для векторного поля {UDAT, VDAT}, параметрически
+ зависящего от координат XDAT, YDAT на плоскости при z = ZVAL.
+ Число нитей пропорционально NUM. При NUM>0 нитей могут стартовать
+ и изнутри сетки, в противном случае только с краев. Цвет нитей
+ пропорционален \sqrt{udat^2+vdat^2}. Теплые цвета соответствуют
+ нормальному току (типа стока). Холодные цвета соответствуют
+ обратному току (типа источника). См. также *note pipe::, *note
+ vect::. См. раздел *note Flow sample::, для примеров кода и
+ графика.
+
+ -- Команда MGL: flow udat vdat wdat ['sch'=" `num=3']
+ -- Команда MGL: flow xdat ydat zdat udat vdat wdat ['sch'=" `num=3']
+ Это 3D версия графика. Здесь массивы UDAT, VDAT, WDAT должны быть
+ 3d массивами, а цвет пропорционален \sqrt{udat^2+vdat^2+wdat^2}.
+ См. раздел *note Flow 3D sample::, для примеров кода и графика.
+
+ -- Команда MGL: flow `x0 y0' udat vdat ['sch'=" `zval=nan']
+ -- Команда MGL: flow `x0 y0' xdat ydat udat vdat ['sch'=" `zval=nan']
+ Рисует нить тока из точки {X0, Y0} для векторного поля {UDAT,
+ VDAT}, параметрически зависящего от координат XDAT, YDAT на
+ плоскости при z = ZVAL. Цвет нити пропорционален
+ \sqrt{udat^2+vdat^2}. Теплые цвета соответствуют нормальному току
+ (типа стока). Холодные цвета соответствуют обратному току (типа
+ источника).
+
+ -- Команда MGL: flow `x0 y0 z0' udat vdat wdat ['sch'="]
+ -- Команда MGL: flow `x0 y0 z0' xdat ydat zdat udat vdat wdat ['sch'="]
+ Это 3D версия графика. Здесь массивы UDAT, VDAT, WDAT должны быть
+ 3d массивами, а цвет пропорционален \sqrt{udat^2+vdat^2+wdat^2}.
+
+ -- Команда MGL: pipe udat vdat ['sch'=" `r0=0.05 num=5 zval=nan']
+ -- Команда MGL: pipe xdat ydat udat vdat ['sch'=" `r0=0.05 num=5
+ zval=nan']
+ Рисует трубки тока для векторного поля {UDAT, VDAT},
+ параметрически зависящего от координат XDAT, YDAT на плоскости при
+ z = ZVAL. Число трубок пропорционально NUM. При NUM>0 нитей могут
+ стартовать и изнутри сетки, в противном случае только с краев.
+ Цвет и радиус трубок пропорционален \sqrt{udat^2+vdat^2}. Теплые
+ цвета соответствуют нормальному току (типа стока). Холодные цвета
+ соответствуют обратному току (типа источника). Параметр R0 задает
+ радиус трубок. При R0<0 радиус трубок обратно пропорционален их
+ амплитуде. См. также *note flow::, *note vect::. См. раздел *note
+ Pipe sample::, для примеров кода и графика.
+
+ -- Команда MGL: pipe udat vdat wdat ['sch'=" `r0=0.05 num=3']
+ -- Команда MGL: pipe xdat ydat zdat udat vdat wdat ['sch'=" `r0=0.05
+ num=3']
+ Это 3D версия графика. Здесь массивы UDAT, VDAT, WDAT должны быть
+ 3d массивами, а цвет пропорционален \sqrt{udat^2+vdat^2+wdat^2}.
+ См. раздел *note Pipe 3D sample::, для примеров кода и графика.
+
+\1f
+File: mgl_ru.info, Node: Other plotting, Next: Nonlinear fitting, Prev: Vector fields, Up: MGL interface
+
+1.15 Прочие графики
+================================
+
+Это команды, не относящиеся к какой-то специальной категории. Сюда
+входят функции построения графиков по текстовым формулам (*note
+fplot::, *note fsurf::), рисования поверхностей из треугольников (*note
+triplot::), произвольных точек в пространстве (*note dots::) и
+реконструкции по ним поверхности (*note crust::), графики плотности и
+линии уровня на плоскостях, перпендикулярных осям x, y или z
+(dens[xyz], cont[xyz], contf[xyz]). Каждый тип графика имеет похожий
+интерфейс. Есть версия для рисования одного массива с автоматическими
+координатами и версия для параметрически заданного массива. Строка SCH
+задает цветовую схему (*note Color scheme::). Предыдущая цветовая схема
+используется по умолчанию.
+
+ -- Команда MGL: densx dat ['sch'=" `val=nan']
+ -- Команда MGL: densy dat ['sch'=" `val=nan']
+ -- Команда MGL: densz dat ['sch'=" `val=nan']
+ Рисуют график плотности на x, y или z плоскостях. Если DAT - 3d
+ массив, то выполняется интерполяция к заданному срезу VAL. Функции
+ полезны для создания проекций 3D массивов на оси координат. См.
+ также `cont[xyz], contf[xyz]', *note dens::. См. раздел *note Dens
+ projection sample::, для примеров кода и графика.
+
+ -- Команда MGL: contx dat ['sch'=" `val=nan num=7']
+ -- Команда MGL: conty dat ['sch'=" `val=nan num=7']
+ -- Команда MGL: contz dat ['sch'=" `val=nan num=7']
+ Рисуют линии уровня на x, y или z плоскостях. Если DAT - 3d
+ массив, то выполняется интерполяция к заданному срезу VAL. Функции
+ полезны для создания проекций 3D массивов на оси координат. См.
+ также `dens[xyz], contf[xyz]', *note cont::. См. раздел *note Cont
+ projection sample::, для примеров кода и графика.
+
+ -- Команда MGL: contfx dat ['sch'=" `val=nan num=7']
+ -- Команда MGL: contfy dat ['sch'=" `val=nan num=7']
+ -- Команда MGL: contfz dat ['sch'=" `val=nan num=7']
+ Рисуют закрашенные контуры уровня на x, y или z плоскостях. Если
+ DAT - 3d массив, то выполняется интерполяция к заданному срезу
+ VAL. Функции полезны для создания проекций 3D массивов на оси
+ координат. См. также `dens[xyz], cont[xyz]', *note contf::.
+
+ -- Команда MGL: dots xdat ydat zdat ['sch'="]
+ -- Команда MGL: dots xdat ydat zdat adat ['sch'="]
+ Рисует произвольно расположенные точки {XDAT[i], YDAT[i],
+ ZDAT[i]}. Если определен массив ADAT[i], то он задает прозрачность
+ точек. См. также *note crust::, *note mark::, *note plot::. См.
+ раздел *note Dots sample::, для примеров кода и графика.
+
+ -- Команда MGL: crust xdat ydat zdat ['sch'="]
+ Реконструирует и рисует поверхность по произвольно расположенным
+ точкам {XDAT[i], YDAT[i], ZDAT[i]}. Если строка содержит `#', то
+ рисуется сетчатая поверхность. См. также *note dots::, *note
+ triplot::. См. раздел *note Crust sample::, для примеров кода и
+ графика.
+
+ -- Команда MGL: triplot idat xdat ydat ['sch'=" `zval=nan']
+ -- Команда MGL: triplot idat xdat ydat zdat ['sch'="]
+ -- Команда MGL: triplot idat xdat ydat zdat cdat ['sch'="]
+ Рисует поверхность из треугольников. Вершины треугольников
+ задаются индексами IDAT в массиве точек {XDAT[i], YDAT[i],
+ ZDAT[i]}. Если строка содержит `#', то рисуется сетчатая
+ поверхность. Размер по 1-му индексу массива IDAT должен быть 3 или
+ больше. Массивы XDAT, YDAT, ZDAT должны иметь одинаковые размеры.
+ Массив CDAT задает цвет треугольников (если IDAT.ny=CDAT.nx) или
+ цвет вершин (если XDAT.nx=CDAT.nx). См. также *note dots::, *note
+ crust::, *note quadplot::, *note tricont::.
+
+ -- Команда MGL: tricont vdat idat xdat ydat zdat cdat ['sch'="
+ `zval=nan']
+ -- Команда MGL: tricont vdat idat xdat ydat zdat ['sch'=" `zval=nan']
+ -- Команда MGL: tricont idat xdat ydat zdat ['sch'=" `num=7 zval=nan']
+ Рисует линии уровня поверхности из треугольников при Z = ZVAL (или
+ для z=VDAT[k] если `zval==NAN'). Вершины треугольников задаются
+ индексами IDAT в массиве точек {XDAT[i], YDAT[i], ZDAT[i]}. Размер
+ по 1-му индексу массива IDAT должен быть 3 или больше. Массивы
+ XDAT, YDAT, ZDAT должны иметь одинаковые размеры. Массив CDAT
+ (если указан) задает цвет треугольников (если IDAT.ny=CDAT.nx) или
+ цвет вершин (если XDAT.nx=CDAT.nx). См. также *note triplot::,
+ *note cont::.
+
+ -- Команда MGL: quadplot idat xdat ydat ['sch'=" `zval=nan']
+ -- Команда MGL: quadplot idat xdat ydat zdat ['sch'="]
+ -- Команда MGL: quadplot idat xdat ydat zdat cdat ['sch'="]
+ Рисует поверхность из четырехугольников. Вершины треугольников
+ задаются индексами IDAT в массиве точек {XDAT[i], YDAT[i],
+ ZDAT[i]}. Если строка содержит `#', то рисуется сетчатая
+ поверхность. Размер по 1-му индексу массива IDAT должен быть 4 или
+ больше. Массивы XDAT, YDAT, ZDAT должны иметь одинаковые размеры.
+ Массив CDAT задает цвет четырехугольников (если IDAT.ny=CDAT.nx)
+ или цвет вершин (если XDAT.nx=CDAT.nx). См. также *note triplot::.
+
+ -- Команда MGL: fplot 'y(x)' ['pen'=" `zval=nan num=100']
+ Рисует функцию `y(x)' в плоскости z=ZVAL с координатой `x' в
+ диапазоне x-оси координат. Параметр NUM задает минимальное число
+ точек по координате для графика. См. также *note plot::.
+
+ -- Команда MGL: fplot 'x(t)' 'y(t)' 'z(t)' ['pen'=" `num=100']
+ Рисует параметрическую кривую {`x(t)', `y(t)', `z(t)'}, где
+ координата `t' меняется в диапазоне [0, 1]. Параметр NUM задает
+ минимальное число точек по координате для графика. См. также *note
+ plot::.
+
+ -- Команда MGL: fsurf 'z(x,y)' ['sch'=" `num=100']
+ Рисует поверхность `z(x,y)' с координатами `x', `y' в диапазоне
+ x-,y-осей координат. Параметр NUM задает минимальное число точек
+ по координатам для графика. См. также *note surf::.
+
+ -- Команда MGL: fsurf 'x(u,v)' 'y(u,v)' 'z(u,v)' ['sch'=" `num=100']
+ Рисует параметрическую поверхность {`x(u,v)', `y(u,v)', `z(u,v)'},
+ где координаты `u', `v' меняются в диапазоне [0, 1]. Параметр NUM
+ задает минимальное число точек по координатам для графика. См.
+ также *note surf::.
+
+\1f
+File: mgl_ru.info, Node: Nonlinear fitting, Next: Data create, Prev: Other plotting, Up: MGL interface
+
+1.16 Nonlinear fitting
+======================
+
+Эти команды подбирают параметры функций для наилучшей аппроксимации
+данных, т.е. минимизируют сумму \sum_i (f(x_i, y_i, z_i) -
+a_i)^2/s_i^2. При этом аппроксимирующая функция `f' может зависеть от
+одного аргумента `x' (1D случай), от двух аргументов `x,y' (2D случай)
+или от трех аргументов `x,y,z' (3D случай). Функция `f' также может
+зависеть от параметров. Список параметров задается строкой VAR
+(например, `abcd'). Обычно пользователь должен предоставить начальные
+значения параметров в переменной INI. Однако, при его отсутствии
+используются нулевые значения.
+
+ Команды *note fit:: и *note fits:: не рисуют полученные массивы. Они
+заполняют массив FIT по формуле `f' с найденными коэффициентами. При
+этом, координаты `x,y,z' равно распределены в вдоль осей координат.
+Число точек в FIT выбирается максимальным из размера массива FIT и 100.
+Формулу с найденными коэффициентами можно вывести с помощью команды
+*note putsfit::. См. раздел *note Fitting sample::, для примеров кода и
+графика.
+
+ Размерность массивов должны быть не меньше, чем число указанных
+массивов XDAT, YDAT, ZDAT. Также подбор коэффициентов будет
+осуществляться только вдоль указанных направлений (например, вдоль x и
+y если указаны только XDAT и YDAT). Если массив XDAT не указан, то
+используется массив со значениями равно распределенными вдоль оси x.
+
+ -- Команда MGL: fits adat sdat 'func' 'var' [ini=0]
+ -- Команда MGL: fits xdat adat sdat 'func' 'var' [ini=0]
+ -- Команда MGL: fits xdat ydat adat sdat 'func' 'var' [ini=0]
+ -- Команда MGL: fits xdat ydat zdat adat sdat 'func' 'var' [ini=0]
+ "Подгоняют" формулу вдоль x-, y- и z-направлений для массива
+ заданного параметрически A[i,j,k](X[i,j,k], Y[i,j,k], Z[i,j,k]) с
+ весовыми коэффициентами SDAT[i,j,k].
+
+ -- Команда MGL: fit adat 'func' 'var' [ini=0]
+ -- Команда MGL: fit xdat adat 'func' 'var' [ini=0]
+ -- Команда MGL: fit xdat ydat adat 'func' 'var' [ini=0]
+ -- Команда MGL: fit xdat ydat zdat adat 'func' 'var' [ini=0]
+ "Подгоняют" формулу вдоль x-, y- и z-направлений для массива
+ заданного параметрически A[i,j,k](X[i,j,k], Y[i,j,k], Z[i,j,k]) с
+ весовыми коэффициентами равными 1.
+
+ -- Команда MGL: putsfit `x y' ['pre'=" 'fnt'=" `size=-1']
+ Печатает последнюю подобранную формулу с найденными коэффициентами
+ в точке {X, Y}. Строка PRE будет напечатана перед формулой. Все
+ другие параметры такие же как в *note Text printing::.
+
+\1f
+File: mgl_ru.info, Node: Data create, Next: Data filling, Prev: Nonlinear fitting, Up: MGL interface
+
+1.17 Создание данных
+==================================
+
+ -- Команда MGL: new dat [`nx=1 ny=1 nz=1']
+ Создает/пересоздает массив с именем DAT данных указанного размера
+ и заполняет его нулями. Ничего не делает при NX, NY, NZ
+ отрицательных или равных нулю.
+
+ -- Команда MGL: var dat `num v1 [v2=nan]'
+ Создает одномерный массив с именем DAT размером `num' и заполняет
+ его равномерно в диапазоне [V1, V2]. Если V2=`nan', то
+ используется V2=V1.
+
+ -- Команда MGL: list dat `v1 ...'
+ Создает массив с именем DAT и заполняет его числовыми значениями
+ аргументов `v1 ...'. Команда может создавать 1d- и 2d-массивы. Для
+ создания 2d-массивов требуется указать разделитель строк данных
+ `|'. Размер массива будет [максимальное число чисел в строке *
+ число строк]. Например, команда `list 1 | 2 3' создаст массив [1
+ 0; 2 3]. Отмечу, что максимальное число аргументов 1000.
+
+ -- Команда MGL: list dat d1 ...
+ Создает массив с именем DAT и заполняет его числами из массивов
+ `d1 ...'. Команда может создавать 2d- и 3d-массивы (если аргументы
+ 2d массивы). Младшие размерности всех массивов в аргументах должны
+ быть равны размерности D1. Отмечу, что максимальное число
+ аргументов 1000.
+
+ -- Команда MGL: copy dat dat2 ['eq'=" `on_axis=on']
+ -- Команда MGL: copy dat `val'
+ Создает массив с именем DAT и копирует в него данные из массива
+ DAT2. При этом, если указан параметр EQ, то данные будут изменены
+ по формуле аналогично команде *note fill:: (для `on_axis=on') или
+ *note modify:: (для `on_axis=off').
+
+ -- Команда MGL: idset dat 'ids'
+ Устанавливает символьные обозначения для колонок данных. Строка
+ должна содержать символы 'a'...'z' один на колонку (без пробелов).
+
+ -- Команда MGL: info dat [`detail=off']
+ Выводит информацию о массиве (размер, максимальное/минимальное
+ значение, моменты и пр.). При `detail=off' показывается только
+ краткая информация.
+
+ -- Команда MGL: info 'text'
+ Выводит текст TEXT как информацию (предупреждение).
+
+\1f
+File: mgl_ru.info, Node: Data filling, Next: Rearrange data, Prev: Data create, Up: MGL interface
+
+1.18 Заполнение данных
+======================================
+
+ -- Команда MGL: fill dat v1 v2 ['dir'='x']
+ Заполняет значениями равно распределенными в диапазоне [V1, V2] в
+ направлении DIR={`x',`y',`z'}.
+
+ -- Команда MGL: fill dat 'eq' [vdat=0 wdat=0]
+ Заполняет значениями вычисленными по формуле EQ. Формула
+ представляет собой произвольное выражение, зависящее от переменных
+ `x', `y', `z', `u', `v', `w'. Координаты `x', `y', `z' полагаются
+ меняющимися в диапазоне осей координат (в отличие от *note
+ modify::). Переменная `u' - значения исходного массива, переменные
+ `v', `w' - значения массивов VDAT, WDAT. Последние могут быть
+ опущены.
+
+ -- Команда MGL: modify dat 'eq' [`dim=0']
+ -- Команда MGL: modify dat 'eq' vdat [wdat=0]
+ Заполняет значениями вычисленными по формуле EQ. Формула
+ представляет собой произвольное выражение, зависящее от переменных
+ `x', `y', `z', `u', `v', `w'. Координаты `x', `y', `z' полагаются
+ меняющимися в диапазоне [0,1] (в отличие от *note fill::).
+ Переменная `u' - значения исходного массива, переменные `v', `w' -
+ значения массивов VDAT, WDAT. Последние могут быть опущены. Если
+ указан DIM>0, то изменяются только слои >=DIM.
+
+ -- MGL command: put dat `val [i=: j=: k=:]'
+ Присваивает значения (под-)массива DAT[I, J, K] = VAL. Индексы I,
+ J, K равные `:' задают значениия VAL для всего диапазона
+ соответствующего направления(ий). Например, `put dat val : 0 :'
+ задает DAT[i,0,j]=VAL для i=0...(DAT.nx-1), j=0...(DAT.nz-1).
+
+ -- MGL command: put dat vdat [`i=: j=: k=:']
+ Копирует значения из массива VDAT в диапазон значений массива DAT.
+ Индексы I, J, K равные `:' задают диапазон изменения значений в
+ соответствующих направление(ях). Младшие размерности массива VDAT
+ должны быть больше выбранного диапазона массива DAT. Например,
+ `put dat v : 0 :' присвоит DAT[i,0,j]=VDAT.ny>DAT.nz ? VDAT[i,j] :
+ VDAT[i], где i=0...(DAT.nx-1), j=0...(DAT.nz-1) и условие
+ vdat.nx>=dat.nx выполнено.
+
+\1f
+File: mgl_ru.info, Node: Rearrange data, Next: File I/O, Prev: Data filling, Up: MGL interface
+
+1.19 Изменение размеров данных
+=====================================================
+
+ -- Команда MGL: rearrange dat `mx [my=0 mz=0]'
+ Изменяет размерность данных без изменения самого массива данных,
+ так что результирующий массив MX*MY*MZ < nx*ny*nz. Если один из
+ параметров MY или MZ ноль, то он будет выбран оптимальным образом.
+ Например, если MY=0, то будет MY=nx*ny*nz/MX и MZ=1.
+
+ -- Команда MGL: extend dat `n1 [n2=0]'
+ Увеличивает размер данных путем вставки (|N1|+1) новых срезов
+ после (для N1>0) или перед (для N1<0) существующими данными. Можно
+ добавить сразу 2 размерности для 1d массива, используя второй
+ параметр N2. Данные в новые срезы будут скопированы из
+ существующих. Например, для N1>0 новый массив будет a_ij^new =
+ a_i^old where j=0...N1. Соответственно, для N1<0 новый массив
+ будет a_ij^new = a_j^old, где i=0...|N1|.
+
+ -- Команда MGL: transpose dat ['dim'='yxz']
+ Транспонирует (меняет порядок размерностей) массив данных. Новый
+ порядок размерностей задается строкой DIM.
+
+ -- Команда MGL: squeeze dat `rx [ry=1 rz=1 sm=off]'
+ Уменьшает размер данных путем удаления элементов с индексами не
+ кратными RX, RY, RZ соответственно. Параметр SMOOTH задает
+ использовать сглаживания (т.е. out[i]=\sum_{j=i,i+r} a[j]/r) или
+ нет (т.е. out[i]=a[j*r]).
+
+ -- Команда MGL: crop dat `n1 n2' 'dir'
+ Обрезает границы данных при I<N1 и I>N2 (при N2>0) или
+ I>`n[xyz]'-N2 (при N2<=0) вдоль направления DIR.
+
+ -- Команда MGL: delete dat
+ Удаляет массив DAT и освобождает использованную память. Может быть
+ полезно для больших неиспользуемых массивов.
+
+ -- Команда MGL: delete dat 'dir' `[pos=off num=0]'
+ Удаляет NUM срезов вдоль направления DIR с позиции POS.
+
+ -- Команда MGL: insert dat 'dir' `[pos=off num=0]'
+ Вставляет NUM срезов вдоль направления DIR с позиции POS и
+ заполняет их нулями.
+
+\1f
+File: mgl_ru.info, Node: File I/O, Next: Make another data, Prev: Rearrange data, Up: MGL interface
+
+1.20 Чтение/сохранение данных
+===================================================
+
+ -- Команда MGL: read dat 'fname'
+ Читает данные из текстового файла с разделителями символом
+ пробела/табуляции с автоматическим определением размера массива.
+ Двойной перевод строки начинает новый срез данных (по направлению
+ z).
+
+ -- Команда MGL: read dat 'fname' `mx [my=1 mz=1]'
+ Читает данные из текстового файла с заданными размерами. Ничего не
+ делается если параметры MX, MY или MZ равны нулю или отрицательны.
+
+ -- Команда MGL: readmat dat 'fname' [`dim=2']
+ Читает данные из текстового файла с размерами, указанными в первых
+ DIM числах файла. При этом переменная DIM задает размерность (1d,
+ 2d, 3d) данных.
+
+ -- Команда MGL: readall dat 'templ' `v1 v2 [dv=1 slice=off]'
+ Объединяет данные из нескольких текстовых файлов. Имена файлов
+ определяются вызовом функции `sprintf(fname,templ,val);', где VAL
+ меняется от V1 до V2 с шагом DV. Данные загружаются один за другим
+ в один и тот же срез данных (при SLICE=`off') или срез-за-срезом
+ (при SLICE=`on').
+
+ -- Команда MGL: readall dat 'templ' `[slice=off]'
+ Объединяет данные из нескольких текстовых файлов, чьи имена
+ удовлетворяют шаблону TEMPL (например, TEMPL=`"t_*.dat"'). Данные
+ загружаются один за другим в один и тот же срез данных (при
+ SLICE=`off') или срез-за-срезом (при SLICE=`on').
+
+ -- Команда MGL: save dat 'fname'
+ Сохраняет массив данных в текстовый файл.
+
+ -- Команда MGL: readhdf dat 'fname' 'dname'
+ Читает массив с именем DNAME из HDF5 или HDF4 файла FNAME.
+
+ -- Команда MGL: savehdf dat 'fname' 'dname'
+ Сохраняет массив под именем DNAME в HDF5 или HDF4 файл FNAME.
+
+ -- Команда MGL: import dat 'fname' 'sch' [`v1=0 v2=1']
+ Читает данные из растрового файла. RGB значения пикселов
+ преобразуются в число в диапазоне [V1, V2] используя цветовую
+ схему SCH (*note Color scheme::).
+
+ -- Команда MGL: export dat 'fname' 'sch' [`v1=0 v2=0']
+ Сохраняет данные в растровый файл. Числовые значения,
+ нормированные в диапазон [V1, V2], преобразуются в RGB значения
+ пикселов, используя цветовую схему SCH (*note Color scheme::).
+ Если V1>=V2, то значения V1, V2 определяются автоматически как
+ минимальное и максимальное значение данных.
+
+\1f
+File: mgl_ru.info, Node: Make another data, Next: Change data, Prev: File I/O, Up: MGL interface
+
+1.21 Создание новых данных
+=============================================
+
+ -- Команда MGL: combine res adat bdat
+ Возвращает в массиве данных RES прямое произведение массивов
+ (наподобие, res[i,j] = adat[i]*bdat[j] и т.д.).
+
+ -- Команда MGL: evaluate res dat idat [`norm=on']
+ -- Команда MGL: evaluate res dat idat jdat [`norm=on']
+ -- Команда MGL: evaluate res dat idat jdat kdat [`norm=on']
+ Возвращает массив данных RES, полученный в результате интерполяции
+ исходного массива в точках других массивов (например,
+ res[i,j]=dat[idat[i,j],jdat[i,j]]). Размеры массивов IDAT, JDAT,
+ KDAT должны совпадать. Координаты в IDAT, JDAT, KDAT полагаются
+ нормированными в диапазон [0,1] (при NORM=`on') или в диапазоны
+ [0,nx], [0,ny], [0,nz] соответственно.
+
+ -- Команда MGL: hist res dat `num v1 v2 [nsub=0]'
+ -- Команда MGL: hist res dat wdat `num v1 v2 [nsub=0]'
+ Возвращает распределение (гистограмму) RES из NUM точек от
+ значений массива DAT в диапазоне [V1, V2]. Массив WDAT задает веса
+ элементов (все веса равны 1 если WDAT не указан). Параметр NSUB
+ задает число дополнительных точек интерполяции (для сглаживания
+ получившейся гистограммы).
+
+ -- Команда MGL: hist res xdat adat
+ -- Команда MGL: hist res xdat ydat adat
+ -- Команда MGL: hist res xdat ydat zdat adat
+ Возвращает распределение (гистограмму) RES от значений массива
+ ADAT, параметрически зависящего от координат {XDAT,YDAT,ZDAT} в
+ диапазоне осей координат. Массив ADAT играет роль веса точки.
+ Число точек в результате RES - максимум из размера RES и 100.
+
+ -- Команда MGL: momentum res dat 'how' ['dir'='z']
+ Возвращает в массиве данных RES момент (1d массив) данных DAT
+ вдоль направления DIR. Строка HOW определяет тип момента. Момент
+ определяется как res_k = \sum_ij how(x_i,y_j,z_k) dat_ij/ \sum_ij
+ a_ij если DIR=`z' и т.д. Координаты `x', `y', `z' - индексы
+ массива в диапазоне [0,1].
+
+ -- Команда MGL: sum res dat 'dir'
+ Возвращает в массиве данных RES результат суммирования DAT вдоль
+ направления(ий) DIR.
+
+ -- Команда MGL: max res dat 'dir'
+ Возвращает в массиве данных RES максимальное значение DAT вдоль
+ направления(ий) DIR. Gets array which is the maximal data values
+ in given direction or direction(s).
+
+ -- Команда MGL: min res dat 'dir'
+ Возвращает в массиве данных RES минимальное значение DAT вдоль
+ направления(ий) DIR.
+
+ -- Команда MGL: resize res dat `mx [my=1 mz=1]'
+ Возвращает массив данных RES размером MX, MY, MZ со значениями
+ полученными интерполяцией значений массива DAT.
+
+ -- Команда MGL: subdata res dat `xx [yy=: zz=:]'
+ Возвращает в RES подмассив массива данных DAT с фиксированными
+ значениями индексов с положительными значениями. Например,
+ `subdata a b : 2' выделяет третью строку (индексы начинаются с
+ нуля), `subdata a b 4 :' выделяет 5-ую колонку, `subdata a b : :
+ 3' выделяет 4-ый срез и т.д.
+
+ -- Команда MGL: trace res dat
+ Возвращает массив REF диагональных элементов DAT[i,i] (для 2D
+ данных) или DAT[i,i,i] (для 3D данных) где i=0...nx-1. В 1D случае
+ возвращается сам массив данных DAT. Размеры массива данных должен
+ быть DAT.ny, DAT.nz >= DAT.nx или DAT.ny, DAT.nz = 1.
+
+ -- Команда MGL: transform dat 'type' real imag
+ Выполняет интегральное преобразование комплексных данных REAL,
+ IMAG в выбранном направлении и возвращает модуль результата в RES.
+ Порядок и тип преобразований задается строкой TYPE: первый символ
+ для x-направления, второй для y-направления, третий для
+ z-направления. Возможные символы: `f' - прямое преобразование
+ Фурье, `i' - обратное преобразование Фурье, `s' - синус
+ преобразование, `c' - косинус преобразование, `h' - преобразование
+ Ханкеля, `n' или ` ' - нет преобразования.
+
+ -- Команда MGL: transforma dat 'type' ampl phase
+ Аналогично предыдущему с заданными амплитудой AMPL и фазой PHASE
+ комплексных чисел.
+
+ -- Команда MGL: stfad res real imag `dn' ['dir'='x']
+ Выполняет оконное преобразование Фурье длиной DN для комплексных
+ данных REAL, IMAG и возвращает модуль результата в RES. Например,
+ для DIR=`x' результат будет иметь размер {int(nx/dn), dn, ny} и
+ будет равен res[i,j,k]=|\sum_d^dn
+ exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn.
+
+ -- Команда MGL: pde res 'ham' ini_re ini_im [`dz=0.1 k0=100']
+ Решает уравнение в частных производных du/dz =
+ i*k0*HAM(p,q,x,y,z,|u|)[u], где p=-i/k0*d/dx, q=-i/k0*d/dy -
+ псевдо-дифференциальные операторы. Параметры INI_RE, INI_IM задают
+ начальное распределение поля. Координаты в уравнении и в решении
+ полагаются в диапазоне осей координат. Замечу, что внутри этот
+ диапазон увеличивается в 3/2 раза для уменьшения отражения от
+ границ расчетного интервала. Параметр DZ задает шаг по
+ эволюционной координате z. В данный момент использован упрощенный
+ алгоритм, когда все "смешанные" члена (типа `x*p'->x*d/dx)
+ исключаются. Например, в 2D случае это функции типа ham = f(p,z) +
+ g(x,z,u). При этом допускаются коммутирующие комбинации (типа
+ `x*q'->x*d/dy). Переменная `u' используется для обозначения
+ амплитуды поля |u|. Это позволяет решать нелинейные задачи -
+ например, нелинейное уравнение Шредингера `ham='p^2+q^2-u^2''.
+ Также можно указать мнимую часть для поглощения (типа `ham =
+ 'p^2+i*x*(x>0)''), но только если зависимость от `i' линейная,
+ т.е. ham = hre+i*him. См. раздел *note PDE sample::, для примеров
+ кода и графика.
+
+ -- Команда MGL: ray res 'ham' `x0 y0 z0 p0 q0 v0 [dt=0.1 tmax=10]'
+ Решает систему геометрооптических уравнений d_r_/dt = d HAM/d_p_,
+ d_p_/dt = -d HAM/d_r_. Это гамильтоновы уравнения для траектории
+ частицы в 3D случае. Гамильтониан HAM может зависеть от координат
+ `x', `y', `z', импульсов `p'=px, `q'=py, `v'=pz и времени `t': ham
+ = H(x,y,z,p,q,v,t). Начальная точка (при `t=0') задается
+ переменными {X0, Y0, Z0, P0, Q0, V0}. Параметры DT и TMAX задают
+ шаг и максимальное время интегрирования. Результат RES - массив
+ {x,y,z,p,q,v,t} с размером {7 * int(TMAX/DT+1) }. См. раздел *note
+ Beam tracing sample::, для примеров кода и графика.
+
+ -- Команда MGL: qo2d res 'ham' ini_re ini_im ray [`r=1 k0=100' xx=0
+ yy=0]
+ Решает уравнение в частных производных du/dt =
+ i*k0*HAM(p,q,x,y,|u|)[u] в сопровождающей системе координат, где
+ p=-i/k0*d/dx, q=-i/k0*d/dy - псевдо-дифференциальные операторы.
+ Параметры INI_RE, INI_IM задают начальное распределение поля.
+ Параметр RAY задает опорный луч для сопровождающей системы
+ координат. Можно использовать луч найденный с помощью `ray'.
+ Опорный луч должен быть достаточно гладкий, чтобы система
+ координат была однозначной и для исключения ошибок интегрирования.
+ Если массивы XX и YY указаны, то в них записываются декартовы
+ координаты для каждой точки найденного решения. См. также *note
+ pde::. См. раздел *note Beam tracing sample::, для примеров кода и
+ графика.
+
+ -- Команда MGL: jacobian res xdat ydat [zdat=0]
+ Вычисляет якобиан преобразования {i,j,k} в {XDAT,YDAT,ZDAT}, где
+ координаты {i,j,k} полагаются нормированными в интервал [0,1].
+ Якобиан находится по формуле det||dr_\alpha/d\xi_\beta||, где
+ r={XDAT,YDAT,ZDAT} и \xi={i,j,k}. Все размерности всех массивов
+ должны быть одинаковы. Данные должны быть трехмерными если указаны
+ все 3 массива {XDAT,YDAT,ZDAT} или двумерными если только 2
+ массива {XDAT,YDAT}.
+
+\1f
+File: mgl_ru.info, Node: Change data, Next: Operators, Prev: Make another data, Up: MGL interface
+
+1.22 Изменение данных
+====================================
+
+Эти команды изменяют данные вдоль заданного направления(ий) типа
+например дифференцирования, интегрирования и т.д. Направление
+указывается строкой DIR, которая может содержать символы `x', `y' и/или
+`z', вдоль которых изменения будут применены.
+
+ -- Команда MGL: cumsum dat 'dir'
+ Суммирует с накоплением в выбранном направлении(ях).
+
+ -- Команда MGL: integrate dat 'dir'
+ Выполняет интегрирование (подобно суммированию с накоплением) в
+ выбранном направлении(ях).
+
+ -- Команда MGL: diff dat 'dir'
+ Выполняет дифференцирование в выбранном направлении(ях).
+
+ -- Команда MGL: diff dat xdat ydat [zdat=0]
+ Выполняет дифференцирование данных DAT, параметрически зависящих
+ от координат, в направлении XDAT с YDAT, ZDAT=constant. Параметр
+ ZDAT может быть опущен, что соответствует 2D случаю. Используются
+ следующие формулы (2D случай): da/dx =
+ (a_j*y_i-a_i*y_j)/(x_j*y_i-x_i*y_j), где a_i=da/di, a_j=da/dj
+ обозначает дифференцирование вдоль 1-ой и 2-ой размерности.
+ Похожие формулы используются и в 3D случае. Порядок аргументов
+ можно менять - например, если данные a(i,j) зависят от координат
+ {x(i,j), y(i,j)}, то обычная производная по `x' будет равна `diff
+ a x y', а обычная производная по `y' будет равна `diff a y x'.
+
+ -- Команда MGL: diff2 dat 'dir'
+ Выполняет двойное дифференцирование (как в операторе Лапласа) в
+ выбранном направлении(ях).
+
+ -- Команда MGL: sinfft dat 'dir'
+ Выполняет синус преобразование в выбранном направлении(ях). Синус
+ преобразование есть \sum a_i \sin(k i).
+
+ -- Команда MGL: cosfft dat 'dir'
+ Выполняет косинус преобразование в выбранном направлении(ях).
+ Синус преобразование есть \sum a_i \cos(k i).
+
+ -- Команда MGL: hankel dat 'dir'
+ Выполняет преобразование Ханкеля в выбранном направлении(ях).
+ Преобразование Ханкеля есть \sum a_i J_0(k i).
+
+ -- Команда MGL: swap dat 'dir'
+ Меняет местами левую и правую части данных в выбранном
+ направлении(ях). Полезно для отображения результата FFT.
+
+ -- Команда MGL: roll dat 'dir' num
+ Сдвигает данные на NUM ячеек в выбранном направлении(ях).
+ Соответствует замене индекса на I->(I+NUM)%N.
+
+ -- Команда MGL: mirror dat 'dir'
+ Отражает данные в выбранном направлении(ях). Соответствует замене
+ индекса на I->N-I.
+
+ -- Команда MGL: sew dat ['dir'='xyz' `da=2*pi']
+ Удаляет скачки данных (например, скачки фазы после обратных
+ тригонометрических функций) с периодом DA в выбранном
+ направлении(ях).
+
+ -- Команда MGL: smooth data `type' ['dir'='xyz']
+ Сглаживает данные в выбранном направлении(ях) методом TYPE. Сейчас
+ поддерживаются 4 метода: `0' ничего не делает, `1' линейное
+ усреднение по 3 точкам, `2' линейное усреднение по 5 точкам, `3'
+ квадратичное усреднение по 5 точкам.
+
+ -- Команда MGL: envelop dat ['dir'='x']
+ Находит огибающую данных в выбранном направлении. Только одно
+ направление может быть выбрано за раз.
+
+ -- Команда MGL: normsl dat `v1 v2' ['dir'='z' `keep=on sym=off']
+ Нормирует данные срез-за-срезом в выбранном направлении DIR в
+ интервал [V1,V2]. Если SYM=`on', то используется симметричный
+ интервал [-max(|v1|,|v2|), max(|v1|,|v2|)]. Если KEEP=`on', то
+ максимальное значение k-го среза ограничено величиной \sqrt{\sum
+ a_ij(k)/\sum a_ij(0)}.
+
+ -- Команда MGL: norm dat `v1 v2 [sym=off dim=0]'
+ Нормирует данные в интервал [V1,V2]. Если SYM=`on', то
+ используется симметричный интервал [-max(|v1|,|v2|),
+ max(|v1|,|v2|)]. Изменения применяются только к срезам >=DIM.
+
+\1f
+File: mgl_ru.info, Node: Operators, Next: Program flow, Prev: Change data, Up: MGL interface
+
+1.23 Операторы
+=======================
+
+ -- Команда MGL: multo dat dat2
+ Поэлементно умножает массив DAT на DAT2.
+
+ -- Команда MGL: multo dat `val'
+ Умножает каждый элемент на число.
+
+ -- Команда MGL: divto dat dat2
+ Поэлементно делит массив DAT на DAT2.
+
+ -- Команда MGL: divto dat `val'
+ Делит каждый элемент на число.
+
+ -- Команда MGL: addto dat dat2
+ Поэлементно прибавляет DAT2 к массиву DAT.
+
+ -- Команда MGL: addto dat `val'
+ Прибавляет число к каждому элементу.
+
+ -- Команда MGL: subto dat dat2
+ Поэлементно вычитает DAT2 из массива DAT.
+
+ -- Команда MGL: subto dat `val'
+ Вычитает число из каждого элемента.
+
+\1f
+File: mgl_ru.info, Node: Program flow, Next: Command options, Prev: Operators, Up: MGL interface
+
+1.24 Программирование
+=====================================
+
+Эти команды управляют порядком выполнения других команд (условия,
+циклы, подпрограммы), (пере-)определяют аргументы скрипта и пр.
+
+ -- Команда MGL: chdir 'path'
+ Переходит в папку PATH.
+
+ -- Команда MGL: define $N smth
+ Задает N-ый аргумент скрипта равным SMTH. Отмечу, что SMTH
+ используется как есть (с символами `'' если присутствуют).
+ Выполняется только подстановка других макроопределений $0...$9,
+ $a...$z. Здесь N это цифра (0...9) или буква (a...z).
+
+ -- Команда MGL: define name smth
+ Определяет константу (скаляр) с именем `name' и числовым значением
+ `smth'. Позднее она может быть использована как обычное число.
+
+ -- Команда MGL: defchr $N smth
+ Задает N-ый аргумент скрипта равным символу с UTF кодом SMTH.
+ Здесь N это цифра (0...9) или буква (a...z).
+
+ -- Команда MGL: defnum $N smth
+ Задает N-ый аргумент скрипта равным числовому значению SMTH. Здесь
+ N это цифра (0...9) или буква (a...z).
+
+ -- Команда MGL: defpal $N smth
+ Задает N-ый аргумент скрипта равным символу палитры с индексом,
+ найденным из SMTH. Здесь N это цифра (0...9) или буква (a...z).
+
+ -- Команда MGL: call 'fname' [ARG1 ARG2 ... ARG9]
+ Переходит к выполнению (вызывает) подпрограммы FNAME (или внешнего
+ скрипта, если функция не была найдена). Опциональные аргументы
+ передаются в подпрограмму. См. также *note func::.
+
+ -- Команда MGL: func 'fname' [narg=0]
+ Определяет подпрограмму с именем FNAME и задает число требуемых
+ аргументов. Аргументы будут помещены в параметры скрипта $1, $2,
+ ... $9. Отмечу, что выполнение основной программы должно быть
+ остановлено до начала определений подпрограмм. См. также *note
+ stop::, *note return::.
+
+ -- Команда MGL: return
+ Возвращается из подпрограммы.
+
+ -- Команда MGL: if dat 'cond'
+ Начинает блок команд, выполняемый если каждый элемент DAT
+ удовлетворяет условию COND.
+
+ -- Команда MGL: if `val'
+ Начинает блок команд, выполняемый если `val' не ноль.
+
+ -- Команда MGL: elseif dat 'cond'
+ Начинает блок команд, выполняемый если предыдущий `if' или
+ `elseif' не был выполнен и каждый элемент DAT удовлетворяет
+ условию COND.
+
+ -- Команда MGL: elseif `val'
+ Начинает блок команд, выполняемый если предыдущий `if' или
+ `elseif' не был выполнен и `val' не ноль.
+
+ -- Команда MGL: else
+ Начинает блок команд, выполняемый если предыдущий `if' или
+ `elseif' не был выполнен.
+
+ -- Команда MGL: endif
+ Заканчивает определение блока `if/elseif/else'.
+
+ -- Команда MGL: for $N `v1 v2 [dv=1]'
+ Начинает блок команд, выполняемый в цикле с $N-ым аргументом
+ изменяющимся от V1 до V2 с шагом DV. Здесь N это цифра (0...9) или
+ буква (a...z).
+
+ -- Команда MGL: for $N dat
+ Начинает блок команд, выполняемый в цикле с $N-ым аргументом
+ пробегающим значения массива DAT. Здесь N это цифра (0...9) или
+ буква (a...z).
+
+ -- Команда MGL: next
+ Заканчивает блок цикла `for'.
+
+ -- Команда MGL: once `val'
+ Определяет код (между `once on' и `once off') который будет
+ выполнен только один раз. Полезно для работы с большими данными в
+ программах типа UDAV.
+
+ -- Команда MGL: stop
+ Останавливает выполнение скрипта.
+
+\1f
+File: mgl_ru.info, Node: Command options, Next: Suffixes, Prev: Program flow, Up: MGL interface
+
+1.25 Опции команд
+============================
+
+Опции команд позволяют легко настроить вид отдельного графика не меняя
+глобальных настроек для все рисунка. Опции указываются после команды.
+Каждая опция отделяется от предыдущей символом `;'. Опции работают так,
+что запоминают текущие настройки рисунка, применяют собственные
+настройки, выполняют команду и возвращают глобальные настройки обратно.
+Поэтому использование опций для команд обработки данных или настройки
+графика бесполезно.
+
+ Наиболее часто используемые опции - `xrange, yrange, zrange',
+устанавливающие границы изменения осей координат (и тем самым
+автоматических массивов). Например, команда `plot y; xrange 0.1 0.9'
+построит кривую с x-координатой равно распределенной в интервале 0.1
+... 0.9, а не вдоль текущей оси x.
+
+ Полный список опций:
+
+ -- Опция MGL: alpha `val'
+ -- Опция MGL: alphadef `val'
+ Задает величину прозрачности поверхности. Значение должно быть в
+ диапазоне [0, 1]. См. также *note alphadef::
+
+ -- Опция MGL: ambient `val'
+ Задает яркость фонового освещения. Значение должно быть в
+ диапазоне [0, 1]. См. также *note ambient::
+
+ -- Опция MGL: crange `val1 val2'
+ Задает границы цветовой шкалы. См. также *note crange::
+
+ -- Опция MGL: xrange `val1 val2'
+ Задает границы изменения координаты x. См. также *note xrange::
+
+ -- Опция MGL: yrange `val1 val2'
+ Задает границы изменения координаты y. См. также *note yrange::
+
+ -- Опция MGL: zrange `val1 val2'
+ Задает границы изменения координаты z. См. также *note zrange::
+
+ -- Опция MGL: cut `val'
+ Задает обрезание точек за пределами осей координат. См. также
+ *note cut::
+
+ -- Опция MGL: fontsize `val'
+ Задает размер текста. См. также *note font::
+
+ -- Опция MGL: marksize `val'
+ Задает размер маркеров. См. также *note marksize::
+
+ -- Опция MGL: meshnum `val'
+ Задает ориентировочное число линий, стрелок, ячеек и пр. См. также
+ *note meshnum::
+
+ -- Опция MGL: legend 'txt'
+ Добавляет строку 'txt' во внутренний массив записей легенды. Стиль
+ линии и маркера аргумента последней вызванной команды построения
+ *note 1D plotting::. См. также *note legend::
+
+\1f
+File: mgl_ru.info, Node: Suffixes, Next: Utilities, Prev: Command options, Up: MGL interface
+
+1.26 Суффиксы переменных
+==========================================
+
+Суффиксы позволяют быстро получить числовую характеристику (размер,
+максимальное или минимальное значение, сумму элементов и т.д.) массива
+данных и использовать ее как число (скаляр) в аргументах. Суффиксы
+начинаются с точки `.' сразу после (без пробелов) имени переменной и
+временного массива. Например, `a.nx' даст размер массива A по оси х,
+`b(1).max' даст максимальное значение второй строки массива B,
+`(c(:,0)^2).sum' даст сумму квадратов элементов первой колонки массива
+C и т.д.
+
+ Полный список суффиксов:
+*nx, ny, nz*
+ Размер массива в направлении x, y, z соответственно.
+
+*max*
+ Максимальное значение массива.
+
+*min*
+ Минимальное значение массива.
+
+*sum*
+ Сумма элементов массива.
+
+*a*
+ Первый элемент массива (элемент с индексами 0,0,0).
+
+*fst*
+ Первое не нулевое значение массива.
+
+*lst*
+ Последнее не нулевое значение массива.
+
+*mx, my, mz*
+ Положение максимума в направлении x, y, z соответственно.
+
+*ax, ay, az, aa*
+ Положение центра масс в направлении x, y, z соответственно или
+ среднее значение массива.
+
+*wx, wy, wz, wa*
+ Ширина в направлении x, y, z соответственно или дисперсия
+ элементов массива.
+
+*sx, sy, sz, sa*
+ Асимметрия в направлении x, y, z соответственно или элементов
+ массива.
+
+*kx, ky, kz, ka*
+ Эксцесс в направлении x, y, z соответственно или элементов массива.
+
+\1f
+File: mgl_ru.info, Node: Utilities, Prev: Suffixes, Up: MGL interface
+
+1.27 Утилиты для MGL
+==============================
+
+MathGL содержит несколько программ для работы со скриптами MGL. Есть
+утилита для сохранения в растровое (`mgl2png', `mgl2gif') или векторное
+(`mgl2eps', `mgl2svg') изображения. Программа `mglview' показывает
+результат выполнения скрипта MGL и позволяет вращать и настраивать
+график. Также можно транслировать MGL скрипт в C++ файл с помощью
+программы `mgl2cpp'.
+
+ Все эти программы имеют схожий набор аргументов. Первым идет имя
+скрипта, а вторым идет имя выходного файлы (может быть опущено),
+последние аргументы - опции скрипта и программы. К опциям относятся
+параметры скрипта (это `$0, $1, ... $9') и настройки локали. Параметры
+скрипта имеют формат `-Nval', где N=0,1...9 - номер параметра, val -
+его значние. Например, опция `-1test' заменит `$1' на `test' в скрипте.
+Опция -Lval устанавливает локаль в значение val. Например, `-Lutf8'
+будет использовать UTF-8 в скрипте.
+
+ Также можно создавать анимированные изображения GIF или набор JPEG
+файлов с именами `frameNNNN.jpg' (где `NNNN' - номер кадра). Для этого
+в скрипте надо указать параметры анимации для каждого кадра (строками с
+коментариями `##a val' или опциями `-Aval') или в цикле (строкой с
+комментарием `##с v1 v2 [dv]' или опцию `-Cn1:n2'), которые будут
+подставлены в качестве параметра `$0' при последовательном вызове
+скрипта. Для сохранения кадров в JPEG просто добавьте команду `write
+''' в конце скрипта.
+
+\1f
+File: mgl_ru.info, Node: Examples, Next: Samples, Prev: MGL interface, Up: Top
+
+2 MathGL examples
+*****************
+
+This chapter contain information about basic and advanced MathGL, hints
+and samples for all types of graphics. I recommend you read first 2
+sections one after another and at least look on "Hints" section. Also I
+recommend you to look at *note General concepts::. Sample code for some
+of these examples can be found in `http://mathgl.sf.net/pictures.html'
+and in *note Samples::.
+
+* Menu:
+
+* Basic usage::
+* Advanced usage::
+* Data handling::
+* Data plotting::
+* Hints::
+
+\1f
+File: mgl_ru.info, Node: Basic usage, Next: Advanced usage, Up: Examples
+
+2.1 Basic usage
+===============
+
+MGL script can be used by several manners. Each has positive and
+negative sides:
+ * _The using of MGL in UDAV._
+
+ Positive side is the possibility to view the plot at once and to
+ modify it, rotate, zoom or switch on transparency or lighting) by
+ hand or by mouse. Negative sides are: the need of X-terminal.
+
+ * _Direct writing to file in bitmap or vector format without
+ creation of graphical window._
+
+ Positive aspects are: batch processing of similar data set, for
+ example, a set of resulting data files for different calculation
+ parameters), running from the console program, including the
+ cluster calculation), fast and automated drawing, saving pictures
+ for further analysis, or demonstration). Negative sides are: the
+ usage of the external program for picture viewing. Also, the data
+ plotting is non-visual. So, you have to imagine the picture, view
+ angles, lighting and so on) before the plotting. I recommend to
+ use graphical window for determining the optimal parameters of
+ plotting on the base of some typical data set. And later use these
+ parameters for batch processing in console program.
+
+ In this case you can use a set of programs: `mgl2png', `mgl2gif',
+ `mgl2eps', `mgl2svg' or `mglview' for viewing.
+
+ The simplest script is
+box # draw bounding box
+axis # draw axis
+fplot 'x^3' # draw some function
+
+ Just type it in UDAV and press F5. Also you can save it in text file
+`test.mgl' and type in the console `mgl2png test.mgl' what produce file
+`test.mgl.png' with resulting picture.
+
+\1f
+File: mgl_ru.info, Node: Advanced usage, Next: Data handling, Prev: Basic usage, Up: Examples
+
+2.2 Advanced usage
+==================
+
+Now I show several non-obvious features of MGL: several subplots in a
+single picture, curvilinear coordinates, text printing and so on.
+Generally you may miss this section at first reading, but I don't
+recommend it.
+
+* Menu:
+
+* Subplots::
+* Axis and grids::
+* Curvilinear coordinates::
+* Text printing example::
+
+\1f
+File: mgl_ru.info, Node: Subplots, Next: Axis and grids, Up: Advanced usage
+
+2.2.1 Subplots
+--------------
+
+Let me demonstrate possibilities of axes transformation. MathGL has the
+following functions: `SubPlot', `InPlot', `Aspect' and `Rotate', *note
+Transformation matrix::). The order of their calling is strictly
+determined. First, one changes the position of axes in image area,
+functions `SubPlot' and `InPlot'). After that one may rotate the plot,
+function `Rotate'). Finally, one may change aspects of axes, function
+`Aspect'). The following code illustrates the aforesaid it:
+subplot 2 2 0:box
+text -1 1.1 'Just box' 'L'
+inplot 0.2 0.5 0.7 1:box
+text 0 1.2 'Inplot example'
+
+subplot 2 2 1
+rotate 60 40:aspect 1 1 1
+box:text 1 1 1.5 'rotate only' 'R'
+
+subplot 2 2 2
+rotate 60 40:aspect 1 1 2
+box:text 0 0 2 'aspect and rotate'
+
+subplot 2 2 3
+rotate 60 40:aspect 1 2 2
+box:text 0 0 1.5 'Aspect in other direction'
+ Here I used function `text' for printing the text in arbitrary
+position of picture, *note Text printing::). Text coordinates and size
+are connected with axes. However, text coordinates may be everywhere,
+including the outside the bounding box. I shall show its features later
+in *Note Text printing example::.
+
+ Note that several commands can be placed in a string if they are
+separated by `:' symbol.
+
+\0\b[image src="../png/sample1.png"\0\b]
+
+Example of several subplots on the single picture.
+
+\1f
+File: mgl_ru.info, Node: Axis and grids, Next: Curvilinear coordinates, Prev: Subplots, Up: Advanced usage
+
+2.2.2 Axis and grids
+--------------------
+
+MathGL library can draw not only the bounding box but also the axes,
+grids, labels and so on. The limits of axes and their origin (the point
+of intersection) are determined by function `axis'. Also you can use
+`xrange, yrange, zrange' functions (*note Axis settings::). Ticks on
+axis are specified by functions `xtick, ytick, ztick, ttick'. First
+argument the direction for each change will be applied. Second argument
+gives the step between ticks (if positive) or gives the number of ticks
+on the axis (if negative) or set to use logarithmic ticks (if zero).
+Third argument gives numbers of sub-ticks between ticks (default is
+zero). Last argument define the initial ticks position.
+
+ Function `Axis' draws axes. Its textual string shows in which
+directions the axis or axes will be drawn (by default `'xyz'', function
+draws axes in all directions). Function `Grid' draws grid
+perpendicularly to specified directions. Example of axes and grid
+drawing is:
+subplot 2 2 0
+xtick 0.4 3 # sets tick step to 0.5
+ytick 0.4 3 # and draws 3 subticks
+box # should be after the ticks change
+axis 'xy': grid
+text 0 1.3 1 'axis and grid'
+
+xtick -5: ytick -5 # restore back
+subplot 2 2 1:rotate 60 40
+origin 0 0 0
+axis
+xlabel 'x' 1
+ylabel 'y' 1
+zlabel 'z' 1
+text 0 0 1.5 'axis and labels'
+
+subplot 2 2 2:rotate 60 40
+xtick 0.2: ytick 0.2: ztick 0.2 # too low step of ticks
+origin -1 -1 -1
+axis:grid
+text 0 0 1.5 'shift origin and add grid'
+text 0 0 1.2 '(note, too many ticks)'
+
+subplot 2 2 3:rotate 60 40
+xtick -6: ytick -6 # decrease the number of ticks
+axis 'yz'
+ylabel 'y axis'
+zlabel 'z axis'
+text 0 0 1.5 'remove x axis, and'
+text 0 0 1.2 'decrease number of ticks'
+
+ This example shows the importance of the correct choosing of the
+number of ticks on axis. If tick step is too small then its text may
+overlap and becomes unreadable. This code has the example of `Label'
+function. It draws label for axis in specified direction. The text
+position on axis is specified by third argument of `Label' function. If
+it is positive then then text is drawn near the axis maximum, if
+negative then the same takes place near the minimum of axis, if zero -
+then at the center of axis.
+
+\0\b[image src="../png/sample2.png"\0\b]
+
+Example of setting up axis range and axis ticks.
+
+\1f
+File: mgl_ru.info, Node: Curvilinear coordinates, Next: Text printing example, Prev: Axis and grids, Up: Advanced usage
+
+2.2.3 Curvilinear coordinates
+-----------------------------
+
+Now let use curvilinear coordinates. In difference from other systems
+of plot creation, MathGL uses textual formulas for connection of the
+old (data) and new (output) coordinates. This allows one to plot in
+arbitrary coordinates. The following code plots the line Y=0, Z=0 in
+Cartesian, polar, parabolic and spiral coordinates:
+new x 50: new y 50: new z 50
+fill y 0.5 0.5: fill x -1 1 # creates data arrays
+origin -1 1 -1
+
+subplot 2 2 0:rotate 60 40
+plot x y z 'r2'
+axis: grid
+text 0 1.3 1 'cartesian'
+
+subplot 2 2 1:rotate 60 40
+axis 'y*sin(pi*x)' 'y*cos(pi*x)' ''
+plot x y z 'r2'
+axis: grid
+text 0 1.3 1 'cylindrical'
+
+subplot 2 2 2:rotate 60 40
+axis '2*y*x' 'y*y - x*x' ''
+plot x y z 'r2'
+axis: grid
+text 0 1.3 1 'parabolic'
+
+subplot 2 2 3:rotate 60 40
+axis 'y*sin(pi*x)' 'y*cos(pi*x)' 'x+z'
+plot x y z 'r2'
+axis: grid
+text 0 1.3 1 'spiral'
+
+\0\b[image src="../png/sample3.png"\0\b]
+
+Example of curvilinear coordinates
+
+\1f
+File: mgl_ru.info, Node: Text printing example, Prev: Curvilinear coordinates, Up: Advanced usage
+
+2.2.4 Text printing example
+---------------------------
+
+MathGL prints text by vector font. There are functions for manual
+specifying of text position (like `Puts') and for its automatic
+selection (like `Label', `legend' and so on). MathGL prints text always
+in specified position even if it lies outside the bounding box. The
+default size of font is specified by command FONTSIZE. However, the
+actual size of output string depends on position of axes (depends on
+functions `SubPlot', `InPlot'). The switching of the font style
+(italic, bold, wire and so on) can be done for the whole string (by
+function parameter) or inside the string. By default MathGL parses
+TeX-like commands for symbols and indexes (see *note Font styles::).
+Example of MathGL font drawing is:
+text 0 1 'Text can be in ASCII and in Unicode'
+text 0 0.6 'It can be \wire{wire}, \big{big} or #r{colored}'
+text 0 0.2 'One can change style in string: \b{bold}, \i{italic, \b{both}}'
+text 0 -0.2 'Easy to \a{overline} or \u{underline}'
+text 0 -0.6 'Easy to change indexes ^{up} _{down} @{center}'
+text 0 -1 'It parse TeX: \int \alpha \cdot \sqrt3{sin(\pi x)^2 + \gamma_{i_k}} dx'
+
+\0\b[image src="../png/sample4.png"\0\b]
+
+Example of text printing with different font effects
+
+ Another example demonstrate the features of TeX formula parsing.
+text 0 0 '\sqrt{\frac{\alpha^{\gamma^2}+\overset 1{\big\infty}}{\sqrt3{2+b}}}', 0, -4
+
+\0\b[image src="../png/samplee.png"\0\b]
+
+Example of TeX formula parsing
+
+\1f
+File: mgl_ru.info, Node: Data handling, Next: Data plotting, Prev: Advanced usage, Up: Examples
+
+2.3 Data handling
+=================
+
+* Menu:
+
+* Array creation::
+* Data changing::
+
+\1f
+File: mgl_ru.info, Node: Array creation, Next: Data changing, Up: Data handling
+
+2.3.1 Array creation
+--------------------
+
+One can put numbers into the data instance by several ways. Let us do
+it for sinus function:
+ * one can create array by `list' command list a 0 0.04 0.16 0.36 0.64 1
+
+ * another way is to copy from "inline" array copy a [0,0.04,0.16,0.36,0.64,1]
+
+ * next way is to fill the data by textual formula with the help of
+ `modify' function new a 6
+ modify a 'x^2'
+
+ * or one may fill the array in some interval and modify it later new a 6
+ fill a 0 1
+ modify a 'u^2'
+
+ * or fill the array using current axis range new a 6
+ fill a '(x+1)^2/4'
+
+ * finally it can be loaded from file new s 6: modify s 'x^2'
+ save s 'sqr.dat' # create file first
+ read a 'sqr.dat' # load it
+
+ * at this one can read only part of data new s 6: modify s 'x^2'
+ save s 'sqr.dat' # create file first
+ read a 'sqr.dat' 5 # load it
+
+ Creation of 2d- and 3d-arrays is mostly the same. One can use direct
+data filling by `list' command
+list a 11 12 13 | 21 22 23 | 31 32 33
+ or by inline arrays
+copy a [[11,12,13],[21,22,23],[31,32,33]]
+ Also data can be filled by formula
+new z 30 40
+fill z 'sin(pi*x)*cos(pi*y)'
+ or loaded from file.
+
+ The only non-obvious thing here is using multidimensional arrays in
+C/C++, i.e. arrays defined like `float dat[40][30];'. Since, formaly
+this arrays element `dat[i]' can address the memory in arbitrary place
+you should use the proper function to convert such arrays to `mglData'
+object. For C++ this is functions like `mglData::Set(float **dat, int
+N1, int N2'. For C this is functions like `mgl_data_set_float2(HMDT d,
+const float **dat, int N1, int N2'. At this, you should keep in mind
+that `nx=N2' and `ny=N1' after conversion.
+
+\1f
+File: mgl_ru.info, Node: Data changing, Prev: Array creation, Up: Data handling
+
+2.3.2 Data changing
+-------------------
+
+MathGL has functions for data processing: differentiating, integrating,
+smoothing and so on. Let us consider some examples. The simplest ones
+are integration and differentiation. The direction in which operation
+will be performed is specified by textual string, which may contain
+symbols `x', `y' or `z'. For example, the call of `diff a 'x'' will
+differentiate data along `x' direction; the call of `integrate a 'xy''
+perform the double integration of data along `x' and `y' directions;
+the call of `diff2 a 'xyz'' will apply 3d Laplace operator to data and
+so on. Example of this operations on 2d array a=x*y is presented in
+code:
+new a 30 40: modify a 'x*y'
+axis 0 0 0 1 1 1
+subplot 2 2 0:rotate 60 40
+surf a: box
+text 0.7 1 1.2 'a(x,y)'
+subplot 2 2 1:rotate 60 40
+diff a 'x': surf a: box
+text 0.7 1 1.2 'da/dx'
+subplot 2 2 2:rotate 60 40
+integrate a 'xy': surf a: box
+text 0.7 1 1.2 '\int da/dx dxdy'
+subplot 2 2 3:rotate 60 40
+diff2 a 'y': surf a: box
+text 0.7 1 1.2 '\int {d^2}a/dxdy dx'
+
+\0\b[image src="../png/sample6.png"\0\b]
+
+Example of data differentiation and integration
+
+ Data smoothing (function `Smooth') is more interesting and
+important. This function has 2 main arguments: type of smoothing and
+its direction. Now 4 methods are supported: `0' does nothing for
+delta=0 or approaches data to zero with the step delta, `1' linear
+averaging by 3 points, `2' linear averaging by 5 points, `3' quadratic
+averaging by 5 points. Let me demonstrate it for 1d case:
+new y0 30
+modify y0 '0.4*sin(2*pi*x)+0.3*cos(3*pi*x)-0.4*sin(4*pi*x)+0.2*rnd'
+copy y1 y0: smooth y1 1
+copy y2 y0: smooth y2 2
+copy y3 y0: smooth y3 3
+
+plot y0 'k': addlegend 'none' 'k'
+plot y1 'r': addlegend 'line 3' 'r'
+plot y2 'g': addlegend 'line 5' 'g'
+plot y3 'b': addlegend 'quad 5' 'b'
+legend: box
+
+\0\b[image src="../png/sample7.png"\0\b]
+
+Example of data smoothing
+
+ Finally one can create new data arrays on base of the existing one:
+extract slice, row or column of data (`SubData'), summarize along some
+of direction(s) (`Sum'), find distribution of data elements (`Hist').
+Note, that all these functions are not thread-safe because they use
+static internal variable for output array. In particular, the using of
+several of them in arguments of the same function will lead to
+unpredictable result.
+
+\1f
+File: mgl_ru.info, Node: Data plotting, Next: Hints, Prev: Data handling, Up: Examples
+
+2.4 Data plotting
+=================
+
+Let me now show how to plot the data. MathGL generally has 2 types of
+plotting functions. Simple variant requires a single data array for
+plotting, other data (coordinates) are considered uniformly distributed
+in interval MIN*MAX. Second variant requires data arrays for all
+coordinates. It allows one to plot rather complex multivalent curves
+and surfaces (in case of parametric dependencies). Argument setting to
+default values allows one to plot data in standard form. Manual
+arguments setting gives possibility for fine tuning of colors,
+positions and view of graphics. Note, that the call of drawing function
+adds something to picture but does not clear the previous plots (as it
+does in Matlab). Another difference from Matlab is that all setup (like
+transparency, lightning, axis borders and so on) must be specified
+*before* plotting functions.
+
+* Menu:
+
+* Plots for 1D data::
+* Plots for 2D data::
+* Plots for 3D data::
+* Surface transparency::
+
+\1f
+File: mgl_ru.info, Node: Plots for 1D data, Next: Plots for 2D data, Up: Data plotting
+
+2.4.1 Plots for 1D data
+-----------------------
+
+Term "1D data" means that data depend on single index (parameter) like
+curve in parametric form {x(i),y(i),z(i)}, i=1...n. There are 5
+generally different types of data representations: simple line plot,
+line plot with filling under it, stairs plot, bar plot and vertical
+lines (*note 1D plotting::). Each type of plotting has similar
+interface. There are 3D version and two 2D versions. One of last
+requires single array. The parameters of line and marks (*note Line
+styles::) are specified by the string argument. If the string parameter
+is `NULL' then solid line with color from palette is used.
+
+ Below I shall show the features of 1D plotting on base of `plot'
+function (*note 1D plotting::). Let us start from sinus plot:
+new y0 50: modify y0 'sin(pi*(2*x-1))'
+subplot 2 2 0
+plot y0: box
+ Style of line is not specified in `plot' function. So MathGL uses the
+solid line with first color of palette (this is blue). Next subplot
+shows array Y1 with 2 rows:
+subplot 2 2 1
+new y1 50 2
+modify y1 'sin(pi*2*x-pi)'
+modify y1 'cos(pi*2*x-pi)/2' 1
+plot y1: box
+ As previously I did not specify the style of lines. As a result,
+MathGL again uses solid line with next colors in palette (there are
+green and red). Now let us plot a circle on the same subplot. The
+circle is parametric curve x=cos(\pi t), y=sin(\pi t). I will set the
+color of the circle (dark yellow, `Y') and put marks `+' at point
+position:
+new x 50: modify x 'cos(pi*2*x-pi)'
+plot x y0 'Y+'
+ Note that solid line is used because I did not specify the type of
+line. The same picture can be achieved by `Plot2' function. Let us draw
+ellipse by orange dash line:
+plot y1(:,0) y(:,1) 'q|'
+
+ Drawing in 3D space is mostly the same. Let us draw spiral with
+default line style. Now its color is 4-th color from palette (this is
+cyan):
+subplot 2 2 2:rotate 60 40
+new z 50: modify z '2*x-1'
+plot x y0 z 'g':box
+ Function `Plot3' does 3D curve plot but for single array. Use it to
+put circle marks on the previous plot:
+new y2 10 3
+modify y2 'cos(pi*(2*x-1-y))'
+modify y2 '2*x-1' 2
+plot y2(:,0) y2(:,1) y2(:,2) 'bo '
+ Note that line style is empty ` ' here. Usage of other 1D plotting
+functions looks similar:
+subplot 2 2 3:rotate 60 40
+bars x y0 z 'r':box
+
+\0\b[image src="../png/sample8.png"\0\b]
+
+Example of 1D data plot
+
+\1f
+File: mgl_ru.info, Node: Plots for 2D data, Next: Plots for 3D data, Prev: Plots for 1D data, Up: Data plotting
+
+2.4.2 Plots for 2D data
+-----------------------
+
+Surfaces `Surf' and other 2D plots (*note 2D plotting::) are drown the
+same simpler as 1D one. The difference is that the string parameter
+specifies not by line style but by the color scheme of the plot (*note
+Color scheme::). Here I draw attention on 4 most interesting color
+schemes. There is gray scheme where color is changed from black to
+white (string `kw') or from white to black (string `wk'). Another
+scheme is useful for accentuation of negative (by blue color) and
+positive (by red color) regions on plot (string `'BbwrR''). Last one is
+the popular "jet" scheme (string `'BbcyrR'').
+
+ Now I shall show the example of a surface drawing. At first let us
+switch lightning on
+light on
+ and draw the surface, considering coordinates x,y to be uniformly
+distributed in interval MIN*MAX
+new a0 50 40
+modify a0 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))'
+subplot 2 2 0:rotate 60 40
+surf a0: box
+ Color scheme was not specified. So previous color scheme is used. In
+this case it is default color scheme ("jet") for the first plot. Next
+example is a sphere. The sphere is parametrically specified surface:
+new x 50 40: new y 50 40: new z 50 40
+modify x '0.8*sin(2*pi*x)*sin(pi*y)'
+modify y '0.8*cos(2*pi*x)*sin(pi*y)'
+modify z '0.8*cos(pi*y)'
+subplot 2 2 1:rotate 60 40
+surf x y z 'bbwrr': box
+ I set color scheme to `'BbwrR'' that corresponds to red top and blue
+bottom of the sphere.
+
+ Surfaces will be plotted for each of slice of the data if NZ>1. Next
+example draws surfaces for data arrays with NZ=3:
+new a1 50 40 3
+modify a1 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))'
+modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*sin(3*pi*(x*y))' 1
+modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))' 2
+subplot 2 2 2:rotate 60 40
+alpha on
+surf a1: box
+ Note, that it may entail a confusion. However, if one will use density
+plot then the picture will look better:
+subplot 2 2 3: rotate 60 40
+dens a1: box
+ Note, that the previous color scheme is used in last plots because
+there are no direct specification of the one.
+
+\0\b[image src="../png/sample9.png"\0\b]
+
+Example of surface plot for 2D data
+
+ Drawing of other 2D plots is analogous. The only peculiarity is the
+usage of flag `#'. By default this flag switches on the drawing of a
+grid on plot (`grid' or `mesh' for plots in plain or in volume).
+However, for isosurfaces (including surfaces of rotation `axial') this
+flag switches the face drawing off. Figure becomes wired. The
+following code gives example of flag `#' using (compare with normal
+function drawing as in its description):
+alpha on: light on: light 0 0 0 1
+new a 30 20
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+
+subplot 2 2 0: rotate 40 60
+surf a 'bbcyrr#': box
+subplot 2 2 1: rotate 40 60
+dens a 'bbcyrr#': box
+subplot 2 2 2: rotate 40 60
+cont a 'bbcyrr#': box
+subplot 2 2 3: rotate 40 60
+axial a 'bbcyrr#': box
+
+\0\b[image src="../png/samplea.png"\0\b]
+
+Example of 2D data plot with color scheme contained `#' symbol
+
+\1f
+File: mgl_ru.info, Node: Plots for 3D data, Next: Surface transparency, Prev: Plots for 2D data, Up: Data plotting
+
+2.4.3 Plots for 3D data
+-----------------------
+
+Drawing procedures for 3D plot looks similarly to 1D and 2D plots
+described above. There are 3 general types of 3D plots (*note 3D
+plotting::): (i) plots on slices or on projections, (ii) isosurfaces,
+(iii) cloud-like plots. Plots on slice are clear enough - one specifies
+a slice (as its index or as coordinate value) and MathGL draws contour
+lines or density plot on slice plane. Isosurface gives more
+information. Isosurface is 3D analogue of the contour line `cont'. It
+shows the region where data array values exceed specified isosurface
+level. Plot becomes more informative if one adds transparency,
+lightning or sets color scheme depending on coordinates. Generalization
+of isosurface is the cloud-like plot. For this plot the darker color
+and less transparent regions correspond to higher values of data.
+Contrary, the regions with low values are transparent. For plotting of
+the phase of fields (or beams or pulses) one can use isosurface which
+transparency depends on the other data array (see function `surf3a').
+As example of 3D data plots let us draw the Gaussian beam diffraction
+in space. Beam propagates along X axis:
+alpha on: light on
+light 0 0 0 1
+new a 30 30 30: new b 30 30 30
+modify a 'exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))'
+modify b '16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)'
+caxis 0 1
+
+subplot 2 2 0: rotate 40 60
+surf3 a 'wgk': box
+subplot 2 2 1: rotate 40 60
+densa a: box: axis
+subplot 2 2 2: rotate 40 60
+cloud a: box
+subplot 2 2 3: rotate 40 60
+surf3a b a 'q': box
+
+\0\b[image src="../png/sampleb.png"\0\b]
+
+Example of Gaussian beam diffraction (3D data)
+
+\1f
+File: mgl_ru.info, Node: Surface transparency, Prev: Plots for 3D data, Up: Data plotting
+
+2.4.4 Surface transparency
+--------------------------
+
+MathGL library has advanced features for setting and handling the
+surface transparency. The simplest way to add transparency is the using
+of function `Alpha'. As a result, all further surfaces (and
+isosurfaces, density plots and so on) become transparent. However,
+their look can be additionally improved.
+
+ First, the selected surface will be non-transparent if one sets the
+flag `transparent' before the surface drawing and sets it off after the
+drawing.
+
+ Second, the value of transparency can be different from surface to
+surface. To do it just change the value of `alphadef' before the
+drawing of the selected surface. If its value is close to 0 then the
+surface becomes more and more transparent. Contrary, if its value is
+close to 1 then the surface becomes practically non-transparent. This
+is some analogue of `transparent on'.
+
+ Third feature is the changing of the way how the light goes through
+overlapped surfaces. The variable `transptype' defines it. By default
+the usual transparency is used (`transptype 0') - surfaces below is
+less visible than the upper ones. A "glass-like" transparency
+(`transptype 1') has a different look when the surface just decreases
+the background light (the surfaces are commutable in this case).
+
+ A "neon-like" transparency (`transptype 2') has more interesting
+look. In this case a surface is the light source (like a lamp on the
+dark background) and just adds some intensity to the color. At this,
+the library sets automatically the black color for the background and
+changes the default line color to white.
+
+ As example I shall show the variant of plot from *note Plots for 2D
+data:: (grid drawing is disabled) for different types of transparency.
+\0\b[image src="../png/type0.png"\0\b]
+
+Example of `TranspType=0'.
+
+\0\b[image src="../png/type1.png"\0\b]
+
+Example of `TranspType=1'.
+
+\0\b[image src="../png/type2.png"\0\b]
+
+Example of `TranspType=2'.
+
+\1f
+File: mgl_ru.info, Node: Hints, Prev: Data plotting, Up: Examples
+
+2.5 Hints
+=========
+
+In this section I have included some small hints and advices for the
+improving of the quality of plots and for the demonstration of some
+non-trivial features of MathGL library. In contrast to previous
+examples I showed mostly the idea but not the whole drawing function.
+More examples with the source code can be find at
+`http://mathgl.sf.net/' or in section *note Samples::.
+
+* Menu:
+
+* ``Compound'' graphics::
+* Two axes in one plot::
+* Titles for the plot::
+* Changing of the color range::
+* Management of a point cutting::
+* Vector field visualization::
+* Several light sources::
+* CutMin and CutMax features::
+* Mapping visualization::
+* Log-scaled plot::
+* Nonlinear fitting hints::
+* PDE solving hints::
+* Stereo image::
+
+\1f
+File: mgl_ru.info, Node: ``Compound'' graphics, Next: Two axes in one plot, Up: Hints
+
+2.5.1 "Compound" graphics
+-------------------------
+
+As I noted above, MathGL functions (except the special one, like `clf')
+do not erase the previous plotting but just add the new one. It allows
+one to draw "compound" plots easily. For example, popular Matlab
+command `surfc' can be emulated in MathGL by 2 calls:
+surf a
+cont a 0 7 -1 # draw contours at z = -1
+ Here A is 2-dimensional data for the plotting, `-1' is the value of
+z-coordinate at which the contour should be plotted (at the bottom in
+this example). Analogously, one can draw density plot instead of
+contour lines and so on.
+
+ Another nice plot is contour lines plotted directly on the surface:
+light on # switch on light for the surface
+surf a 'bbcyrr' # select 'jet' colormap for the surface
+cont a 'y' # and yellow color for contours
+ The possible difficulties arise in black&white case, when the color of
+the surface can be close to the color of a contour line. In that case I
+may suggest the following code:
+light on # switch on light for the surface
+surf a 'kw' # select 'gray' colormap for the surface
+caxis -1 0 # first draw for darker surface colors
+conta 'w' # white contours
+caxis 0 1 # now draw for brighter surface colors
+cont a 'k' # black contours
+ The idea is to divide the color range on 2 parts (dark and bright) and
+to select the contrasting color for contour lines for each of part.
+
+ Similarly, one can plot flow thread over density plot of vector
+field amplitude (this is another amusing plot from Matlab) and so on.
+The list of compound graphics can be prolonged but I hope that the
+general idea is clear.
+
+\1f
+File: mgl_ru.info, Node: Two axes in one plot, Next: Titles for the plot, Prev: ``Compound'' graphics, Up: Hints
+
+2.5.2 Two axes in one plot
+--------------------------
+
+Developing the previous hint one can make a plot with 2 or more axes.
+The idea is that the change of settings does not influence on the
+already drawn graphics. So, for 2-axes plot let us set the first axis
+and draw everything concerning it. Then let us setup the second axis
+and draw things for the second axis. The corresponding code is (*note
+2-axes sample::):
+# set up first axis
+axis -1 -1 1 1: origin -1 -1
+axis:fplot 'sin(pi*x)' # draw something in first axis
+# set up second axis
+axis 0 0 1 1: origin 1 1
+axis: fplot 'cos(4*pi*x^2)' # draw something in second axis
+ Note, that the first and the second axes look better if being placed
+in different corners. In the code presented above the first axis is
+placed in the left-bottom corner, and the second one is placed in the
+right-top corner.
+
+\1f
+File: mgl_ru.info, Node: Titles for the plot, Next: Changing of the color range, Prev: Two axes in one plot, Up: Hints
+
+2.5.3 Titles for the plot
+-------------------------
+
+The printing of nice titles for the plot is not so trivial task in
+general case. The problem is that the rotation and aspect change lead
+to different looks for titles of different subplots. So, the resulting
+look is not so good as it could be. The solution is simple - to print
+titles exactly after `subplot' call and before any rotation, aspect
+change and so on! Analogously, the title for the whole picture looks
+better if it is printed first (before any `subplot' calls).
+Alternatively you can use function `title' for plotting title for the
+picture at any time.
+
+\1f
+File: mgl_ru.info, Node: Changing of the color range, Next: Management of a point cutting, Prev: Titles for the plot, Up: Hints
+
+2.5.4 Changing of the color range
+---------------------------------
+
+By default (for the user comfort), the color range is set equal to
+z-range of the plot. However, there are different ranges. So, one can
+obtain amusing plot by the change of color range manually. For example,
+there are plots with one-color bottom (or top) or practically bi-color
+picture and so on.
+
+ For example, compare 2 surfaces:
+subplot 2 1 0
+surf a # usual coloring range
+subplot 2 1 1
+caxis 0 1
+surf a # bottom of the surface have one-colour filling
+
+\1f
+File: mgl_ru.info, Node: Management of a point cutting, Next: Vector field visualization, Prev: Changing of the color range, Up: Hints
+
+2.5.5 Management of a point cutting
+-----------------------------------
+
+Sometimes an experimental or numerical surface has outstanding points.
+Visualization of such surface will lead to the hole(s) in place of such
+points. The standard method of "fighting" - to change data values - is
+not always good and is not so convenient. MathGL library has another
+method - to set variable `cut off'. As a consequence, all outstanding
+points will be projected on the bounding box.
+
+ Such method is good not only for outstanding points but also for the
+case when one need to plane the bottom or the top of the plot. Exactly
+such case is demonstrated in the code:
+new a 20 30 # create some data
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+# set lower border above the data minimal value
+axis -1 -1 0 1 1 1:rotate 40 60
+cut off # set off cutting flag
+surf a # and draw the surface
+ It is an interesting result, is not it?
+
+\1f
+File: mgl_ru.info, Node: Vector field visualization, Next: Several light sources, Prev: Management of a point cutting, Up: Hints
+
+2.5.6 Vector field visualization
+--------------------------------
+
+Vector field visualization (especially in 3d case `vect3' or `vectc')
+may look tangly - there are too many overlapping lines. I may suggest 2
+ways to solve this problem. The first one is to change `meshnum' for
+decreasing the number of hachures. The second way is to use the flow
+thread chart `Flow'. Unfortunately, I don't know any other methods to
+visualize 3d vector field. If you know any, e-mail me and I shall add
+it to MatGL.
+
+\1f
+File: mgl_ru.info, Node: Several light sources, Next: CutMin and CutMax features, Prev: Vector field visualization, Up: Hints
+
+2.5.7 Several light sources
+---------------------------
+
+In contrast to the most of other programs, MathGL supports several (up
+to 10) light sources. Moreover, the color each of them can be
+different: white (this is usual), yellow, red, cyan, green and so on.
+The use of several light sources may be interesting for the
+highlighting of some peculiarities of the plot or just to make an
+amusing picture. Note, each light source can be switched on/off
+individually (*note Several light sample::).
+
+\1f
+File: mgl_ru.info, Node: CutMin and CutMax features, Next: Mapping visualization, Prev: Several light sources, Up: Hints
+
+2.5.8 CutMin and CutMax features
+--------------------------------
+
+MathGL library has a feature for cutting of points in some region
+CUTMIN*CUTMAX. Such an excision can be used to improve the look of the
+graphics. Moreover, this cutting may help to show an internal structure
+of an object (like `isocaps' plot in Matlab). For example, let us use
+the standard 3D data array and show its interior (*note CutMinMax
+sample::).
+
+new c 61 51 40 # create the data
+new v 10: fill v -0.5 1
+modify c '(-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1))'
+cut 0 -1 -1 1 0 1.1
+rotate 40 60: surf3 c -0.5 'bbcyrr'
+contf3 v c 'x' -1 'bbcyrr': contf3 v c 'y' -1 'bbcyrr'
+contf3 v c 'z' 0 'bbcyrr': contf3 v c 'z' 39 'bbcyrr'
+
+ One can also exclude points from arbitrary area in space. This area
+defined by textual formula `cut' (*note Cutting::). The algorithm is
+the same as shown for "rectangular cutting".
+
+\1f
+File: mgl_ru.info, Node: Mapping visualization, Next: Log-scaled plot, Prev: CutMin and CutMax features, Up: Hints
+
+2.5.9 Mapping visualization
+---------------------------
+
+Sometime ago I worked with mapping and have a question about its
+visualization. Let me remember you that mapping is some transformation
+rule for one set of number to another one. The 1d mapping is just an
+ordinary function - it takes a number and transforms it to another one.
+The 2d mapping (which I used) is a pair of functions which take 2
+numbers and transform them to another 2 ones. Except general plots
+(like `surfc', `surfa') there is a special plot - Arnold diagram. It
+shows the area which is the result of mapping of some initial area
+(usually square).
+
+ I tried to make such plot in `map'. It shows the set of points or
+set of faces, which final position is the result of mapping. At this,
+the color gives information about their initial position and the height
+describes Jacobian value of the transformation. Unfortunately, it looks
+good only for the simplest mapping but for the real multivalent
+quasi-chaotic mapping it produces a confusion. So, use it if you like
+:).
+
+\1f
+File: mgl_ru.info, Node: Log-scaled plot, Next: Nonlinear fitting hints, Prev: Mapping visualization, Up: Hints
+
+2.5.10 Log-scaled plot
+----------------------
+
+Log-scaled plot can be drawn by 2 steps. First, one should change the
+scale of axis by call `axis 'lg(x)' 'lg(y)'' (in this example, x- and
+y-axis will be log-scaled). Second, one should set logarithmic scale
+for axis ticks by changing variables: `xtick 0: yticks 0'. Finally, one
+should check (or change) the axis ranges and origin so that their
+values to be positive. For example of log-log plot *note Log-log
+sample::.
+
+\1f
+File: mgl_ru.info, Node: Nonlinear fitting hints, Next: PDE solving hints, Prev: Log-scaled plot, Up: Hints
+
+2.5.11 Nonlinear fitting hints
+------------------------------
+
+Nonlinear fitting is rather simple. All that you need is the data to
+fit, the approximation formula and the list of coefficients to fit
+(better with its initial guess values). Let me demonstrate it on the
+following simple example (*note Fitting sample::). First, let us use
+sin function with some random noise:
+new rnd 100: new idl 50 # data to be fitted and ideal data
+modify rnd '0.4*rnd+0.1+sin(4*pi*x)'
+modify idl '0.3+sin(4*pi*x)'
+ and plot it to see that data we will fit
+axis -1 -2 1 2
+plot rnd '. ':plot idl 'b'
+box:text 0 2.2 'initial: y = 0.3+sin(2\pi x)' 'C:b' -1
+
+ The next step is the fitting itself. For that let me specify an
+initial values INI for coefficients `abc' and do the fitting for
+approximation formula `a+b*sin(c*x)'
+new res # The data for found formula
+fit res rnd 'a+b*sin(c*x)' 'abc' [1, 1, 3]
+ Now display it
+plot res 'r'
+text -1 -1.3 'fitted:' 'L:r' -1
+putsfit 0 -1.8 'y = ' 'C:r' -1
+
+ NOTE! the fitting results may have strong dependence on initial
+values for coefficients due to algorithm features. The problem is that
+in general case there are several local 'optimums' for coefficients and
+the program returns only first found one! There are no guaranties that
+it will be the best. Try for example to set `ini = [0, 0, 0]' in the
+code above.
+
+\1f
+File: mgl_ru.info, Node: PDE solving hints, Next: Stereo image, Prev: Nonlinear fitting hints, Up: Hints
+
+2.5.12 PDE solving hints
+------------------------
+
+Solving of Partial Differential Equations (PDE, including beam tracing)
+and ray tracing (or finding particle trajectory) are more or less
+common task. So, MathGL have several functions for that. There are
+`ray' for ray tracing, `pde' for PDE solving, `qo2d' for beam tracing
+in 2D case. Note, that these functions take "Hamiltonian" or equations
+as string values. And I don't plan now to allow one to use user-defined
+functions. There are 2 reasons: the complexity of corresponding
+interface; and the basic nature of used methods which are good for
+samples but may not good for serious scientific calculations.
+
+ The ray tracing can be done by `ray' function. Really ray tracing
+equation is Hamiltonian equation for 3D space. So, the function can be
+also used for finding a particle trajectory (i.e. solve Hamiltonian
+ODE) for 1D, 2D or 3D cases. The function have a set of arguments.
+First of all, it is Hamiltonian which defined the media (or the
+equation) you are planning to use. The Hamiltonian is defined by string
+which may depend on coordinates `x', `y', `z', time `t' (for particle
+dynamics) and momentums `p'=p_x, `q'=p_y, `v'=p_z. Next, you have to
+define the initial conditions for coordinates and momentums at `t'=0
+and set the integrations step (default is 0.1) and its duration
+(default is 10). The Runge-Kutta method of 4-th order is used for
+integration.
+new re 128:new im 128
+ray r 'p^2+q^2-x-1' -0.7 -1 0 0 0.5 0
+plot r(0) r(1)
+ This example calculate the reflection from linear layer (media with
+Hamiltonian `p^2+q^2-x-1'=p_x^2+p_y^2-x-1). This is parabolic curve.
+The resulting array have 7 columns which contain data for
+{x,y,z,p,q,v,t}.
+
+ The solution of PDE is a bit more complicated. As previous you have
+to specify the equation as pseudo-differential operator \hat H(x,
+\nabla) which is called sometime as "Hamiltonian" (for example, in beam
+tracing). As previously, it is defined by string which may depend on
+coordinates `x', `y', `z' (but not time!), momentums `p'=(d/dx)/i k_0,
+`q'=(d/dy)/i k_0 and field amplitude `u'=|u|. The evolutionary
+coordinate is `z' in all cases. So that, the equation look like du/dz =
+ik_0 H(x,y,\hat p, \hat q, |u|)[u]. Dependence on field amplitude
+`u'=|u| allows one to solve nonlinear problems too. For example, for
+nonlinear Shrodinger equation you may set `ham='p^2 + q^2 - u^2''. Also
+you may specify imaginary part for wave absorption, like `ham = 'p^2 +
+i*x*(x>0)'', but only if dependence on variable `i' is linear (i.e. H =
+Hre+i*Him).
+
+ Next step is specifing the initial conditions at `z'=`Min.z'. The
+function need 2 arrays for real and for imaginary part. Note, that
+coordinates x,y,z are supposed to be in specified range [Min, Max]. So,
+the data arrays should have corresponding scales. Finally, you may set
+the integration step and paramter k0=k_0. Also keep in mind, that
+internally the 2 times large box is used (for suppressing numerical
+reflection from boundaries) and the equation should well defined even
+in this extended range.
+
+ Final comment is concerning the possible form of pseudo-differential
+operator H. At this moment, simplified form of operator H is supported
+- all "mixed" terms (like `x*p'->x*d/dx) are excluded. For example, in
+2D case this operator is effectively H = f(p,z) + g(x,z,u). However
+commutable combinations (like `x*q'->x*d/dy) are allowed for 3D case.
+
+ So, for example let solve the equation for beam deflected from
+linear layer and absorbed later. The operator will have the form
+`'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)'' that correspond to equation ik_0
+\partial_z u + \Delta u + x \cdot u + i (x+z)/2 \cdot u = 0. This is
+typical equation for Electron Cyclotron (EC) absorption in magnetized
+plasmas. For initial conditions let me select the beam with plane phase
+front exp(-48*(x+0.7)^2). The corresponding code looks like this (*note
+PDE sample::):
+new re 128: new im 128
+fill re 'exp(-48*(x+0.7)^2)'
+pde a 'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)' re im 0.01, 30
+transpose a 'yxz'
+caxis 0 1
+dens a 'wyrRk'
+
+ The last example is example of beam tracing. Beam tracing equation
+is special kind of PDE equation written in coordinates accompanied to a
+ray. Generally this is the same parameters and limitation as for PDE
+solving but the coordinates are defined by the ray and by parameter of
+grid width W in direction transverse the ray. So, you don't need to
+specify the range of coordinates. *BUT* there is limitation. The
+accompanied coordinates are well defined only for smooth enough rays,
+i.e. then the ray curvature K (which is defined as 1/K^2 = (|\ddot r|^2
+|\dot r|^2 - (\ddot r, \dot r)^2)/|\dot r|^6) is much large then the
+grid width: K>>w. So, you may receive incorrect results if this
+condition will be broken.
+
+ You may use following code for obtaining the same solution as in
+previous example:
+new re 128: new im 128
+define $1 'p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)'
+ray r $1 -0.7 -1 0 0 0.5 0 0.02 2
+# now start beam tracing
+fill re 'exp(-48*x^2)'
+new xx: new yy
+qo2d a $1 re im r 1 30 xx yy
+caxis 0 1
+dens xx yy a 'wyrRk'
+
+\1f
+File: mgl_ru.info, Node: Stereo image, Prev: PDE solving hints, Up: Hints
+
+2.5.13 Stereo image
+-------------------
+
+One can easily create stereo image in MathGL. Stereo image can be
+produced by making two subplots with slightly different rotation
+angles. The corresponding code looks like this (*note Stereo image
+sample::):
+subplot 2 1 0 # left image
+rotate 40 60+3
+# draw something here
+subplot 2 1 1 # right image
+rotate 40 60-3
+# draw the same here
+
+\1f
+File: mgl_ru.info, Node: Samples, Next: Copying This Manual, Prev: Examples, Up: Top
+
+3 Примеры использования MathGL
+**************************************************
+
+Эта глава содержит множество примеров кода для всех типов графиков,
+наиболее важных возможностей библиотеки и советов. Аналогичные примеры
+(с картинками) можно найти на `http://mathgl.sf.net/pictures.html'.
+
+* Menu:
+
+* 1D plotting samples::
+* 2D plotting samples::
+* 3D plotting samples::
+* Dual plotting samples::
+* Basic features::
+* Additional features::
+* Advanced features::
+
+\1f
+File: mgl_ru.info, Node: 1D plotting samples, Next: 2D plotting samples, Up: Samples
+
+3.1 Примеры 1D графиков
+======================================
+
+* Menu:
+
+* Plot sample::
+* Radar sample::
+* Tens sample::
+* Area sample::
+* Area gradient sample::
+* Bars sample::
+* Bars 2 colors sample::
+* Bars above sample::
+* Bars fall sample::
+* Barh sample::
+* Step sample::
+* Stem sample::
+* Region sample::
+* Region gradient sample::
+* Error sample::
+* BoxPlot sample::
+* Mark sample::
+* TextMark sample::
+* Tube sample::
+* Text sample::
+* Torus sample::
+* Chart sample::
+* Pie chart sample::
+* Ring chart sample::
+
+\1f
+File: mgl_ru.info, Node: Plot sample, Next: Radar sample, Up: 1D plotting samples
+
+3.1.1 Plot - пример использования
+----------------------------------------------------
+
+\0\b[image src="../png/plot.png"\0\b]
+
+new y 50 3
+modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
+modify y 'sin(2*pi*x)' 1
+modify y 'cos(2*pi*x)' 2
+box
+plot y
+
+\1f
+File: mgl_ru.info, Node: Radar sample, Next: Tens sample, Prev: Plot sample, Up: 1D plotting samples
+
+3.1.2 Radar - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/radar.png"\0\b]
+
+new y 10 3
+modify y '0.4*sin(pi*(2*x+y/2))+0.1*rnd'
+radar y '#'
+
+\1f
+File: mgl_ru.info, Node: Tens sample, Next: Area sample, Prev: Radar sample, Up: 1D plotting samples
+
+3.1.3 Tens - пример использования
+----------------------------------------------------
+
+\0\b[image src="../png/tens.png"\0\b]
+
+new y 50
+new c 50
+modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
+modify c 'sin(2*pi*x)'
+box
+tens y c
+
+\1f
+File: mgl_ru.info, Node: Area sample, Next: Area gradient sample, Prev: Tens sample, Up: 1D plotting samples
+
+3.1.4 Area - пример использования
+----------------------------------------------------
+
+\0\b[image src="../png/area.png"\0\b]
+
+new y 50 3
+modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
+modify y 'sin(2*pi*x)' 1
+modify y 'cos(2*pi*x)' 2
+origin 0 0
+box
+area y
+
+\1f
+File: mgl_ru.info, Node: Area gradient sample, Next: Bars sample, Prev: Tens sample, Up: 1D plotting samples
+
+3.1.5 Area с градиентной заливкой - пример использования
+-----------------------------------------------------------------------------------------------
+
+\0\b[image src="../png/area_2.png"\0\b]
+
+new y 50 3
+modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
+modify y 'sin(2*pi*x)' 1
+modify y 'cos(2*pi*x)' 2
+origin 0 0
+box
+area y 'cbgGyr'
+
+\1f
+File: mgl_ru.info, Node: Bars sample, Next: Bars 2 colors sample, Prev: Area gradient sample, Up: 1D plotting samples
+
+3.1.6 Bars - пример использования
+----------------------------------------------------
+
+\0\b[image src="../png/bars.png"\0\b]
+
+new y 10 3
+modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
+origin 0 0
+box
+bars y
+
+\1f
+File: mgl_ru.info, Node: Bars 2 colors sample, Next: Bars above sample, Prev: Bars sample, Up: 1D plotting samples
+
+3.1.7 Bars (2 цвета) - пример использования
+-------------------------------------------------------------------
+
+\0\b[image src="../png/bars_2.png"\0\b]
+
+new y 10 3
+modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
+origin 0 0
+box
+bars y 'cbgGyr'
+
+\1f
+File: mgl_ru.info, Node: Bars above sample, Next: Bars fall sample, Prev: Bars 2 colors sample, Up: 1D plotting samples
+
+3.1.8 Bars (один над другим) - пример использования
+-----------------------------------------------------------------------------------
+
+\0\b[image src="../png/bars_a.png"\0\b]
+
+new y 10 3
+modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
+origin 0 0
+box
+bars y 'a'
+
+\1f
+File: mgl_ru.info, Node: Bars fall sample, Next: Bars above sample, Prev: Bars above sample, Up: 1D plotting samples
+
+3.1.9 Bars "водопад" - пример использования
+---------------------------------------------------------------------
+
+\0\b[image src="../png/bars_f.png"\0\b]
+
+new y 10 3
+modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
+origin 0 0
+box
+bars y 'f'
+
+\1f
+File: mgl_ru.info, Node: Barh sample, Next: Step sample, Prev: Bars fall sample, Up: 1D plotting samples
+
+3.1.10 Barh - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/barh.png"\0\b]
+
+new y 10 3
+modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
+origin 0 0
+box
+barh y
+
+\1f
+File: mgl_ru.info, Node: Step sample, Next: Stem sample, Prev: Barh sample, Up: 1D plotting samples
+
+3.1.11 Step - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/step.png"\0\b]
+
+new y 50 3
+modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
+modify y 'sin(2*pi*x)' 1
+modify y 'cos(2*pi*x)' 2
+box
+step y
+
+\1f
+File: mgl_ru.info, Node: Stem sample, Next: Region sample, Prev: Step sample, Up: 1D plotting samples
+
+3.1.12 Stem - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/stem.png"\0\b]
+
+new y 50 3
+modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
+modify y 'sin(2*pi*x)' 1
+modify y 'cos(2*pi*x)' 2
+origin 0 0
+box
+stem y 'o'
+
+\1f
+File: mgl_ru.info, Node: Region sample, Next: Region gradient sample, Prev: Stem sample, Up: 1D plotting samples
+
+3.1.13 Region - пример использования
+-------------------------------------------------------
+
+\0\b[image src="../png/region.png"\0\b]
+
+new y1 50
+new y2 50
+modify y1 '0.3*sin(2*pi*x)'
+modify y2 '0.5+0.3*cos(2*pi*x)'
+box
+region y1 y2 'r'
+plot y1 'k2'
+plot y2 'k2'
+
+\1f
+File: mgl_ru.info, Node: Region gradient sample, Next: Error sample, Prev: Region sample, Up: 1D plotting samples
+
+3.1.14 Region с градиентной заливкой - пример использования
+--------------------------------------------------------------------------------------------------
+
+\0\b[image src="../png/region_2.png"\0\b]
+
+new y1 50
+new y2 50
+modify y1 '0.3*sin(2*pi*x)'
+modify y2 '0.5+0.3*cos(2*pi*x)'
+box
+region y1 y2 'yr'
+plot y1 'k2'
+plot y2 'k2'
+
+\1f
+File: mgl_ru.info, Node: Error sample, Next: BoxPlot sample, Prev: Region gradient sample, Up: 1D plotting samples
+
+3.1.15 Error - пример использования
+------------------------------------------------------
+
+\0\b[image src="../png/error.png"\0\b]
+
+new y 50
+new x0 10
+new y0 10
+new ex 10
+new ey 10
+modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
+modify x0 '2*x-1 + 0.1*rnd-0.05'
+modify y0 '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x) + 0.2*rnd-0.1'
+modify ey '0.2'
+modify ex '0.1'
+box
+plot y
+error x0 y0 ex ey 'ko'
+
+\1f
+File: mgl_ru.info, Node: BoxPlot sample, Next: Mark sample, Prev: Error sample, Up: 1D plotting samples
+
+3.1.16 BoxPlot - пример использования
+--------------------------------------------------------
+
+\0\b[image src="../png/boxplot.png"\0\b]
+
+new a 10 7
+modify a '(2*rnd-1)^3/2'
+box
+boxplot a
+plot a ' ko'
+
+\1f
+File: mgl_ru.info, Node: Mark sample, Next: TextMark sample, Prev: BoxPlot sample, Up: 1D plotting samples
+
+3.1.17 Mark - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/mark.png"\0\b]
+
+new y 50 3
+modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
+modify y 'sin(2*pi*x)' 1
+modify y 'cos(2*pi*x)' 2
+new y1 50
+modify y1 '0.5+0.3*cos(2*pi*x)'
+box
+mark y y1 'bs'
+
+\1f
+File: mgl_ru.info, Node: TextMark sample, Next: Tube sample, Prev: Mark sample, Up: 1D plotting samples
+
+3.1.18 TextMark - пример использования
+---------------------------------------------------------
+
+\0\b[image src="../png/textmark.png"\0\b]
+
+new y 50 3
+modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
+modify y 'sin(2*pi*x)' 1
+modify y 'cos(2*pi*x)' 2
+new y1 50
+modify y1 '0.5+0.3*cos(2*pi*x)'
+box
+textmark y y1 '\gamma'
+
+\1f
+File: mgl_ru.info, Node: Tube sample, Next: Text sample, Prev: TextMark sample, Up: 1D plotting samples
+
+3.1.19 Tube - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/tube.png"\0\b]
+
+new y 50 3
+modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
+modify y 'sin(2*pi*x)' 1
+modify y 'cos(2*pi*x)' 2
+rotate 40 60
+light on
+box
+tube y 0.05
+
+\1f
+File: mgl_ru.info, Node: Text sample, Next: Torus sample, Prev: Tube sample, Up: 1D plotting samples
+
+3.1.20 Text - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/text.png"\0\b]
+
+new y 50 3
+modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
+modify y 'sin(2*pi*x)' 1
+modify y 'cos(2*pi*x)' 2
+box
+plot y(:,0)
+text y 'This is very long string drawn along a curve' ':k'
+text y 'Another string drawn above a curve' 'T:r'
+
+\1f
+File: mgl_ru.info, Node: Torus sample, Next: Chart sample, Prev: Text sample, Up: 1D plotting samples
+
+3.1.21 Torus - пример использования
+------------------------------------------------------
+
+\0\b[image src="../png/torus.png"\0\b]
+
+new y1 50
+new y2 50
+modify y1 '0.5+0.3*cos(2*pi*x)'
+modify y2 '0.3*sin(2*pi*x)'
+rotate 40 60
+light on
+box
+torus y1 y2 'pz'
+
+\1f
+File: mgl_ru.info, Node: Chart sample, Next: Pie chart sample, Prev: Torus sample, Up: 1D plotting samples
+
+3.1.22 Chart - пример использования
+------------------------------------------------------
+
+\0\b[image src="../png/chart.png"\0\b]
+
+new ch 7 2
+modify ch 'rnd+0.1'
+rotate 40 60
+light on
+box
+chart ch
+
+\1f
+File: mgl_ru.info, Node: Pie chart sample, Next: Ring chart sample, Prev: Chart sample, Up: 1D plotting samples
+
+3.1.23 Pie chart - пример использования
+----------------------------------------------------------
+
+\0\b[image src="../png/pie_chart.png"\0\b]
+
+new ch 7 2
+modify ch 'rnd+0.1'
+rotate 40 60
+light on
+axis '(y+1)/2*cos(pi*x)' '(y+1)/2*sin(pi*x)' ''
+box
+chart ch 'bgr cmy#'
+
+\1f
+File: mgl_ru.info, Node: Ring chart sample, Prev: Pie chart sample, Up: 1D plotting samples
+
+3.1.24 Ring chart - пример использования
+-----------------------------------------------------------
+
+\0\b[image src="../png/ring_chart.png"\0\b]
+
+new ch 7 2
+modify ch 'rnd+0.1'
+rotate 40 60
+light on
+axis '(y+2)/3*cos(pi*x)' '(y+2)/3*sin(pi*x)' ''
+box
+chart ch 'bgr cmy#'
+
+\1f
+File: mgl_ru.info, Node: 2D plotting samples, Next: 3D plotting samples, Prev: 1D plotting samples, Up: Samples
+
+3.2 Примеры 2D графиков
+======================================
+
+* Menu:
+
+* Surf sample::
+* Transparent surface sample::
+* Surface in fog sample::
+* Sharp colors sample::
+* Mesh sample::
+* Fall sample::
+* Belt sample::
+* Tile sample::
+* Boxs sample::
+* Dens sample::
+* Cont sample::
+* ContF sample::
+* ContD sample::
+* Axial sample::
+* Grad sample::
+
+\1f
+File: mgl_ru.info, Node: Surf sample, Next: Transparent surface sample, Up: 2D plotting samples
+
+3.2.1 Surf - пример использования
+----------------------------------------------------
+
+\0\b[image src="../png/surf.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+rotate 40 60
+light on
+box
+surf a
+
+\1f
+File: mgl_ru.info, Node: Transparent surface sample, Next: Surface in fog sample, Prev: Surf sample, Up: 2D plotting samples
+
+3.2.2 Transparent surface - пример использования
+-------------------------------------------------------------------
+
+\0\b[image src="../png/surf_alpha.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+rotate 40 60
+light on
+alpha on
+box
+surf a
+
+\1f
+File: mgl_ru.info, Node: Surface in fog sample, Next: Sharp colors sample, Prev: Transparent surface sample, Up: 2D plotting samples
+
+3.2.3 Surface in fog - пример использования
+--------------------------------------------------------------
+
+\0\b[image src="../png/surf_fog.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+rotate 40 60
+light on
+fog 1
+box
+surf a
+
+\1f
+File: mgl_ru.info, Node: Sharp colors sample, Next: Mesh sample, Prev: Surface in fog sample, Up: 2D plotting samples
+
+3.2.4 Sharp colors - пример использования
+------------------------------------------------------------
+
+\0\b[image src="../png/surf_sl.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+rotate 40 60
+light on
+box
+surf a 'BbcyrR|'
+
+\1f
+File: mgl_ru.info, Node: Mesh sample, Next: Fall sample, Prev: Sharp colors sample, Up: 2D plotting samples
+
+3.2.5 Mesh - пример использования
+----------------------------------------------------
+
+\0\b[image src="../png/mesh.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+rotate 40 60
+box
+mesh a
+
+\1f
+File: mgl_ru.info, Node: Fall sample, Next: Belt sample, Prev: Mesh sample, Up: 2D plotting samples
+
+3.2.6 Fall - пример использования
+----------------------------------------------------
+
+\0\b[image src="../png/fall.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+rotate 40 60
+box
+fall a
+
+\1f
+File: mgl_ru.info, Node: Belt sample, Next: Tile sample, Prev: Fall sample, Up: 2D plotting samples
+
+3.2.7 Belt - пример использования
+----------------------------------------------------
+
+\0\b[image src="../png/belt.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+rotate 40 60
+light on
+box
+belt a
+
+\1f
+File: mgl_ru.info, Node: Tile sample, Next: Boxs sample, Prev: Belt sample, Up: 2D plotting samples
+
+3.2.8 Tile - пример использования
+----------------------------------------------------
+
+\0\b[image src="../png/tile.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+rotate 40 60
+light on
+box
+tile a
+
+\1f
+File: mgl_ru.info, Node: Boxs sample, Next: Dens sample, Prev: Tile sample, Up: 2D plotting samples
+
+3.2.9 Boxs - пример использования
+----------------------------------------------------
+
+\0\b[image src="../png/boxs.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+rotate 40 60
+light on
+origin 0 0 0
+box
+boxs a
+
+\1f
+File: mgl_ru.info, Node: Dens sample, Next: Cont sample, Prev: Boxs sample, Up: 2D plotting samples
+
+3.2.10 Dens - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/dens.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+box
+dens a
+colorbar
+
+\1f
+File: mgl_ru.info, Node: Cont sample, Next: ContF sample, Prev: Dens sample, Up: 2D plotting samples
+
+3.2.11 Cont - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/cont.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+rotate 40 60
+box
+cont a
+
+\1f
+File: mgl_ru.info, Node: ContF sample, Next: ContD sample, Prev: Cont sample, Up: 2D plotting samples
+
+3.2.12 ContF - пример использования
+------------------------------------------------------
+
+\0\b[image src="../png/contf.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+rotate 40 60
+light on
+box
+contf a
+
+\1f
+File: mgl_ru.info, Node: ContD sample, Next: Axial sample, Prev: ContF sample, Up: 2D plotting samples
+
+3.2.13 ContD - пример использования
+------------------------------------------------------
+
+\0\b[image src="../png/contd.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+var v 9 -1 1
+box
+contd v a
+colorbar v
+
+\1f
+File: mgl_ru.info, Node: Axial sample, Next: Grad sample, Prev: ContD sample, Up: 2D plotting samples
+
+3.2.14 Axial - пример использования
+------------------------------------------------------
+
+\0\b[image src="../png/axial.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+rotate 40 60
+light on
+alpha on
+box
+axial a
+
+\1f
+File: mgl_ru.info, Node: Grad sample, Prev: Axial sample, Up: 2D plotting samples
+
+3.2.15 Grad - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/grad.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+box:alpha on:dens a
+grad a
+
+\1f
+File: mgl_ru.info, Node: 3D plotting samples, Next: Dual plotting samples, Prev: 2D plotting samples, Up: Samples
+
+3.3 Примеры 3D графиков
+======================================
+
+* Menu:
+
+* Surf3 sample::
+* Cloud sample::
+* CloudP sample::
+* Dens3 sample::
+* Cont3 sample::
+* ContF3 sample::
+* Cont projection sample::
+* Dens projection sample::
+* CutMinMax sample::
+* Isocaps sample::
+* CutOff sample::
+
+\1f
+File: mgl_ru.info, Node: Surf3 sample, Next: Cloud sample, Up: 3D plotting samples
+
+3.3.1 Surf3 - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/surf3.png"\0\b]
+
+new a 60 50 40
+modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
+rotate 40 60
+light on
+alpha on
+box
+surf3 a
+
+\1f
+File: mgl_ru.info, Node: Cloud sample, Next: CloudP sample, Prev: Surf3 sample, Up: 3D plotting samples
+
+3.3.2 Cloud - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/cloud.png"\0\b]
+
+new a 60 50 40
+modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
+rotate 40 60
+alpha on
+box
+cloud a 'wyrRk'
+
+\1f
+File: mgl_ru.info, Node: CloudP sample, Next: Dens3 sample, Prev: Cloud sample, Up: 3D plotting samples
+
+3.3.3 CloudP - пример использования
+------------------------------------------------------
+
+\0\b[image src="../png/cloudp.png"\0\b]
+
+Not available.
+
+\1f
+File: mgl_ru.info, Node: Dens3 sample, Next: Cont3 sample, Prev: CloudP sample, Up: 3D plotting samples
+
+3.3.4 Dens3 - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/densa.png"\0\b]
+
+new a 60 50 40
+modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
+rotate 40 60
+alpha on
+origin 0 0 0
+box
+densa a
+axis
+
+\1f
+File: mgl_ru.info, Node: Cont3 sample, Next: ContF3 sample, Prev: Dens3 sample, Up: 3D plotting samples
+
+3.3.5 Cont3 - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/conta.png"\0\b]
+
+new a 60 50 40
+modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
+rotate 40 60
+box
+conta a
+
+\1f
+File: mgl_ru.info, Node: ContF3 sample, Next: Cont projection sample, Prev: Cont3 sample, Up: 3D plotting samples
+
+3.3.6 ContF3 - пример использования
+------------------------------------------------------
+
+\0\b[image src="../png/contfa.png"\0\b]
+
+new a 60 50 40
+modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
+rotate 40 60
+light on
+box
+contfa a
+
+\1f
+File: mgl_ru.info, Node: Cont projection sample, Next: Dens projection sample, Prev: ContF3 sample, Up: 3D plotting samples
+
+3.3.7 Cont projection - пример использования
+---------------------------------------------------------------
+
+\0\b[image src="../png/cont_xyz.png"\0\b]
+
+new a 60 50 40
+modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
+rotate 40 60
+box
+sum s a 'x'
+contx s '' -1
+sum s a 'y'
+conty s '' 1
+sum s a 'z'
+contz s '' -1
+
+\1f
+File: mgl_ru.info, Node: Dens projection sample, Next: CutMinMax sample, Prev: Cont projection sample, Up: 3D plotting samples
+
+3.3.8 Dens projection - пример использования
+---------------------------------------------------------------
+
+\0\b[image src="../png/dens_xyz.png"\0\b]
+
+new a 60 50 40
+modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
+rotate 40 60
+box
+sum s a 'x'
+densx s '' -1
+sum s a 'y'
+densy s '' 1
+sum s a 'z'
+densz s '' -1
+
+\1f
+File: mgl_ru.info, Node: CutMinMax sample, Next: Isocaps sample, Prev: Dens projection sample, Up: 3D plotting samples
+
+3.3.9 CutMinMax - пример использования
+---------------------------------------------------------
+
+\0\b[image src="../png/cutminmax.png"\0\b]
+
+new a 60 50 40
+modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
+rotate 40 60
+light on
+alpha on
+cut 0 -1 -1 1 0 1
+box
+surf3 a
+
+\1f
+File: mgl_ru.info, Node: Isocaps sample, Next: CutOff sample, Prev: CutMinMax sample, Up: 3D plotting samples
+
+3.3.10 "Isocaps" - пример использования
+----------------------------------------------------------
+
+\0\b[image src="../png/cutminmax2.png"\0\b]
+
+new a 61 51 40
+modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
+rotate 40 60
+light on
+cut 0 -1 -1 1 0 1.1
+box
+surf3 a -1
+contf3 a 'x' -1
+contf3 a 'y' -1
+contf3 a 'z' 0
+contf3 a 'z' 39
+
+\1f
+File: mgl_ru.info, Node: CutOff sample, Prev: Isocaps sample, Up: 3D plotting samples
+
+3.3.11 CutOff - пример использования
+-------------------------------------------------------
+
+\0\b[image src="../png/surf3_cutoff.png"\0\b]
+
+new a 60 50 40
+modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
+rotate 40 60
+light on
+alpha on
+cut '(z>(x+0.5*y-1)^2-1) & (z>(x-0.5*y-1)^2-1)'
+box
+surf3 a
+
+\1f
+File: mgl_ru.info, Node: Dual plotting samples, Next: Basic features, Prev: 3D plotting samples, Up: Samples
+
+3.4 Примеры парных/векторных графиков
+===================================================================
+
+* Menu:
+
+* SurfC sample::
+* SurfA sample::
+* TileS sample::
+* Map sample::
+* Traj sample::
+* Vect sample::
+* VectL sample::
+* VectC sample::
+* Flow sample::
+* Pipe sample::
+* Dew sample::
+* Surf3C sample::
+* Surf3A sample::
+* Vect 3D sample::
+* VectL 3D sample::
+* VectC 3D sample::
+* Flow 3D sample::
+* Pipe 3D sample::
+* Crust sample::
+* Dots sample::
+
+\1f
+File: mgl_ru.info, Node: SurfC sample, Next: SurfA sample, Up: Dual plotting samples
+
+3.4.1 SurfC - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/surfc.png"\0\b]
+
+new a 50 40
+new b 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+rotate 40 60
+light on
+box
+surfc a b
+
+\1f
+File: mgl_ru.info, Node: SurfA sample, Next: TileS sample, Prev: SurfC sample, Up: Dual plotting samples
+
+3.4.2 SurfA - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/surfa.png"\0\b]
+
+new a 50 40
+new b 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+rotate 40 60
+light on
+alpha on
+box
+surfa a b
+
+\1f
+File: mgl_ru.info, Node: TileS sample, Next: Map sample, Prev: SurfA sample, Up: Dual plotting samples
+
+3.4.3 TileS - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/tiles.png"\0\b]
+
+new a 50 40
+new b 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+box
+tile a b
+
+\1f
+File: mgl_ru.info, Node: Map sample, Next: Traj sample, Prev: TileS sample, Up: Dual plotting samples
+
+3.4.4 Map - пример использования
+---------------------------------------------------
+
+\0\b[image src="../png/map.png"\0\b]
+
+new a 50 40
+new b 50 40
+text 0 0 '\to'
+zrange -2 2
+subplot 2 1 0
+text 0 1.1 '\{x, y\}' '' -2
+box
+fill a 'x'
+fill b 'y'
+map a b 'brgk' 0 0
+subplot 2 1 1
+text 0 1.1 '\{\frac{x^3+y^3}{2}, \frac{x-y}{2}\}' '' -2
+box
+fill a '(x^3+y^3)/2'
+fill b '(x-y)/2'
+map a b 'brgk' 0 0
+
+\1f
+File: mgl_ru.info, Node: Traj sample, Next: Vect sample, Prev: Map sample, Up: Dual plotting samples
+
+3.4.5 Traj - пример использования
+----------------------------------------------------
+
+\0\b[image src="../png/traj.png"\0\b]
+
+new y 50 3
+new x 50
+new y1 50
+new y2 50
+modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
+modify y 'sin(2*pi*x)' 1
+modify y 'cos(2*pi*x)' 2
+fill x -1 1
+modify y1 '0.5+0.3*cos(2*pi*x)'
+modify y2 '0.3*sin(2*pi*x)'
+box
+plot x y
+traj x y y1 y2
+
+\1f
+File: mgl_ru.info, Node: Vect sample, Next: VectL sample, Prev: Traj sample, Up: Dual plotting samples
+
+3.4.6 Vect - пример использования
+----------------------------------------------------
+
+\0\b[image src="../png/vect.png"\0\b]
+
+new a 20 30
+new b 20 30
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+box
+vect a b
+
+\1f
+File: mgl_ru.info, Node: VectL sample, Next: VectC sample, Prev: Vect sample, Up: Dual plotting samples
+
+3.4.7 VectL - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/vectl.png"\0\b]
+
+new a 20 30
+new b 20 30
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+box
+vectl a b
+
+\1f
+File: mgl_ru.info, Node: VectC sample, Next: Flow sample, Prev: VectL sample, Up: Dual plotting samples
+
+3.4.8 VectC - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/vectc.png"\0\b]
+
+new a 20 30
+new b 20 30
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+box
+vectc a b
+
+\1f
+File: mgl_ru.info, Node: Flow sample, Next: Pipe sample, Prev: VectC sample, Up: Dual plotting samples
+
+3.4.9 Flow - пример использования
+----------------------------------------------------
+
+\0\b[image src="../png/flow.png"\0\b]
+
+new a 20 30
+new b 20 30
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+box
+flow a b
+
+\1f
+File: mgl_ru.info, Node: Pipe sample, Next: Dew sample, Prev: Flow sample, Up: Dual plotting samples
+
+3.4.10 Pipe - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/pipe.png"\0\b]
+
+new a 20 30
+new b 20 30
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+light on
+box
+pipe a b
+
+\1f
+File: mgl_ru.info, Node: Dew sample, Next: Surf3C sample, Prev: Pipe sample, Up: Dual plotting samples
+
+3.4.11 Dew - пример использования
+----------------------------------------------------
+
+\0\b[image src="../png/dew.png"\0\b]
+
+new a 20 30
+new b 20 30
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+box
+light on
+dew a b
+
+\1f
+File: mgl_ru.info, Node: Surf3C sample, Next: Surf3A sample, Prev: Dew sample, Up: Dual plotting samples
+
+3.4.12 Surf3C - пример использования
+-------------------------------------------------------
+
+\0\b[image src="../png/surf3c.png"\0\b]
+
+new a 60 50 40
+new b 60 50 40
+modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
+modify b '1-2*tanh(4*(x+y-1)^2)'
+rotate 40 60
+light on
+alpha on
+box
+surf3c a b
+
+\1f
+File: mgl_ru.info, Node: Surf3A sample, Next: Vect 3D sample, Prev: Surf3C sample, Up: Dual plotting samples
+
+3.4.13 Surf3A - пример использования
+-------------------------------------------------------
+
+\0\b[image src="../png/surf3a.png"\0\b]
+
+new a 60 50 40
+new b 60 50 40
+modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
+modify b '1-2*tanh(4*(x+y-1)^2)'
+rotate 40 60
+light on
+alpha on
+box
+surf3a a b
+
+\1f
+File: mgl_ru.info, Node: Vect 3D sample, Next: VectL 3D sample, Prev: Surf3A sample, Up: Dual plotting samples
+
+3.4.14 Vect 3D - пример использования
+--------------------------------------------------------
+
+\0\b[image src="../png/vect3.png"\0\b]
+
+new ex 10 10 10
+new ey 10 10 10
+new ez 10 10 10
+fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
+fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
+fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
+rotate 40 60
+box
+vect ex ey ez 'bwr'
+
+\1f
+File: mgl_ru.info, Node: VectL 3D sample, Next: VectC 3D sample, Prev: Vect 3D sample, Up: Dual plotting samples
+
+3.4.15 VectL 3D - пример использования
+---------------------------------------------------------
+
+\0\b[image src="../png/vectl3.png"\0\b]
+
+new ex 10 10 10
+new ey 10 10 10
+new ez 10 10 10
+fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
+fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
+fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
+rotate 40 60
+box
+vectl ex ey ez 'bwr'
+
+\1f
+File: mgl_ru.info, Node: VectC 3D sample, Next: Flow 3D sample, Prev: VectL 3D sample, Up: Dual plotting samples
+
+3.4.16 VectC 3D - пример использования
+---------------------------------------------------------
+
+\0\b[image src="../png/vectc3.png"\0\b]
+
+new ex 10 10 10
+new ey 10 10 10
+new ez 10 10 10
+fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
+fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
+fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
+rotate 40 60
+box
+vectc ex ey ez 'bwr'
+
+\1f
+File: mgl_ru.info, Node: Flow 3D sample, Next: Pipe 3D sample, Prev: VectC 3D sample, Up: Dual plotting samples
+
+3.4.17 Flow 3D - пример использования
+--------------------------------------------------------
+
+\0\b[image src="../png/flow3.png"\0\b]
+
+new ex 30 30 30
+new ey 30 30 30
+new ez 30 30 30
+fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
+fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
+fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
+rotate 40 60
+box
+flow ex ey ez 'bwr'
+
+\1f
+File: mgl_ru.info, Node: Pipe 3D sample, Next: Crust sample, Prev: Flow 3D sample, Up: Dual plotting samples
+
+3.4.18 Pipe 3D - пример использования
+--------------------------------------------------------
+
+\0\b[image src="../png/pipe3.png"\0\b]
+
+new ex 10 10 10
+new ey 10 10 10
+new ez 10 10 10
+fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
+fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
+fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
+rotate 40 60
+light on
+box
+pipe ex ey ez 'bwr'
+
+\1f
+File: mgl_ru.info, Node: Crust sample, Next: Dots sample, Prev: Pipe 3D sample, Up: Dual plotting samples
+
+3.4.19 Crust - пример использования
+------------------------------------------------------
+
+\0\b[image src="../png/crust.png"\0\b]
+
+read a 'hotdogs.pts'
+norm a -1 1 on
+rotate 40 60
+light on
+box
+crust a 'p'
+
+\1f
+File: mgl_ru.info, Node: Dots sample, Prev: Crust sample, Up: Dual plotting samples
+
+3.4.20 Dots - пример использования
+-----------------------------------------------------
+
+\0\b[image src="../png/dots.png"\0\b]
+
+read a 'hotdogs.pts'
+norm a -1 1 on
+rotate 40 60
+box
+dots a 'p'
+
+\1f
+File: mgl_ru.info, Node: Basic features, Next: Additional features, Prev: Dual plotting samples, Up: Samples
+
+3.5 Базовые возможности
+=========================================
+
+* Menu:
+
+* 1D plot sample::
+* 2D plot sample::
+* 3D plot sample::
+* Line styles sample::
+* Arrow styles sample::
+* Text styles sample::
+* TeX parsing sample::
+* Font faces sample::
+* Colors sample::
+* Color schemes sample::
+* Normal transparency::
+* Glass-like transparency::
+* Lamp-like transparency::
+
+\1f
+File: mgl_ru.info, Node: 1D plot sample, Next: 2D plot sample, Up: Basic features
+
+3.5.1 Пример графиков 1D данных
+---------------------------------------------------
+
+\0\b[image src="../png/sample8.png"\0\b]
+
+new y0 50: modify y0 'sin(pi*(2*x-1))'
+subplot 2 2 0
+plot y0: box
+
+subplot 2 2 1
+new y1 50 2
+modify y1 'sin(pi*2*x-pi)'
+modify y1 'cos(pi*2*x-pi)/2' 1
+plot y1: box
+
+new x 50: modify x 'cos(pi*2*x-pi)'
+plot x y0 'Y+'
+plot y1(:,0) y(:,1) 'q|'
+
+subplot 2 2 2:rotate 60 40
+new z 50: modify z '2*x-1'
+plot x y0 z 'g':box
+new y2 10 3
+modify y2 'cos(pi*(2*x-1-y))'
+modify y2 '2*x-1' 2
+plot y2(:,0) y2(:,1) y2(:,2) 'bo '
+
+subplot 2 2 3:rotate 60 40
+bars x y0 z 'r':box
+
+\1f
+File: mgl_ru.info, Node: 2D plot sample, Next: 3D plot sample, Prev: 1D plot sample, Up: Basic features
+
+3.5.2 Пример графиков 2D данных
+---------------------------------------------------
+
+\0\b[image src="../png/sample9.png"\0\b]
+
+light on
+
+new a0 50 40
+modify a0 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))'
+subplot 2 2 0:rotate 60 40
+surf a0: box
+
+new x 50 40: new y 50 40: new z 50 40
+modify x '0.8*sin(2*pi*x)*sin(pi*y)'
+modify y '0.8*cos(2*pi*x)*sin(pi*y)'
+modify z '0.8*cos(pi*y)'
+subplot 2 2 1:rotate 60 40
+surf x y z 'bbwrr': box
+
+new a1 50 40 3
+modify a1 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))'
+modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*sin(3*pi*(x*y))' 1
+modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))' 2
+subplot 2 2 2:rotate 60 40
+alpha on
+surf a1: box
+
+subplot 2 2 3: rotate 60 40
+dens a1: box
+
+\1f
+File: mgl_ru.info, Node: 3D plot sample, Next: Line styles sample, Prev: 2D plot sample, Up: Basic features
+
+3.5.3 Пример графиков 3D данных
+---------------------------------------------------
+
+\0\b[image src="../png/sampleb.png"\0\b]
+
+alpha on: light on
+light 0 0 0 1
+new a 30 30 30: new b 30 30 30
+modify a 'exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))'
+modify b '16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)'
+caxis 0 1
+
+subplot 2 2 0: rotate 40 60
+surf3 a 'wgk': box
+subplot 2 2 1: rotate 40 60
+densa a: box: axis
+subplot 2 2 2: rotate 40 60
+cloud a: box
+subplot 2 2 3: rotate 40 60
+surf3a b a 'q': box
+
+\1f
+File: mgl_ru.info, Node: Line styles sample, Next: Arrow styles sample, Prev: 3D plot sample, Up: Basic features
+
+3.5.4 Пример стилей линий и маркеров
+--------------------------------------------------------------
+
+\0\b[image src="../png/sample5.png"\0\b]
+
+NOT AVAILABLE
+
+\1f
+File: mgl_ru.info, Node: Arrow styles sample, Next: Text styles sample, Prev: Line styles sample, Up: Basic features
+
+3.5.5 Пример стилей стрелок
+----------------------------------------------
+
+\0\b[image src="../png/sampled.png"\0\b]
+
+NOT AVAILABLE
+
+\1f
+File: mgl_ru.info, Node: Text styles sample, Next: TeX parsing sample, Prev: Arrow styles sample, Up: Basic features
+
+3.5.6 Пример стилей текста
+--------------------------------------------
+
+\0\b[image src="../png/sample4.png"\0\b]
+
+text 0 1 'Text can be in ASCII and in Unicode'
+text 0 0.6 'It can be \wire{wire}, \big{big} or #r{colored}'
+text 0 0.2 'One can change style in string: \b{bold}, \i{italic, \b{both}}'
+text 0 -0.2 'Easy to \a{overline} or \u{underline}'
+text 0 -0.6 'Easy to change indexes ^{up} _{down} @{center}'
+text 0 -1 'It parse TeX: \int \alpha \cdot \sqrt3{sin(\pi x)^2 + \gamma_{i_k}} dx'
+
+\1f
+File: mgl_ru.info, Node: TeX parsing sample, Next: Font faces sample, Prev: Text styles sample, Up: Basic features
+
+3.5.7 Пример TeX формулы
+-------------------------------------
+
+\0\b[image src="../png/samplee.png"\0\b]
+
+text 0 0 '\sqrt{\frac{\alpha^{\gamma^2}+\overset 1{\big\infty}}{\sqrt3{2+b}}}' '' -4
+
+\1f
+File: mgl_ru.info, Node: Font faces sample, Next: Colors sample, Prev: TeX parsing sample, Up: Basic features
+
+3.5.8 Примеры начертаний шрифта
+------------------------------------------------------
+
+\0\b[image src="../png/fonts.png"\0\b]
+
+NOT AVAILABLE
+
+\1f
+File: mgl_ru.info, Node: Colors sample, Next: Color schemes sample, Prev: Font faces sample, Up: Basic features
+
+3.5.9 Примеры цветов
+---------------------------------
+
+\0\b[image src="../png/colors.png"\0\b]
+
+#LENUQ
+facez -1 -1 0 0.4 0.3 'L#': text -0.8 -0.9 'L' 'C:w'
+facez -0.6 -1 0 0.4 0.3 'E#': text -0.4 -0.9 'E' 'C:w'
+facez -0.2 -1 0 0.4 0.3 'N#': text 0 -0.9 'N' 'C:w'
+facez 0.2 -1 0 0.4 0.3 'U#': text 0.4 -0.9 'U' 'C:w'
+facez 0.6 -1 0 0.4 0.3 'Q#': text 0.8 -0.9 'Q' 'C:w'
+#lenuq
+facez -1 -0.7 0 0.4 0.3 'l#': text -0.8 -0.6 'l' 'C:k'
+facez -0.6 -0.7 0 0.4 0.3 'e#': text -0.4 -0.6 'e' 'C:k'
+facez -0.2 -0.7 0 0.4 0.3 'n#': text 0 -0.6 'n' 'C:k'
+facez 0.2 -0.7 0 0.4 0.3 'u#': text 0.4 -0.6 'u' 'C:k'
+facez 0.6 -0.7 0 0.4 0.3 'q#': text 0.8 -0.6 'q' 'C:k'
+#CMYkP
+facez -1 -0.4 0 0.4 0.3 'C#': text -0.8 -0.3 'C' 'C:w'
+facez -0.6 -0.4 0 0.4 0.3 'M#': text -0.4 -0.3 'M' 'C:w'
+facez -0.2 -0.4 0 0.4 0.3 'Y#': text 0 -0.3 'Y' 'C:w'
+facez 0.2 -0.4 0 0.4 0.3 'k#': text 0.4 -0.3 'k' 'C:w'
+facez 0.6 -0.4 0 0.4 0.3 'P#': text 0.8 -0.3 'P' 'C:w'
+#lenuq
+facez -1 -0.1 0 0.4 0.3 'c#': text -0.8 0 'c' 'C:k'
+facez -0.6 -0.1 0 0.4 0.3 'm#': text -0.4 0 'm' 'C:k'
+facez -0.2 -0.1 0 0.4 0.3 'y#': text 0 0 'y' 'C:k'
+facez 0.2 -0.1 0 0.4 0.3 'w#': text 0.4 0 'w' 'C:k'
+facez 0.6 -0.1 0 0.4 0.3 'p#': text 0.8 0 'p' 'C:k'
+#BGRHW
+facez -1 0.2 0 0.4 0.3 'B#': text -0.8 0.3 'B' 'C:k'
+facez -0.6 0.2 0 0.4 0.3 'G#': text -0.4 0.3 'G' 'C:k'
+facez -0.2 0.2 0 0.4 0.3 'R#': text 0 0.3 'R' 'C:k'
+facez 0.2 0.2 0 0.4 0.3 'H#': text 0.4 0.3 'H' 'C:k'
+facez 0.6 0.2 0 0.4 0.3 'W#': text 0.8 0.3 'W' 'C:k'
+#bgrhw
+facez -1 0.5 0 0.4 0.3 'b#': text -0.8 0.6 'b' 'C:w'
+facez -0.6 0.5 0 0.4 0.3 'g#': text -0.4 0.6 'g' 'C:w'
+facez -0.2 0.5 0 0.4 0.3 'r#': text 0 0.6 'r' 'C:w'
+facez 0.2 0.5 0 0.4 0.3 'h#': text 0.4 0.6 'h' 'C:w'
+facez 0.6 0.5 0 0.4 0.3 'w#': text 0.8 0.6 'w' 'C:w'
+#brighted
+facez -1 0.8 0 0.4 0.3 'r1#': text -0.8 0.9 'r1' 'C:k'
+facez -0.6 0.8 0 0.4 0.3 'r3#': text -0.4 0.9 'r3' 'C:k'
+facez -0.2 0.8 0 0.4 0.3 'r5#': text 0 0.9 'r5' 'C:k'
+facez 0.2 0.8 0 0.4 0.3 'r7#': text 0.4 0.9 'r7' 'C:k'
+facez 0.6 0.8 0 0.4 0.3 'r9#': text 0.8 0.9 'r9' 'C:k'
+
+\1f
+File: mgl_ru.info, Node: Color schemes sample, Next: Normal transparency, Prev: Colors sample, Up: Basic features
+
+3.5.10 Примеры цветовых схем
+-----------------------------------------------
+
+\0\b[image src="../png/color_schemes.png"\0\b]
+
+new a 256 2: fill a 'x'
+subplot 2 10 0 0.2:dens a 'kw'
+text -1.4 -0.3 'kw' '' -8
+subplot 2 10 1 0.2:dens a 'wk'
+text -1.4 -0.3 'wk' '' -8
+subplot 2 10 2 0.2:dens a 'kHCcw'
+text -1.4 -0.3 'kHCcw' '' -8
+subplot 2 10 3 0.2:dens a 'kBbcw'
+text -1.4 -0.3 'kBbcw' '' -8
+subplot 2 10 4 0.2:dens a 'kRryw'
+text -1.4 -0.3 'kRryw' '' -8
+subplot 2 10 5 0.2:dens a 'kGgew'
+text -1.4 -0.3 'kGgew' '' -8
+subplot 2 10 6 0.2:dens a 'BbwrR'
+text -1.4 -0.3 'BbwrR' '' -8
+subplot 2 10 7 0.2:dens a 'BbwgG'
+text -1.4 -0.3 'BbwgG' '' -8
+subplot 2 10 8 0.2:dens a 'GgwmM'
+text -1.4 -0.3 'GgwmM' '' -8
+subplot 2 10 9 0.2:dens a 'UuwqR'
+text -1.4 -0.3 'UuwqR' '' -8
+subplot 2 10 10 0.2:dens a 'QqwcC'
+text -1.4 -0.3 'QqwcC' '' -8
+subplot 2 10 11 0.2:dens a 'CcwyY'
+text -1.4 -0.3 'CcwyY' '' -8
+subplot 2 10 12 0.2:dens a 'bcwyr'
+text -1.4 -0.3 'bcwyr' '' -8
+subplot 2 10 13 0.2:dens a 'bwr'
+text -1.4 -0.3 'bwr' '' -8
+subplot 2 10 14 0.2:dens a 'BbcyrR'
+text -1.4 -0.3 'BbcyrR' '' -8
+subplot 2 10 15 0.2:dens a 'UbcyqR'
+text -1.4 -0.3 'UbcyqR' '' -8
+subplot 2 10 16 0.2:dens a 'BbcwyrR'
+text -1.4 -0.3 'BbcwyrR' '' -8
+subplot 2 10 17 0.2:dens a 'bcyr'
+text -1.4 -0.3 'bcyr' '' -8
+subplot 2 10 18 0.2:dens a 'BbcyrR|'
+text -1.4 -0.3 'BbcyrR|' '' -8
+subplot 2 10 19 0.2:dens a 'bgr'
+text -1.4 -0.3 'bgr' '' -8
+
+\1f
+File: mgl_ru.info, Node: Normal transparency, Next: Glass-like transparency, Prev: Color schemes sample, Up: Basic features
+
+3.5.11 Обычная прозрачность
+----------------------------------------------
+
+\0\b[image src="../png/type0.png"\0\b]
+
+alpha on: light on
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+
+transptype 0: clf
+subplot 2 2 0: rotate 40 60: surf a: box
+subplot 2 2 1: rotate 40 60: dens a: box
+subplot 2 2 2: rotate 40 60: cont a: box
+subplot 2 2 3: rotate 40 60: axial a: box
+
+\1f
+File: mgl_ru.info, Node: Glass-like transparency, Next: Lamp-like transparency, Prev: Normal transparency, Up: Basic features
+
+3.5.12 "Стеклянная" прозрачность
+------------------------------------------------------
+
+\0\b[image src="../png/type1.png"\0\b]
+
+alpha on: light on
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+
+transptype 1: clf
+subplot 2 2 0: rotate 40 60: surf a: box
+subplot 2 2 1: rotate 40 60: dens a: box
+subplot 2 2 2: rotate 40 60: cont a: box
+subplot 2 2 3: rotate 40 60: axial a: box
+
+\1f
+File: mgl_ru.info, Node: Lamp-like transparency, Prev: Glass-like transparency, Up: Basic features
+
+3.5.13 "Ламповая" прозрачность
+--------------------------------------------------
+
+\0\b[image src="../png/type2.png"\0\b]
+
+alpha on: light on
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+
+transptype 2: clf
+subplot 2 2 0: rotate 40 60: surf a: box
+subplot 2 2 1: rotate 40 60: dens a: box
+subplot 2 2 2: rotate 40 60: cont a: box
+subplot 2 2 3: rotate 40 60: axial a: box
+
+\1f
+File: mgl_ru.info, Node: Additional features, Next: Advanced features, Prev: Basic features, Up: Samples
+
+3.6 Дополнительные возможности
+=======================================================
+
+* Menu:
+
+* Legend sample::
+* Adding mesh sample::
+* Surf & Cont sample::
+* Flow & Dens sample::
+* Several light sample::
+* Mirrored surface sample::
+* Cont with labels sample::
+* Ternary plot sample::
+* Coloring by coordinates sample::
+* Drops sample::
+* Molecules drawing sample::
+
+\1f
+File: mgl_ru.info, Node: Legend sample, Next: Adding mesh sample, Up: Additional features
+
+3.6.1 Legend - пример использования
+------------------------------------------------------
+
+\0\b[image src="../png/legend.png"\0\b]
+
+new f 50 3
+modify f 'sin(2*pi*x*x)'
+modify f 'sin(2*pi*x)' 1
+modify f 'sin(2*pi*sqrt(x))' 2
+axis 0 -1 1 1
+box
+plot f
+axis
+addlegend 'sin(\pi {x^2})' 'b'
+addlegend 'sin(\pi x)' 'g*'
+addlegend 'sin(\pi \sqrt{\a x})' 'r+'
+legend
+
+\1f
+File: mgl_ru.info, Node: Adding mesh sample, Next: Surf & Cont sample, Prev: Legend sample, Up: Additional features
+
+3.6.2 Добавляем сетку
+-----------------------------------
+
+\0\b[image src="../png/samplea.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+alpha on
+light on
+subplot 2 2 0
+rotate 40 60
+surf a 'BbcyrR#'
+box
+subplot 2 2 1
+rotate 40 60
+dens a 'BbcyrR#'
+box
+subplot 2 2 2
+rotate 40 60
+cont a 'BbcyrR#'
+box
+subplot 2 2 3
+rotate 40 60
+axial a 'BbcyrR#'
+box
+
+\1f
+File: mgl_ru.info, Node: Surf & Cont sample, Next: Flow & Dens sample, Prev: Adding mesh sample, Up: Additional features
+
+3.6.3 Surf & Cont - пример использования
+-----------------------------------------------------------
+
+\0\b[image src="../png/surf_cont_y.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+rotate 40 60
+light on
+box
+surf a
+cont a 'y'
+
+\1f
+File: mgl_ru.info, Node: Flow & Dens sample, Next: Several light sample, Prev: Surf & Cont sample, Up: Additional features
+
+3.6.4 Flow & Dens - пример использования
+-----------------------------------------------------------
+
+\0\b[image src="../png/flow_dens.png"\0\b]
+
+new a 50 40
+new b 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+copy d a
+modify d 'sqrt(v^2+w^2)' a b
+box
+flow a b 'br'
+dens d 'BbcyrR'
+
+\1f
+File: mgl_ru.info, Node: Several light sample, Next: Mirrored surface sample, Prev: Flow & Dens sample, Up: Additional features
+
+3.6.5 Несколько источников света
+--------------------------------------------------------
+
+\0\b[image src="../png/several_light.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+rotate 40 60
+light on
+light 1 0 1 0 'c'
+light 2 1 0 0 'y'
+light 3 0 -1 0 'm'
+box
+surf a 'h'
+
+\1f
+File: mgl_ru.info, Node: Mirrored surface sample, Next: Cont with labels sample, Prev: Several light sample, Up: Additional features
+
+3.6.6 Отражение поверхности
+-----------------------------------------------
+
+\0\b[image src="../png/mirror.png"\0\b]
+
+new a 30 40
+modify a 'pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)'
+rotate 40 60
+light on
+surf a 'r'; yrange 0 1
+surf a 'b'; yrange 0 -1
+box
+ or
+new a 30 40
+var x 30 -1 1
+var y1 40 0 1
+var y2 40 0 -1
+modify a 'pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)'
+rotate 40 60
+light on
+surf x y1 a 'r'
+surf x y2 a 'b'
+box
+
+\1f
+File: mgl_ru.info, Node: Cont with labels sample, Next: Ternary plot sample, Prev: Mirrored surface sample, Up: Additional features
+
+3.6.7 Cont и подписи - пример использования
+----------------------------------------------------------------------
+
+\0\b[image src="../png/contt.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+box
+cont a 'BbcyrRt'
+
+\1f
+File: mgl_ru.info, Node: Ternary plot sample, Next: Coloring by coordinates sample, Prev: Cont with labels sample, Up: Additional features
+
+3.6.8 Ternary plot - пример использования
+------------------------------------------------------------
+
+\0\b[image src="../png/ternary.png"\0\b]
+
+new rx 10
+new ry 10
+new x 50
+new y 50
+new a 20 30
+modify a '4*x*y'
+modify x '0.25*(1+cos(2*pi*x))'
+modify y '0.25*(1+sin(2*pi*x))'
+modify rx 'rnd'
+modify ry 'rnd*(1-v)' rx
+text -0.8 1.3 'Ternary plot (x+y+t=1)'
+ternary on
+plot x y 'r2'
+plot rx ry 'q^ '
+cont a
+line 0.5 0 0 0.75 'g2'
+axis
+grid 'xyz' 'B;'
+xlabel 'x comp.'
+ylabel 'y comp.'
+tlabel 't comp.'
+
+\1f
+File: mgl_ru.info, Node: Coloring by coordinates sample, Next: Drops sample, Prev: Ternary plot sample, Up: Additional features
+
+3.6.9 Окрашивание по положению грани
+---------------------------------------------------------------
+
+\0\b[image src="../png/surf3_rgbd.png"\0\b]
+
+new a 60 50 40
+modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
+rotate 40 60
+box
+surf3 a 'bgrd'
+
+\1f
+File: mgl_ru.info, Node: Drops sample, Next: Molecules drawing sample, Prev: Coloring by coordinates sample, Up: Additional features
+
+3.6.10 Drops - пример использования
+------------------------------------------------------
+
+\0\b[image src="../png/drops.png"\0\b]
+
+light on
+text -1 1.2 'sh=0'
+drop -1 0 0 1 0.5 'r' 0
+text -0.33 1.2 'sh=0.33'
+drop -0.33 0 0 1 0.5 'r' 0.33
+text 0.33 1.2 'sh=0.67'
+drop 0.33 0 0 1 0.5 'r' 0.67
+text 1 1.2 'sh=1'
+drop 1 0 0 1 0.5 'r' 1
+ball -1 0 1 'k'
+ball -0.33 0 1 'k'
+ball 0.33 0 1 'k'
+ball 1 0 1 'k'
+line -1 0 1 1 0 1 'b'
+new h 100
+modify h '0.25*(1+x)^2'
+plot h 'k|'
+text -1 0.6 'h\sim(1+sh)^2' 'rL'
+
+\1f
+File: mgl_ru.info, Node: Molecules drawing sample, Prev: Drops sample, Up: Additional features
+
+3.6.11 Рисование молекул
+----------------------------------------
+
+\0\b[image src="../png/molecule.png"\0\b]
+
+alpha on
+light on
+subplot 2 2 0
+text 0 1.2 'Methane, CH_4' '' -3
+rotate 60 120
+sphere 0 0 0 0.25 'k'
+drop 0 0 0 0 0 1 0.35 'h' 1 2
+sphere 0 0 0.7 0.25 'g'
+drop 0 0 0 -0.94 0 -0.33 0.35 'h' 1 2
+sphere -0.66 0 -0.23 0.25 'g'
+drop 0 0 0 0.47 0.82 -0.33 0.35 'h' 1 2
+sphere 0.33 0.57 -0.23 0.25 'g'
+drop 0 0 0 0.47 -0.82 -0.33 0.35 'h' 1 2
+sphere 0.33 -0.57 -0.23 0.25 'g'
+subplot 2 2 1
+text 0 1.2 'Water, H{_2}O' '' -3
+rotate 60 100
+sphere 0 0 0 0.25 'r'
+drop 0 0 0 0.3 0.5 0 0.3 'm' 1 2
+sphere 0.3 0.5 0 0.25 'g'
+drop 0 0 0 0.3 -0.5 0 0.3 'm' 1 2
+sphere 0.3 -0.5 0 0.25 'g'
+subplot 2 2 2
+text 0 1.2 'Oxygen, O_2' '' -3
+rotate 60 120
+drop 0 0.5 0 0 -0.3 0 0.3 'm' 1 2
+sphere 0 0.5 0 0.25 'r'
+drop 0 -0.5 0 0 0.3 0 0.3 'm' 1 2
+sphere 0 -0.5 0 0.25 'r'
+subplot 2 2 3
+text 0 1.2 0 'Ammonia, NH_3' '' -3
+rotate 60 120
+sphere 0 0 0 0.25 'b'
+drop 0 0 0 0.33 0.57 0 0.32 'n' 1 2
+sphere 0.33 0.57 0 0.25 'g'
+drop 0 0 0 0.33 -0.57 0 0.32 'n' 1 2
+sphere 0.33 -0.57 0 0.25 'g'
+drop 0 0 0 -0.65 0 0 0.32 'n' 1 2
+sphere -0.65 0 0 0.25 'g'
+
+\1f
+File: mgl_ru.info, Node: Advanced features, Prev: Additional features, Up: Samples
+
+3.7 "Продвинутые" возможности
+===================================================
+
+* Menu:
+
+* Curvelinear coorinates sample::
+* 2-axes sample::
+* Semi-log sample::
+* Log-log sample::
+* Fitting sample::
+* Envelop sample::
+* Sew sample::
+* STFA sample::
+* PDE sample::
+* Beam tracing sample::
+* Parser sample::
+* Manual ticks sample::
+* ColumnPlot sample::
+* StickPlot sample::
+* Stereo image sample::
+
+\1f
+File: mgl_ru.info, Node: Curvelinear coorinates sample, Next: 2-axes sample, Up: Advanced features
+
+3.7.1 Криволинейные координаты
+-----------------------------------------------------
+
+\0\b[image src="../png/sample3.png"\0\b]
+
+origin -1 1 -1
+subplot 2 2 0
+rotate 60 40
+line -1 0.5 0 1 0.5 0 'r2'
+axis
+grid
+text 0 1.3 1 'Cartesian'
+subplot 2 2 1
+rotate 60 40
+axis 'y*sin(pi*x)' 'y*cos(pi*x)' ''
+line -1 0.5 0 1 0.5 0 'r2'
+axis
+grid
+text 0 1.3 1 'Cylindrical'
+subplot 2 2 2
+rotate 60 40
+axis '2*y*x' 'y*y - x*x' ''
+line -1 0.5 0 1 0.5 0 'r2'
+axis
+grid
+text 0 1.3 1 'Parabolic'
+subplot 2 2 3
+rotate 60 40
+axis 'y*sin(pi*x)' 'y*cos(pi*x)' 'x+z'
+line -1 0.5 0 1 0.5 0 'r2'
+axis
+grid
+text 0 1.3 1 'Spiral'
+axis '' '' '' # set to default Cartesian
+
+\1f
+File: mgl_ru.info, Node: 2-axes sample, Next: Semi-log sample, Prev: Curvelinear coorinates sample, Up: Advanced features
+
+3.7.2 Несколько осей на одном графике
+----------------------------------------------------------------
+
+\0\b[image src="../png/2_axis.png"\0\b]
+
+new y1 50
+new y2 50
+modify y1 '0.3*sin(2*pi*x)'
+modify y2 '0.5+0.3*cos(2*pi*x)'
+axis -1 -1 -1 1 1 1
+origin -1 -1 -1
+axis
+ylabel 'axis 1' 0
+plot y1 'b'
+axis 0 0 0 1 1 1
+origin 1 1 1
+axis
+ylabel 'axis 2' 0
+stem y2 'r'
+
+\1f
+File: mgl_ru.info, Node: Semi-log sample, Next: Log-log sample, Prev: 2-axes sample, Up: Advanced features
+
+3.7.3 Semi-log - пример использования
+--------------------------------------------------------
+
+\0\b[image src="../png/semilog.png"\0\b]
+
+new x 2000
+new y 2000
+modify x '0.01/(x+10^(-5))'
+modify y 'sin(1/v)' x
+xrange 0.01 1000
+origin 0.01 -1 0
+xtick 0
+axis 'lg(x)' '' ''
+plot x y 'b2'
+axis
+grid 'xy' 'g'
+xlabel 'x' 0
+ylabel 'y = sin 1/x' 0
+box
+
+\1f
+File: mgl_ru.info, Node: Log-log sample, Next: Fitting sample, Prev: Semi-log sample, Up: Advanced features
+
+3.7.4 Log-log - пример использования
+-------------------------------------------------------
+
+\0\b[image src="../png/loglog.png"\0\b]
+
+new x 100
+new y 100
+modify x 'pow(10,6*x-3)'
+modify y 'sqrt(1+v^2)' x
+axis 0.001 0.1 1000 1000
+xtick 0
+ytick 0
+axis 'lg(x)' 'lg(y)' ''
+plot x y 'b2'
+axis
+grid 'xy' 'g;'
+xlabel 'x' 0
+ylabel 'y=\sqrt{1+x^2}' 0
+box
+
+\1f
+File: mgl_ru.info, Node: Fitting sample, Next: Envelop sample, Prev: Log-log sample, Up: Advanced features
+
+3.7.5 Fitting - пример использования
+-------------------------------------------------------
+
+\0\b[image src="../png/fit.png"\0\b]
+
+new rnd 100
+fill rnd '0.4*rnd+0.1+sin(2*pi*x)'
+new in 100
+fill in '0.3+sin(2*pi*x)'
+yrange -2 2
+plot rnd '. '
+box
+list ini 1 1 3
+fit res rnd 'a+b*sin(c*x)' 'abc' ini
+plot res 'r'
+plot in 'b'
+text -1 -1.3 'fitted:' 'L:r' -1
+putsfit 0 -1.8 'y = ' 'C:r'
+text 0 2.2 'initial: y = 0.3+sin(2\pi x)' 'C:b' -1
+
+\1f
+File: mgl_ru.info, Node: Envelop sample, Next: Sew sample, Prev: Fitting sample, Up: Advanced features
+
+3.7.6 Envelop - пример использования
+-------------------------------------------------------
+
+\0\b[image src="../png/envelop.png"\0\b]
+
+new a 1000
+fill a 'exp(-8*x^2)*sin(10*pi*x)'
+plot a 'b'
+envelop a
+plot a 'r'
+axis
+
+\1f
+File: mgl_ru.info, Node: Sew sample, Next: STFA sample, Prev: Envelop sample, Up: Advanced features
+
+3.7.7 Sew - пример использования
+---------------------------------------------------
+
+\0\b[image src="../png/sew.png"\0\b]
+
+new a 100 100
+modify a 'mod((y^2-(1-x)^2)/2,0.1)'
+rotate 40 60
+light on
+alpha on
+surf a 'b'
+sew a 'xy' 0.1
+surf a 'r'
+box
+
+\1f
+File: mgl_ru.info, Node: STFA sample, Next: PDE sample, Prev: Sew sample, Up: Advanced features
+
+3.7.8 STFA - пример использования
+----------------------------------------------------
+
+\0\b[image src="../png/stfa.png"\0\b]
+
+new a 2000
+new b 2000
+fill a 'cos(50*pi*x)*(x<-.5)+cos(100*pi*x)*(x<0)*(x>-.5)+
+ cos(200*pi*x)*(x<.5)*(x>0)+cos(400*pi*x)*(x>.5)'
+subplot 1 2 0
+plot a
+axis
+xlabel '\i t'
+subplot 1 2 1
+stfa a b 64 ''
+axis
+ylabel '\omega' 0
+xlabel '\i t'
+
+\1f
+File: mgl_ru.info, Node: PDE sample, Next: Beam tracing sample, Prev: STFA sample, Up: Advanced features
+
+3.7.9 PDE - пример использования
+---------------------------------------------------
+
+\0\b[image src="../png/pde.png"\0\b]
+
+axis
+xlabel '\i x'
+ylabel '\i z'
+new re 128
+new im 128
+fill re 'exp(-48*(x+0.7)^2)'
+pde a 'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)' re im 0.01 30
+transpose a
+crange 0 1
+dens a 'wyrRk'
+fplot '-x' 'k|'
+text 0 0.85 'absorption: (x+z)/2 for x+z>0' '' -1
+title 'Equation: ik_0\partial_zu + \Delta u + x\cdot u + i \frac{x+z}{2}\cdot u = 0' 'iC' -1.5
+
+\1f
+File: mgl_ru.info, Node: Beam tracing sample, Next: Parser sample, Prev: PDE sample, Up: Advanced features
+
+3.7.10 Beam tracing - пример использования
+-------------------------------------------------------------
+
+\0\b[image src="../png/qo2d.png"\0\b]
+
+define $1 'p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)'
+ray r $1 -0.7 -1 0 0 0.5 0 0.02 2
+plot r(0) r(1) 'k'
+axis
+xlabel '\i x'
+ylabel '\i z'
+new re 128
+new im 128
+new xx
+new yy
+fill re 'exp(-48*x^2)'
+qo2d a $1 re im r 1 30 xx yy
+crange 0 1
+dens xx yy a 'wyrRk'
+fplot '-x' 'k|'
+text -0.8 0.85 'absorption: (x+y)/2 for x+y>0' 'L' -1
+text 0.5 -0.05 'central ray' 'L' -1
+title 'Beam and ray tracing' 'C' -1.5
+
+\1f
+File: mgl_ru.info, Node: Parser sample, Next: Manual ticks sample, Prev: Beam tracing sample, Up: Advanced features
+
+3.7.11 Parser - пример использования
+-------------------------------------------------------
+
+\1f
+File: mgl_ru.info, Node: Manual ticks sample, Next: ColumnPlot sample, Prev: Parser sample, Up: Advanced features
+
+3.7.12 Особые метки по осям
+--------------------------------------------
+
+\0\b[image src="../png/tval.png"\0\b]
+
+axis -pi 0 pi 2
+xtick -pi '-\pi' -1.571 '-\pi/2' 0 '0' 0.886 'x^*' 1.571 '\pi/2' pi '\pi'
+axis
+grid
+fplot '2*cos(x^2)^2' 'r2' nan 300
+
+\1f
+File: mgl_ru.info, Node: ColumnPlot sample, Next: StickPlot sample, Prev: Manual ticks sample, Up: Advanced features
+
+3.7.13 ColumnPlot - пример использования
+-----------------------------------------------------------
+
+\0\b[image src="../png/column.png"\0\b]
+
+for $1 0 3
+columnplot 4 $1
+box
+text -0.5 0.5 'Plot $1 of 4'
+fplot 'sin(pi*x+pi*$1/2)'
+next
+
+\1f
+File: mgl_ru.info, Node: StickPlot sample, Prev: ColumnPlot sample, Up: Advanced features
+
+3.7.14 StickPlot - пример использования
+----------------------------------------------------------
+
+\0\b[image src="../png/stick.png"\0\b]
+
+ranges -1 1 -1 1 0 1:light on
+stickplot 3 0 40 30 : axis 'xyz_'
+fsurf 'exp(-10*y^2-6*x^2)'
+text 0.2 0 1.2 'z=0' '' -2
+stickplot 3 1 40 30 : axis 'xy_'
+fsurf 'exp(-10*y^2/2-6*x^2)/sqrt(2)'
+text 0.2 0 1.2 'z=1' '' -2
+stickplot 3 2 40 30 : axis 'xy_'
+fsurf 'exp(-10*y^2/5-6*x^2)/sqrt(5)'
+text 0.2 0 1.2 'z=2' '' -2
+xlabel '\tau' 0 : ylabel '\rho'
+
+\1f
+File: mgl_ru.info, Node: Stereo image sample, Prev: StickPlot sample, Up: Advanced features
+
+3.7.15 Пример стерео изображения
+-------------------------------------------------------
+
+\0\b[image src="../png/stereo.png"\0\b]
+
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+light on
+subplot 2 1 0
+rotate 40 60+3
+box:surf a
+subplot 2 1 1
+rotate 40 60-3
+box:surf a
+
+
+\1f
+Local Variables:
+coding: utf-8
+End: