Смекни!
smekni.com

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

Дополнительно к отмеченным, нами был создан еще ряд средств, полезных для работы с графическими объектами. Так, следующий фрагмент предоставляет две процедуры, позволяющие тестировать корректность графических {plot|plot3d}-опций.

type/plotopt := proc(po::equation) local a b, ; assign(b = interface(warnlevel)), interface(warnlevel = 0);

try a := plot ,(I po) catch : return false, null interface(( warnlevel = b)) end try ;

true, null interface(( warnlevel = b))

end proc type/plot3dopt := proc(po::equation) local a; try a := plot3d 1, .. ,( 0 1 0 .. 1, po) catch : return false end try ; true

end proc

> map(type, [thickness=2, color=aaa, font=[TIMES, BOLD, 16]], 'plotopt');

[true, false, true]

> map(type, [filled=FAIL, scaling=CONSTRAINED, style=WIREFRAME], 'plot3dopt');

[false, true, true]

Вызов процедуры type(x, plotopt) возвращает true-значение, если x - корректная plot-опция, и false-значение иначе. Очевидно переносится это и на вызов type(x, plot3dopt).

Вызов процедура p3listlist возвращает список [[x1,y1, F(x1,y1)], ..., [xn, yn, F(xn, yn)]] типа listlist, обеспечивая конвертацию структуры 3D-GRID Array-типа в список. Процедура полезна при обработке PLOT3D-структур, например, при числовой обработке 3D-ГО.

p3listlist := proc(P::function) local a b c d, , , ; if convert(P, 'string')[1 .. 6] ≠ "PLOT3D" then error

"factual argument should be PLOT3D data structure, but has received %1", P else assign(a = [op(1, op(P)[1]), op(2, op(P)[1])], c = op(3, op(P)[1])); b := [rhs(op 2,( c)[1]), rhs(op 2,( c)[2])];

if nargs = 2 and type(args 2[ ], 'symbol') then assign(args 2[ ] = c) end if; d := [(rhs(a[1]) − lhs( [a 1]))/(b[1] − 1), (rhs(a[2]) − lhs( [a 2]))/(b[2] − 1 ]) ; assign('a' = map(lhs, [a[1], a[2]])), [seq( seq([a[2] + d[2]×k, a[1] + d[1]×j, c[k + 1, j + 1]], j = 0 .. b[2] − 1), k = 0 .. b[1] − 1)]

end if

end proc

Следует помнить, что не все определенные явно опции можно переопределять в GUI. Переходим теперь к рассмотрению функциональных средств Maple-языка, поддерживающих работу с 3D-графикой. Изложение в целях удобства и приемственности проводится аналогично контексту 2D-графики в виду того, что различия 2D- и 3D-графических средств в значительной мере определяются размерностью при большой их общности.

7.3. Трехмерное представление функциональных зависимостей и данных в среде Maple-языка

Графические средства Maple-языка по представлению 3-мерных функциональных зависимостей во многом аналогичны средствам для 2-мерного случая, между тем, здесь имеется и ряд принципиальных отличий, которые будут рассмотрены в этом разделе. В первую очередь, это обусловлено появлением дополнительной размерности, что определяет появление и новых свойств таких, как цветовая иллюминация поверхностей, выбор точки обзора 3D-ГО, более сложные функции расцветки поверхностей и др.

Графическое представление 3D-функциональных зависимостей. Для представления 3dфункциональных зависимостей Maple-язык располагает базовой plot3d-функцией, имеющей три основных формата кодирования, а именно:

(1) plot3d(F(x, y), x=a..b, y=c..d {, z=e..f} {, <Опции>})

(2) plot3d({F1(x, y) ,..., Fn(x, y)}, x=a..b, y=c..d {, z=e..f} {, <Опции>})

(3) plot3d([X(t, p), Y(t, p), Z(t, p)], t=a..b, p=c..d {, <Опции>})

и возвращающей 3D-ГО в виде графика соответственно единственной функции, определенной функциональным F(x, y)-выражением по ведущим (x, y)-переменным, нескольких функций, определенных списком [F1(x, y) ,...., Fn(x, y)], и параметрически заданной функции, определенных на диапазонах a..b и c..d значений (x, y)-переменных (t, p-параметров) в единой системе декартовых (X, Y, Z)-координат. Так как plot3d-функция возвращает 3D-ГО только с вычисляемыми (X, Y, Z)-точками, то для обеспечения этого требования предполагается, что функциональные зависимости являются действительными. В дальнейшем предполагается, что все графические функции, возвращающие графики (точнее графические структуры данных) функциональных 3D-зависимостей, требуют действительных значений над областью их определения, аналогично 2D-случая.

Первые три аргумента каждого формата plot3d-функции, в общем случае, обязательны

(о них будет уточнено несколько ниже), определяя соответственно функциональную зависимость и области значений ее ведущих переменных, тогда как четвертый аргумент первых двух форматов необязателен и определяет выводимый диапазон значений функциональной зависимости. Как правило, данный аргумент не кодируется во избежание возможной потери частей выводимого графика. Наконец, в качестве необязательного пятого аргумента всех форматов plot3d-функции допускается использование специальных графических опций, управляющих режимами создания, вывода и оформления 3D-ГО.

