Смекни!
smekni.com

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

Наряду с рассмотренными язык располагает рядом графических средств, поддерживаемых plottools-модулем, обеспечивающих операции по созданию и манипулированию с графическими объектами на основе базовых графических примитивов, в качестве которых выступают наиболее часто используемые компоненты графических объектов: arc, arrow, circle, cone, cuboid, curve, cutin, cutout, cylinder, disk, ellipticArc, hyperbola, sphere, dodecahedron, ellipse, hemisphere, hexahedron, icosahedron, line, octahedron, pieslice, point, polygon, rectangle, semitorus, tetrahedron, torus. В виду, практически, интернациональной терминологии для подавляющего большинства из них терминологический перевод не требуется, а их смысл полностью определяется их названием. Средства, обеспечивающие данные примитивы, служат только для определения соответствующих им графических структур. Поэтому реальный вывод графических примитивов возможен только посредством display-функции как в монопольном режиме, так и в составе списка/множества/массива графических структур, определяющих составной графический объект, пригодный, в частности, для участия в анимационном процессе. Например, по circle-функции создается графическая структура CURVES-типа, определяющая окружность с заданными центром и радиусом, которая может участвовать в композиционном процессе по созданию составных ГО либо выводиться отдельным графическим объектом с заданными посредством опций характеристиками.

Наряду со средствами определения графических примитивов, plottools-модуль поддерживает восемь специальных функций, обеспечивающих основные процедуры преобразования графических объектов и манипулирования с ними, а именно: transform (функция преобразования Г0), stellate (изменение направленности углов много{гранника|угольника}), translate (стандартные преобразования ГО), rotate (вращение), homotety (шкалирование {2D| 3D}_ГО-структур), reflect (отражение {2D|3D}_ГО-структур), project (проектирование {2D|3D}_ГО-структур) и scale (шкалирование). Ниже каждая из указанных функций рассматривается несколько детальнее.

В свете рассмотренных графических средств и обеспечивающих их функций более детального рассмотрения вопросов кодирования функций, определяющих графические примитивы, не требуется и они легко усматриваются из их описания. Поэтому, представим только определяющую характеристику для каждого из поддерживаемых plottools-модулем примитивов. В табл. 19 представлены графические примитивы, поддерживаемые модулем plottools, каждый из которых обеспечивается соответствующей графической функцией и представляет следующий базовый графический объект:

Таблица 19

Функция

Создает и выводит ГО-примитив соответственно для:

arc

2D-дуги окружности с заданными определяющими параметрами

arrow

{2D|3D}-стрелки с заданными определяющими параметрами

circle

окружности с заданными центром и радиусом

cone

конуса с заданным центром и растром (углом дуги)

cuboid

куба с заданной диагональю

curve

{2D|3D}-кривой, соединяющей заданные точки пространства

cutin

объекта, являющегося результатом замены многогранников в 3D_ГОструктурах POLYGONS-типа на подобные им многогранники

cutout

объекта, являющегося результатом вырезки из многогранников в 3D_ГО-структурах POLYGONS-типа подобных им окон

cylinder

цилиндра с заданными определяющими параметрами

disk

круга с заданными центром и радиусом

dodecahedron

додэкаэдра с заданными определяющими параметрами

ellipse

эллипса с заданными определяющими параметрами; filled-опция определяет режим закраски области эллипса

ellipticArc

дуги эллипса с заданными определяющими параметрами; filledопция определяет режим закраски области дуги эллипса

hemisphere

полусферы с заданными центром и радиусом; capped-опция определяет режим закраски внутренней поверхности полусферы

hexahedron

гексаэдра с заданными определяющими параметрами

hyperbola

гиперболу с заданными определяющими параметрами

icosahedron

икосаэдра с заданными определяющими параметрами

line

{2D|3D}-отрезка прямой между двумя заданными точками

octahedron

октаэдра с заданными определяющими параметрами

pieslice

сектора с заданными центром, радиусом и растром

point

{2D|3D}-точки с заданными координатами

polygon

ломаной линии, соединяющей заданные точки пространства

rectangle

прямоугольника с заданными определяющими параметрами

semitorus

полутора с заданными определяющими параметрами; capped-опция определяет режим закраски внутренней поверхности полутора

sphere

сферы с заданными центром и радиусом

tetrahedron

тетраэдра с заданными определяющими параметрами

torus

тора с заданными определяющими параметрами

В таблице 19 под выражением «с заданными определяющими параметрами» понимаются те числовые параметры, которые определяют тип выводимого {2D|3D}-ГО, его расположение, ориентацию в пространстве и др. Ряд особенностей использования приведенных в табл. 19 функций можно найти в книге [12]. Описание представленных выше функций, определяющих графические структуры для примитивов, достаточно прозрачно и применение их не вызывает особых затруднений. Примитивные структуры можно использовать с display-функциями как для вывода отдельных (определяемых ими) примитивных ГО, так и для создания на их основе составных графических объектов. В качестве иллюстрации последнего целый ряд из представленных функций используется для создания и вывода достаточно простых составных графических 2D- и 3D-объектов, представленных следующим достаточно простым фрагментом:

