13.2.11. Построение графиков функций, заданных параметрически
В ряде случаев для задания некоторых зависимостей используются заданные параметрически уравнения, например x=fl(t) и y=f2(t) при изменении переменной t в некоторых пределах. Точки (х,у) наносятся на график в Декартовой системе координат и соединяются отрезками прямых. Для этого используется функция plot в следующей форме:
plot([fl(t),f2(t),t=tmin..tmax],h,v,p)
Если функции fl(t) и f2(t) содержат периодические функции (например, тригонометрические), то для получения замкнутых фигур диапазон изменения переменной t задается обычно 0..2*Pi или -Pi..Pi. К примеру, если задать в качестве функций fl(t) и f2(t) функции sin(t) и cos(t), то будет получен график окружности. Рис. 13.!3 показывает другие, чуть менее тривиальные примеры построения графиков такого рода.
Задание указателей масштаба h и v, а также параметров р не обязательно. Но, как и ранее, позволяет получить вид графика, удовлетворяющий всем требования пользователя.
Рис. 13.13. Построение функции, заданных параметрически.
13.2.12. Построение графиков функций в полярной системе координат
Графики в полярной системе координат представляют собой линии, которые описывает конец радиус вектора r(t) при изменении угла t в определенных пределах — от tmin до tmax. Построение таких графиков производится также функцией plot, которая записывается в следующем виде:
plot([r(t),theta(t),t=tmin..tmax],h,v,p,coords=polar)
Здесь существенным моментом является задание полярной системы координат опцией coords=polar. Рис. 13.14 дает примеры построения графиков функций в полярной системе координат.
Графики параметрических функций и функций в полярной системе координат отличаются огромным разнообразием. Снежинки и узоры мороза на стеклах, некоторые виды кристаллов и многие иные физические объекты подчиняются математическим закономерностям, положенным в основу построения таких графиков.
13.3. Построение ЗО-графиков с помощью функция plot3d
13.3.1. Особенности применения функции plot3d
Для построения графиков трехмерных поверхностей Maple имеет встроенную в ядро функцию plot3d. Она может использоваться в следующих форматах:
Рис. 13.14. Построение графиков функций в полярной системе координат.
plot3d(exprl, x=a..b, y=c..d,p) plot3d(f, a..b, c..d,p)
plot3d([exprf,exprg,exprh], s=a..b, t=c..d,p) plot3d([f,g,h], a..b, c..d,p).
В двух первых формах plot3d применяется для построения обычного графика одной поверхности, в других формах — для построения графика с параметрической формой задания поверхности. В приведенных формах: f, g и h — функции, expri — выражение, отражающее зависимость от х и у, exprf, exprg и exprh — выражения, задающие поверхность параметрически, s, t, а и b — числовые константы действительного типа, end — числовые константы или выражения действительного типа, х, у, s и t — имена независимых переменных и р — параметры-опции. Параметры для функции plot3d задаются аналогично их заданию для функции plot.
13.3.2. Параметры функции plot3d
С помощью параметров р можно в широких пределах управлять видом трехмерных графиков, выводя или убирая линии каркасной сетки, вводя функциональную окраску поверхностей, меняя угол их обзора и параметры освещения, изменяя вид координатных осей и т.д.
Следующие параметры функции plot3d задаются аналогично их заданию для функции plot:
axesfont font color coords font labelfont linestyle numpoints scaling style symbol thickness title titlefont
Однако функция plot3d имеет ряд дополнительных специфических параметров:
ambientlight=[r,g,o] | Задает интенсивность красного (red), зеленого (green) и синего (blue) цветов в относительных единицах (от 0 до 1). |
axes=f | Задает вид координатных осей (BOXED, NORMAL, FRAME и NONE, по умолчанию NONE). |
grid=[m,nl | Задает число линии каркаса поверхности. |
gridstyle=x | Задает стиль линий каркаса х ( 'rectangular' или 'triangular'). |
labels=[x,y,z] | Задает надписи по осям (х, у и z — строки, по умолчанию пустые). |
light=[phi,theta,r,g, b] | Задает углы, под которыми расположен источник освещения поверхности и интенсивности составляющих (г, g и b) цвета. |
lightmodel=x | Задает режим яркости (соответственно, none", 'lightl', 'light2', 'light3' и 'light4'). |
orientation=[theta, phi] | Задает углы ориентации поверхности (по умолчанию 45 градусов). |
projection=r | Задает перспективу при обзоре поверхности (г может быть числом 0 или 1, задающим включение или выключение перспективы, а также одной из строк 'FISHEYE', 'NORMAL', или 'ORTHOGONAL' (это соответствует численному значению г 0, 0.5, или 1, соответственно, причем по умолчанию задано projection = ORTHOGONAL). |
shading=s | Задает направления, по которым меняется цвет функциональной окраски (значения s могут быть XYZ, XY, Z, ZGREYSCALE, ZHUE, NONE). |
tickmarks=[l,n,m] | Задает характер маркировки по осям х, у и z (числа 1, п и m имеют значения не менее 1). |
view=zmin..zmax или Ixmin..xmax,ymin.. ymax,zmin..zmax] | Задает минимальные и максимальные координаты поверхности для ее видимых участков. |
13.3.3. Выбор и пересчет координат ЗО-графиков
Для трехмерных графиков возможно задание 31-го типа координатных систем с помощью параметра соога5=Тип_координатнои_системь1. Поскольку на экране дисплея поверхность отображается только в прямоугольной системе координат и характеризуется координатами х, у и z, то для представления поверхности, заданной в иной системе координат с координатами u, v и w используются известные [46,47] формулы для преобразования (u, v, w) --> (х, у, z). Ниже представлены типы координатных систем для трехмерной графики и соответствующие формулы преобразования:
bipolarcylindrical
х = a*sinh(v)/(cosh(v)-cos(u)) у = a*sin(u)/(cosh(v)-cos(u)) z = w
bispherical
х = sin(u)*cos(w)/d у = sin(u)*sin(w)/d z = sinh(v)/d (где d = cosh(v) - cos(u) )
cardiodal
x = u*v*cos(w)/(lГ2+v»2)-2 у = u*v*sin(w)/(ir2+v"2r2 z = (u"2-v'2)/2/^2+v'2)-2
cardiodcylindrical
x = (u'2-v~2)/2/(u'-2+v~2)'-2 у = u*v/(u'2+v-2)"2 z = w
casscylindrical
x = a*2~(l/2)/2*((exp(2*u)+2*exp(u)*cos(v)+l)-(l/2)+exp(u)*cos(v)+l)-(l/2) y= a*2«(l/2)/2*((exp(2*u)+2*exp(u)*cos(v)+l)"(l/2)-exp(u)*cos(v)-l)"(l/2) z = w
confocalellip
x = ((a~2-u)*{a'2-v)*(a"2-w)/{a'2-b''2)/(a-2-c-2)Y(l/2) у = ((b»2-u)*(b~2-v)*(b"2-w)/(b"2-a»2)/(b»2-c«2))'(l/2) z = ((c''2-u)*(^2-v)*(c''2-w)/(c'2-a'2)/(c^2-\)''2))~(l/2)
confocalparab
x = ((a'2-u)*(si'2-v)*(a'2-w)/{V2-a'2))'(l/2) у = ((b»2-u)*(b»2-v)*(b-2-w)/(b-2-a-2) Г(1/2) z = (a"2+b"2-u-v-w)/2
conical
x = u*v*w/(a*b) у = u/b*((v"2 - h~2)*(b~2-w''2)/(a~2-V2)Y(l/2) z = u/a*((a'2 - v'2)*(a'2 - w~2)/(a-2-b»2))"(l/2)
cylindrical
x = u*cos(y) у = u*sin(y) z = w
ellcylindrical
x = a*cosh(u)*cos(v) у = a*sinh(u)*sin(v) z = w
ellipsoidal
x = u*v*w/a/b у = ((u'^-b^Mv^-b^^b^-w^Aa^-b^^l^/b z = ((u-2-a»2)*(a•2-v«2)*(a»2-w"2)/(a•2-b'2))»(l/2)/a
hypercylindrical
x= ((u"2+v"2Y(l/2)+u)'(l/2) y^u^+v^ni^-iO-O/^) z=w
invcasscylindrical
x = a*2-(l/2)/2*((exp(2*u)+2*exp(u)*cos(v)+l)-(l/2) +
exp(u)*cos(v)+l)'(l/2)/(exp(2*u)+2*exp(u)*cos(v)+l)'(l/2) у = a*2-(l/2)/2*((exp(2*u)+2*exp(u)*cos(v)+l)-(l/2) -
exp(u)*cos(v)-l)»(l/2)/(exp(2*u)+2*exp(u)*cos(v)+l)«(l/2) z = w
invellcylindrical
x = a*cosh(u)*cos(v)/(cosh(ur2-sin(v)"2) у = a*sinh(u)*sin(v)/(cosh(u)"2-sin(v)~2) z = w
invoblspheroidal
x = a*cosh(u)*sin(v)*cos(w)/(cosh(u)"2-cos(v)«2) у = a*cosh(u)*sin(v)*sin(w)/(cosh(u)'2-cos(v)"2) z = a*sinh(u)*cos(v)/(cosh(u)«2-cos(v)'2)
invprospheroidal
x = a*sinh(u)*sin(v)*cos(w)/(cosh(u)'2-sin(v)"2) у = a*sinh(u)*sin(v)*sin(w)/(cosh(u)«2-sin(v)«2) z = a*cosh(Ll)*cos(v)/(cosh(u)»2-s^n(v)•2)
logcoshcylindrical
x = !i/Pi*\n(cosh(uY2-sm(vY2} у = 2*a/Pi*arctan(tanh(u)*tan(v)) z = w
maxwellcylindrical
x = a/Pi*(u+l+exp(u)*cos(v)) у = a/Pi*(v+exp(u)*sin(v)) z = w
oblatespheroidal
x = a*cosh(u)*sin(v)*cos(w) у = a*cosh(u)*sin(v)*sin(w) z = a*sinh(u)*cos(v)
paraboloidal
x = u*v*cos(w) у = u*v*sin(w) z = (u"2 - v'2)/2
paraboloidal2
x = 2*((u-a)*(a-v)*(a-w)/(a-b))-(l/2) у = 2*((u-b)*(b-v)*(b-w)/(a-b))-(l/2) z = u+v+w—a—b
paracylindrical
x = (u'2 - v'2)/2 у = u*v z = w
prolatespheroidal
x = a*sinh(u)*sin(v)*cos(w) y=a*sinh(u)*sin(v)*sin(w) z=a*cosh(u)*cos(v)
rectangular
x = и у = v • z = w
rosecylindrical
x = ((1Г2+у-2)-(1/2)+и)-(1/2)/(1Г2+у-2Г(1/2) у = ((u'2+v'2y(l/2)-uY(l/2)/(u'2+v'2V(\/2) z = w
sixsphere
x= u/(u'2+v'2+w'2) у = v/(u'-2+v'2+v/''2) z = w/(u'2+v'2+w'2)
spherical
x = u*cos(v)*sin(w) у = u*sin(v)*sin(w) z = u*cos(w)
tangentcylindrical
x = u/(ir2+v"2) у = v/(u«2+v»2) z = w
tangentsphere
x = u-costwVdj^+v^) у = u*sin(w)/(ir2+v"2) z = v/(u"2+v~2)
toroidal
x = a*sinh(v)*cos(w)/d у = a*sinh(v)*sin(w)/d z = a*sin(u)/d (где d = cosh(v) - cos(u) )
Эти формулы полезно знать, поскольку в литературе встречаются несколько отличные формулы пересчета.
Вид графиков трехмерных поверхностей очень сильно различается в разных
координатных системах. По умолчанию трехмерные графики строятся в прямоугольной системе координат — rectangular.
13.4. Примеры построения трехмерных поверхностей с помощью функции plot3d
13.4.1. Простейшее построение ЗО-поверхности с разным стилем
На рис. 13.15 показано два примера простейших построений графиков трехмерной поверхности. По умолчанию строится каркасная поверхность с функциональной окраской тонких линий каркаса и удалением невидимых линий. Чтобы график выглядел более четким, построение в первом примере задано линиями черного цвета с помощью параметра color-black.
Рис. 13.15. Примеры простейшего построения трехмерных поверхностей.
Во втором примере та же поверхность построена с параметром style=patch, что приводит к появлению ее функциональной окраски (увы, на рисунках в книге воспринимаемой как окраска оттенками серого цвета). Функциональная окраска делает рисунки более информативными.
Помимо значения path, можно задавать ряд других стилей для построения трехмерных поверхностей: point — точками, contour — контурными линиями, line — линиями, hidden — линиями каркаса с удалением невидимых линий, wireframe — линиями каркаса со всеми видимыми линиями, patchnogrid — с раскраской, но без линий каркаса, patchcontour — раскраска с линиями равного уровня.
Цвет трехмерного графика может задаваться (как и у двумерного) опцией со1ог=с, где с — цвет (оттенки цвета указывались выше). Возможно еще два алгоритма задания цвета:
HUE — алгоритм с заданием цвета в виде color=f(x,y);
RGB — алгоритм с заданием цвета в виде color=[exprr,exprg,exprb], где выражения exprr, exprg и exprb — выражения, задающие относительную значимость (от О до 1) основных цветов (красного — red, зеленого — green и синего — blue).