В качестве первого фактического аргумента plot3d-функция допускает использование: (1) действительной функции или выражения от двух ведущих переменных, (2) Maple-процедуры и (3) параметрически определенной функции. В случае процедуры используется в общем случае конструкция вида plot3d(Proc, a..b,c..d). При определении многофункционального графика, содержащего графики нескольких функциональных зависимостей, определяемых первым аргументом-множеством plot3d-функции, они выводятся в единой координатной сетке с возможностью различного цветового оформления. При этом, следует иметь в виду, что в отличие от рассмотренной plot-функции, в качестве определителя многофункционального графика может выступать только множество, так как список идентифицирует параметрически заданную поверхность. Расцветка многофункционального 3D-ГО также существенно отличается от случая 2D-ГО.

Функциональная зависимость, заданная параметрически (формат 3), в качестве первого аргумента plot3d-функции предполагает списочную структуру. Ее элементы определяют {X(t,p), Y(t,p),Z(t,p)}-функции координат точки графика соответственно по осям {X,Y,Z}; диапазоны изменения значений (t, p)-параметров которых кодируются вторыи и третьим фактическими аргументами 3-го формата функции. Следующий простой фрагмент иллюстрирует применение plot3d-функции для получения графиков некоторых функциональных зависимостей:

> plot3d(y^2*sin(x) + x^2*cos(y), x=-3*Pi..3*Pi, y=-3*Pi..3*Pi, grid=[59, 59], axes=framed);

Ввиду своей прозрачности каких-либо пояснений данный фрагмент не требует. Ниже представлены и другие интересные примеры применения plot3d-функции.

Подобно случая 2D вывод графика производится в той же секции ТД, что и определяющая его функция plot3d (в дальнейшем такую секцию ТД будем называть графической). При этом, установка курсора на ГО производится следующее. Графический объект ограничивается прямоугольной рамкой с управляющими точками по ее углам и серединам сторон. Будем в дальнейшем ГО с визуализированной вокруг него рамкой указанного вида называть выделенным. Путем фиксации мыши на нужной управляющей точке рамки можно соответственным образом производить сжатие/растяжение ГО в плоскости по осям координат как независимо (срединные точки), так и одновременно (угловые точки).

Выделенный ГО можно копировать в СБО для последующего импортирования как в другие места текущего ТД, другие ТД, так и в другие Windows-приложения в bitmapформате. Именно такой подход использовался нами при подготовке оригинал-макета настоящей книги к публикации.

Между тем, в опреративном режиме щелчком правой клавиши мыши по выделенному ГО открывается меню, в котором выбором опции «Export As» получаем возможность сохранять ГО в файле в следующих форматах (дополнительно к случаю 2D):

Drawing Exchange Format (DXF) и Persistence of Vision (POV)

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

Управления созданием и выводом 3D-ГО. Для управления режимом и оформлением выводимых 3D-ГО служат (подобно случая 2D) специальные опции. Опции располагаются в произвольном порядке в качестве последнего фактического аргумента plot3d-функции, т.е. являются ключевыми. Функция plot3d имеет опции согласно следующей табл. 17, в которой каждая опция определяет соответственно:

Таблица 17

Опция

Опция графической plot3d-функции определяет:

ambientlight =[к,з,с]

интенсивность красного, зеленого и синего цветов для пользовательской схемы освещенности; {к, з, с} принимают значения из интервала [0,1]

axes

используемый тип осей координат {normal|boxed|frame|none} (none)

axesfont

шрифт для меток маркируемых точек осей координат (Default)

color

функцию окрашивания точек выводимой поверхности 3D-ГО (XYZ)

coords

используемую для вывода систему координат (cartesian)

contours

число контурных линий для выводимой поверхности (10)

font

шрифт для текстовой информации 3D-Г0 в виде [шрифт, стиль, размер]

grid=[n,m]

размерность ячеек (X, Y)-сетки, в узлах которой вычисляется функция

gridstyle

используемый тип (X, Y)-сетки; допускается {rectangular|triangular}

labels

идентификаторы меток для осей координат (No labels)

labelfont

шрифт для идентификаторов меток осей координат (Default)

light

направление источника освещенности и его цветовые характеристики

lightmodel

выбор схемы освещенности выводимой поверхности (none)

linestyle

стиль оформления линий, образующих выводимую поверхность (0)

numpoints

минимальное число генерируемых опорных точек поверхности (25х25)

orientation

углы, под которыми обозревается выводимая поверхность [45o, 45o]

projection

перспективу обзора выводимой поверхности (orthogonal)

scaling

режим шкалирования по осям координат 3D-ГО (unconstrained)

style

стиль оформления выводимых поверхностей (patch)

shading

режим раскрашивания выводимой поверхности (Default)

symbol

тип символов для точек поверхности в point-режиме (Default)

thickness

толщину линий, образующих выводимую поверхность (0)

title

титульный заголовок для выводимой поверхности (none)

titlefont

шрифт для заголовка выводимой поверхности (Default)

tickmarks

число маркируемых точек по осям координат (Default)

view

минимальные и максимальные координаты выводимых точек 3D-ГО

При этом, в зависимости от релиза состав и назначение графических опций уточняются.