Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
maple лаб 08-2 трехмерная графика в MAPLE.doc
Скачиваний:
4
Добавлен:
07.05.2019
Размер:
834.05 Кб
Скачать

Пример 15. Отображение текста в пространстве

> textplot3d([[1,2,3,"first point"],

[3,2,1,"second point"]],axes=BOXED, color=black,

align={LEFT,BELOW}, labels=["x","y","z"]);

Трехмерная команда contourplot3d() так же, как и ее двумерный аналог contourplot(), отображает линии уровня поверхности и имеет такой же синтаксис. Первое отличие заключается в том, что двумерная команда рисует линии уровня на плоскости, тогда как трехмерная отображает их в пространстве в плоскостях z=const, где постоянная const равняется значению, принимаемому функцией на соответствующей линии уровня. Второе отличие связано с реализацией: двумерная команда написана на интерпретируемом языке Maple, а трехмерная на компилируемом языке С, поэтому команда contourplot3d() выполняется быстрее команды contourplot().

Пример 16. Линии уровня на поверхности

> contourplot3d(sin(x)*sin(y), x=-3..3, y=-3..3,

grid=[40,40], contours=16, axes=FRAME,

orientation=[30,60], color=black);

Две команды связаны с отображением векторных полей в пространстве. Команда gradplot3d() отображает поле градиента выражения, зависящего от трех переменных, в параллелепипеде, определяемом диапазонами их изменения. Команда fieldplot3d() строит в параллелепипеде, определяемом диапазонами изменения трех переменных, векторного поля с компонентами, зависящими от трех заданных переменных. В обеих этих командах можно использовать опцию arrows, значение которой определяет вид отображаемого вектора.

Пример 17. Построение векторных полей

> gradplot3d((x^2+y^2+z^2+1)^(1/2),x=-2..2,y=-2..2,z=-2..2,

color=black, arrows=SLIM, axes=FRAME, orientation=[41,44]);

> fieldplot3d([2*x,2*y,1],x=-1..1,y=-1..1,z=-1..1,

color=black,arrows=SLIM,axes=FRAME,orientation=[35,44]);

И последняя команда, на которой мы остановимся, это команда отображения плоского многоугольника в пространстве, который задан списком своих вершин. Для этих целей в пакет plots включена команда polygonplot3d(), синтаксис которой полностью соответствует синтаксису ее двумерного аналога polygonplot(). Единственное отличие связано с заданием точек: в трехмерной команде каждая точка представляется трехэлементным списком своих координат, причем точки не обязательно должны лежать в одной плоскости.

Пример 18. Отображение многоугольника в пространстве

> polygonplot3d([[0,1,1],[1,-1,2],[3,0,5] ,[1,1,1]],

axes=boxed,orientation=[120,80]);

ЗАДАНИЕ 5. Нарисовать произвольный многоугольник в пространстве.

4. Трехмерные графические структуры Maple

Пример 19. Отображение PLOT3D-структур

> # Первая плоскость зеленого цвета

> p1:=POLYGONS([[1,0,0], [1,0,2], [0,1,2], [0,1,0]], COLOR(RGB,0,1,0)):

> # Вторая плоскость красного цвета

> p2:=POLYGONS([[0,0,0], [1,1,0], [1,1,2], [0,0,2]], COLOR(RGB,1,0,0)):

> # Надпись синего цвета

> t1:=TEXT([0.5, 0.5, 3],"Пересечение", COLOR(RGB, 0, 0, 1)):

> PLOT3D(p1, p2, t1, ORIENTATION(-15,45), AXES(BOXED));

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

Таблица 4. Команды пакета plottools для пространственных графических структур

Синтаксис команды

Описание создаваемой графической структуры

cone([x,y,z],r,h,opt)

Конус с вершиной в точке, координаты которой заданы первым параметром, направленный в положительном направлении оси z и высотой h. В сечении z=h окружность имеет радиус r

cuboid([x1,y1,z1],[x2,y2,z2],

opt)

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

cylinder([x,y,z],r,h,opt)

Круговой цилиндр высотой h с образующей окружностью радиуса r с центром в точке, определяемой первым параметром и параллельной плоскости xy. Значение опции capped равное true отображает цилиндр с закрытыми основаниями. Если она равна false, то основания не закрыты

dodecahedron([x,y,z],s,opt)

Масштабируемый параметром s (по умолчанию равен 1) додекаэдр (двенадцатигранник) с центром в точке с координатами (x,y,z)

hemisphere([x,y,z],r,opt)

Полусфера радиуса r с центром в точке с координатами (x,y,z). Значение опции capped равное true отображает полусферу с закрытым сечением. Если она равна false, то сечение не закрыто

hexahedron([x,y,z],s,opt)

