Смекни!
smekni.com

Программирование и разработка приложений в Maple (стр. 110 из 135)

> display([TxT, S1, S2, S3], insequence = true); # Режим анимации из 4-х фреймов

В нашей книге [12] представлен целый ряд практического характера рекомендаций по созданию составных и анимируемых графических объектов на основе display-функции.

Следует отметить, что и статические, и анимируемые ГО можно сохранять в файлах, для чего следует определить соответствующую установку plotsetup-функции вида: plotsetup(DT, plotoutput = "Путь к принимающему файлу")

гду DT – тип устройства (например, bmp, char, cps, gif, hpgl, jpeg, wmf и др.). Между тем, в опреративном режиме посредством щелчка правой клавишей мыши по выбранному ГО открывается меню, в котором выбором опции «Export As» получаем возможность сохранять ГО в файле в одном из следующих форматов:

Encapsulated PostScript (EPS), Graphics Interchange Format (GIF), Windows Bitmap (BMP),

JPEG File Interchange Format (JPG), Windows Metafile (WMF)

Это позволяет проводить дальнейшее редактирование ГО, например, графическими редакторами и целым рядом других подобных средств. Подобный прием может быть использован и для сохранения ГО в других форматах для последующей обработки.

Перед окончательным формированием ГО, содержащим графики функциональных зависимостей и текстовое оформление, рекомендуется предварительно произвести полную отладку собственно графической части объекта (выбор диапазонов по осям координат, обработка особых точек, идентификация отдельных кривых, изменение размера рамки ГО и т.

д.). После ее завершения описанным выше способом устанавливаются опорные точки ГО, относительно которых будет помещаться в объект текстовая информация, формируемая textplot-функцией. На заключительном этапе по display-функции выводится единый ГО, требующий, как правило, окончательной доводки на соответствие всех составляющих его компонент. При этом, локальные plot-опции, используемые в 2D_ГО-структурах, составляющих объединенный ГО, не следует перекрывать одноименными опциями в display-функции, определяя в ней лишь опции глобального характера. При конкретной работе с графическими средствами пакета необходимый навык у пользователя появляется достаточно быстро, чему способствует и высокая наглядность задачи.

Специальные типы графиков функциональных зависимостей. Наряду с рассмотренными базовыми средствами 2D-графики язык располагает целым рядом модульных функций, поддерживаемых упоминаемым выше модулем plots, которые существенно расширяют графические возможности Maple-языка. Все эти средства становятся доступными после выполнения with(plots)-вызова или иным рассмотренным выше способом. Выше уже рассмотрены функции display, textplot, polarplot этого модуля. Кратко охарактеризуем ряд других, используемых для более специальных типов 2D-ГО. Основные средства в данном направлении представляет следующая табл. 16.

Таблица 16

Функция

Функция обеспечивает вывод:

changecoords

конвертирует 2D_ГО-структуру в новую систему координат

complexplot

2D-графика комплексной функции

conformal

конформального 2D-графика комплексной функции

contourplot

контурного графика функции

coordplot

координатных сеток поддерживаемых систем координат

densityplot

2D-графика плотности

fieldplot

графика 2D-векторного поля

gradplot

графика градиента 2D-векторного поля

implicitplot

графика 2D-функции, заданной неявно

inequal

области, ограниченной линейными неравенствами

listcontplot

контурного графика числового 2D-массива

listplot

2D-графика списка числовых значений

listdensityplot

2D-графика плотности вложенного числового списка

{semi}logplot

полулогарифмического графика функций

loglogplot

дважды логарифмического графика функций

pareto

частотной диаграммы Паретто

pointplot

графика {множества|списка} 2D-числовых точек

polygonplot

графика плоских многоугольников

replot

старая версия display-функции; рекомендуется вторая

rootlocus

графика комплексных корней рациональной функции

sparsematrixplot

графика ненулевых значений матрицы или 2D-массива

Некоторые из представленных табл. 16 графических функций допускают использование дополнительно к рассмотренным plot-опциям и специфические опции, управляющие режимом создания и вывода 2D-ГО. Следует иметь в виду, что глобальные установки ряда plot-опций, сделанные посредством setoptions-функции, не распространяются на некоторые графические функции, поддерживаемые plots-модулем, поэтому их следует определять локально непосредственно в момент вызова функции. Детальнее с форматами кодирования и назначением данных модульных графических функций можно ознакомиться в книгах [11-14,88,110,112-120] либо по справочной системе пакета. Мы ограничимся с целью иллюстрации лишь примером применения coordplot-функции:

> display([plot(sin(x), x=-3*Pi..3*Pi, color=red, labelfont=[TIMES, BOLD, 12], axesfont= [TIMES, BOLD,12], thickness=2), coordplot(cartesian, grid=[19,19], color=[black, black])], axes=normal);