> with(plots): with(plottools): F:=[TIMES, BOLD, 18]: setoptions(axesfont=F, font=F):

setoptions3d(axesfont=F): Arc:= arc([0, 0, 0], 1, 0..Pi/2, color=blue, thickness=3): Arrow:= arrow([0, 0], [1, 1], 0.1, 0.2, 0.1, color=red): Circle:= circle([0, 0], 0.55, color=green,

thickness=3): Curve:=curve([[0, 0.42], [0.1, 0.47], [0.2, 0.32], [0.3, 0.37], [0.4, 0.09], [0.5, 0.02]], thickness=3, color=navy): Disk:= disk([1.1, 1.1], 0.15, color=green, thickness=2): Ellipse:= ellipse([-0.7, 0.9], 0.4, 0.2, filled=true, color=yellow, thickness=2): T1:=textplot([-0.68, 0.93, `1995-2006`], scaling=constrained): EllipticArc:=ellipticArc([-0.7, 0.95], 0.5, 0.3, Pi/4..3*Pi/4, thickness=2, filled=true, color=gold): Line:= line([-0.98, 0.84], [-0.4, 0.84], thickness=2): Line1:= line([-0.98, 0.81], [-0.4, 0.81], thickness=2): Point:= point([1.1, 1.1], thickness=2, symbol=circle): T2:=textplot([0.95, -0.23, "AVZ"], scaling=constrained, color=navy): T3:= textplot([0.95, -0.5, `64`], scaling= constrained, color=red): T4:= textplot([-0.97, -0.42, "Grodno - Tallinn"], font=F): Polygon:= polygon([[0.65, -0.17], [1.25, -0.17], [0.65, -0.58], [1.25, -0.58]], thickness=2): Rectangle:= rectangle([-1.4, -0.3], [-0.54, -0.58], thickness= 2, color=wheat): T5:=textplot([-0.68, 0.62, "RAC-IAN-REA-RANS"]): Sv:=display(T1, Circle, Arc, Arrow, Curve, Disk, Ellipse, EllipticArc, Line, Polygon, T2, T3, Rectangle, T4, title= "Creation of complex 2D-plot on the basis of graphic primitives", Point, T5, Line1):

T_Font(Sv, titlefont=[HELVETICA, BOLDOBLIQUE, 18]); _Art;

Creation of complex 2D-plot on the basis of graphic primitives

> Cone:= cone([0.5, 0.5, -0.5], 1, 1.5, shading = ZHUE, orientation = [42, 99]): Cuboid:= cuboid([1, 1, -1], [0, 0, 0], thickness=2): Cutin:= cutin(cone([0.5, 0.5, -0.5], 0.5, 1.5), 2/3):

Cutout:= cutout(cuboid([3, 3, 3], [0, 0, -0.5]), 0.9): Cylinder:= cylinder([0, 0, -0.8], 2, 3, style=line, grid=[15, 15]): H:= hemisphere([0, 0, -2], 2, capped=false, style=line, grid= [15,

15]): H:= rotate(H, 0, Pi, 0): ST2:= display3d(Cone, Cuboid, Cutout, Cylinder, H, orientation= [45, 72], shading=ZHUE): T6:= textplot3d([2, 0.5, 1, "2007"], font= F, color= black): Sphere:= sphere([0, 0, 0], 8, style = line): D1:= display3d(scale(ST2, 3., 3., 2.), title= "Example_1 of complex 3D-plot", lightmodel=light1): D2:= display3d(T6, Sphere, scale(torus([0, 0, 0], 1, 5), 1, 1, 2), title= "Example_2 of complex 3D-plot", lightmodel= light2, orientation=[48, 36]): T_Font(D1, titlefont=[HELVETICA, BOLDOBLIQUE, 14]); _Art; T_Font(D2, titlefont = [HELVETICA, BOLDOBLIQUE, 14]); _Art;

Example_1 of complex 3D-plot Example_2 of complex 3D-plot

В данном фрагменте, условно состоящем из двух частей, после создания набора графических объектов-примитивов на основе рассмотренных выше функций plottools-модуля соответственно для 2D- и 3D-случаев посредством display-функций создаются и выводятся составные графические объекты соответствующей размерности. Для определения ряда характеристик графических примитивов и составных объектов в целом используются соответствующие plot/plots-опции, а также специальные опции, определяющие режим вывода отдельных примитивов. Из модульных функций, определяющих структуры для графических примитивов (табл. 19), только отдельные допускают использование такого рода специальных опций, а именно: filled={false|true} для функций ellipse, ellipticArc определяют режим закраски областей и capped={true| false} определяет для трех функций cylinder, hemisphere, semitorus – режим закраски внутренних поверхностей (первыми указаны значения опций по умолчанию).