Масштабируемый параметром s (по умолчанию равен 1) куб с центром в точке с координатами (x,y,z)

icosahedron([x,y,z],s,opt)

Масштабируемый параметром s (по умолчанию равен 1) икосаэдр (двадцатигранник) с центром в точке с координатами (x,y,z)

octahedron([x,y,z],s,opt)

Масштабируемый параметром s (по умолчанию равен 1) октаэдр (восьмигранник) с центром в точке с координатами (x,y,z)

semitorus([x,y,z],a..b,r,R,

opt)

Часть тора с радиусом меридиана r, центром в точке с координатами (x,y,z) и радиусом образующей окружности R. Диапазон a..b определяет в радианах углы начальной и конечной точек на образующей тора. Значение опции capped равное true отображает часть тора с закрытыми сечениями. Если она равна false, то сечения открыты

sphere([x,y,z],r,opt)

Сфера радиуса r с центром в точке с координатами (x,y,z)

tetrahedron([x,y,z],s,opt)

Масштабируемый параметром s (по умолчанию равен 1) тетраэдр (четырехгранник) с центром в точке с координатами (x,y,z)

torus([x,y,z],r,R,opt)

Тор с радиусом меридиана r, центром в точке с координатами (x,y,z) и радиусом образующей окружности R

Параметр opt во всех командах пакета plottools соответствует допустимым для соответствующей формируемой структуры опциям графической команды plot(). Некоторые команды могут иметь дополнительную опцию capped (наличие крышки, т.е. закрытое тело).

ЗАДАНИЕ 6. Нарисовать 1) параллелепипед, 2) закрытый цилиндр, 3) додекаэдр, 4) закрытую полусферу, 5) куб, 6) икосаэдр, 7) октаэдр, 8) часть закрытого тора, 9) сферу, 10) тетраэдр, 11) тор.

Пример 20.

> with(plottools): with(plots):

> display(hexahedron([0,0,0], 0.8, color=blue), orientation=[60, 65]);

> display(hexahedron([0,0,0], 0.8, color=blue),

hexahedron([1,1,1], 0.5, color=pink), axes=boxed, orientation=[75,50]);

> display(semitorus([1, 1, 1], 0..Pi/2, 2, 7), lightmodel=light4, orientation=[-140, 60], scaling=constrained, style=patchnogrid);

> display(icosahedron([0,0,0], 0.8), icosahedron([1,1,1], 0.5), lightmodel=light2, orientation=[45, 0]);

Рисование поверхностей. Следует заметить, что когда предпринимается попытка нарисовать 3 графика на одном чертеже, команда plot3d может воспринять 3 формулы как параметрическое задание одной поверхности. Поэтому не рекомендуется сразу рисовать более двух поверхностей.

Пример 20. >

Пример 21.

>

Пример 22.

>

Пример 23.

>plot3d([x*sin(x)*cos(y), x*cos(x)*cos(y)], x=0..2*Pi, y=0..Pi);

Пример 24.

>plot3d(x*exp(-x^2-y^2), x=-2..2, y=-2..2, grid=[49,49], axes=boxed);

Пример 25.

>plot3d(sin(x)*x, x=-2*Pi..2*Pi, y=-1..1, shading=zgrayscale,lightmodel=light2,title="Sine\nGraph");

Пример 26.

>plot3d(cos(x)*sin(y), x=-2*Pi..2*Pi, y=-1..1, lightmodel=light1);

Пример 27.

Конус

>

Пример 28 демонстрирует технику использования команд пакета plottools для формирования и преобразования трехмерных графических объектов.

Пример 28. Отображение и преобразование пространственных объектов

> # Конус и он же повернутый на угол Pi/2 относительно оси y

> PLOT3D(cone([0,0,0],1/2,2),rotate(cone([0,0,0],1/2,2), 0, Pi/2, 0),

AXES(NORMAL),SCALING(CONSTRAINED));

Вместо непосредственного использования команды PLOT3D() для отображения пространственных геометрических объектов, которая требует задания опций в виде PLOT3D-структур, можно, как и в случае с двумерной графикой, воспользоваться командой display() пакета plots, позволяющей совместить на одном графике вывод нескольких графических команд и графических структур. Пример 29 демонстрирует подобную технику.

Пример 29. Совмещение графического вывода командой display()

> s1:=sphere([3/2,1/4,1/2],1/4,color=red):

> s2:=sphere([3/2,-1/4,1/2],1/4,color=red):

> c:=translate(rotate(cone([0,0,0],1/2,2,color=khaki),0,Pi/2,0),3,0,1/4):

> stelhs:=stellate(rotate(hemisphere(),Pi,0,0),2):

> display(s1,s2,c,stelhs,scaling=constrained,style=patchnogrid);