На основе coordplot-функции предоставляется возможность накладывать на функциональный график координатную сетку, позволяющую не только лучше представлять поведение кривых, но и решать графически целый ряд численных задач. Один из таких механизмов представлен в [12]. Вместе с тем, данное средство уступает подобным средствам пакета Mathematica [12,41,111]. Для расширения возможностей пакета в этом направлении нами была создана процедура plotvl, представленная ниже своим исходным текстом и примерами применения.

plotvl := proc(F, h) local a b c d g vl k z t u Xmin Xmax Ymin Ymax, , , , , , , , , , , , , ; assign67(b = [ ], t = [ ], u = NULL); unassign '( black', 'color', 'linestyle', 'thickness'); vl := proc(L::list(realnum ), n realnum:: , m realnum:: ) local a, k; a := [color = 'black', linestyle = 1, thickness = 1]; plots display[ ](seq( plottools['line']([args 1[ ][ ]k , n], [args 1[ ][ ]k , −abs(m)]), k = 1 .. nops(args 1[ ])), `if`(nargs = 3, op(a), args 4 .. nargs[ ]))

end proc ; seq `if`( (type(args[ ]k , 'equation') and lhs args[ ]( k ) = 'pvl', assign(' 'c = rhs args[ ]( k )), assign(' 'b = [op(b), args[ ]k ])), k = 1 .. nargs); if nops(b) = nargs then plot(op(b)) else if type(c, 'list'('realnum')) and c ≠ [ ] or

type(c, 'nestlist') and type(c[1], 'list'('realnum')) and c[1] ≠ [ ] then if type(c, 'list'('realnum')) then z := map(evalf c, ) else z := map(evalf, c[1]); u := op(c[2 .. -1]) end if;

Вызов процедуры plotvl(F, h,…) без pvl-опции эквивалентен вызову процедуры plot(F,h, …). Опция pvl допускает один из следующих двух форматов кодирования, а именно: pvl = [a, b, c, …] или pvl = [[a, b, c, …], графические опции]

гле: a, b, c, … - выражения of realnum-типа, тогда как графические опции те же, что и для стандартной процедуры plot, но в предположении, что рассматривается только одна выводимая функция. Точки [a, b, c, …] установки вертикальных линий должны принадлежать h-интервалу, в противном случае такие линии не выводятся. Детальнее с процедурой plotvl можно ознакомиться в [108,109].

Средства анимации графических зависимостей. Рассмотренные до настоящего момента графические средства позволяют отражать только статическую суть представляемой графически функциональной закономерности, что не дает возможности оценивать определенные аспекты поведения данной закономерности со временем, т.е. ее динамические свойства. Такую возможность предоставляют основные средства анимации, поддерживаемые модульными функциями animate и animate3d, определяемые plots-модулем. Принцип анимации, поддерживаемый данными средствами, состоит в быстрой смене последовательности фреймов (моментных снимков) ГО один за другим, создавая в человеческом восприятии эффект движения, подобно тому, как это делается в современных (да и делалось уже на заре их зарождения) видео-средствах.

Модульная animate-функция имеет следующий простой формат кодирования: animate(<Функция>, <X-диапазон>, <А-диапазон> {, <Опции>})

где график функции или нескольких функций представляет собой непосредственно анимируемый объект. Функция F(X, A) должна быть действительной от двух аргументов X и A, где X-аргумент определяет собственно ведущую переменную, а А-аргумент – переменную анимации. Обязательные второй и третий фактические аргументы должны принимать действительные значения. Если X-диапазон определяет отображаемый участок выводимого графика функциональной зависимости, то А-диапазон – режим изменения координат при смене фреймов в процессе анимации. Функция допускает также определение вертикального Y-диапазона, кодируемого непосредственно за A-диапазоном. В качестве первого фактического аргумента animate-функции допускаются: одна или более функций (включая заданные параметрически в виде множества функций), процедуры либо списки значений координат опорных точек.

В качестве фактического необязательного аргумента animate-функция допускает использование plot-опций, рассмотренных выше, а также специальной frames-опции, определяющей число участвующих в процессе анимации фреймов (по умолчанию полагается 16). Вместе с тем, при использовании с animate-функцией plot-опций имеется ряд особенностей, которые необходимо учитывать. Фреймы для анимируемой функции F(x, t) на диапазоне t = a..b анимации создаются по следующему простому принципу: t-диапазон анимации разбивается на tk-точки и в них вычисляются “моментные снимки” (фреймы) анимируемой функции, т.е. ее F(x, tk)-образы на x-интервале по ведущей переменной