36867

Построение поверхностей заданных параметрически с помощью функций param3d и param3d1

Лабораторная работа

Математика и математический анализ

Затем обратимся к функции prm3d передав ей математические выражения функций y y1 и y2 а также углы в градусах под которыми наблюдатель будет видеть формируемый график 45 и 35 Листинг 6. Построение линии заданной параметрически с помощью функции prm3d t=[0:0. Построение линии заданной параметрически с помощью функции prm3d t=50pi:0. Для построения графиков линий в одной системе координат обратимся к функции prm3d1.

Русский

2013-09-23

752 KB

9 чел.

Лабораторная работа № 6а

Построение поверхностей заданных параметрически с помощью функций param3d и param3d1

Для построения параметрической кривой в Scilab существует команда param3d:

param3d(x,y,z,[theta,alpha,leg,flag,ebox]).

Задача 6.11. Построить график линии, заданной параметрически:

Прежде всего, определим диапазон и шаг изменения параметра t. Затем обратимся к функции param3d, передав ей математические выражения функций y, y1 и y2, а также углы в градусах, под которыми наблюдатель будет видеть формируемый график - 45 и 35

Листинг 6.11. Построение линии, заданной параметрически, с помощью функции param3d

t=[0:0.1:10*%pi];

param3d(sin(t),cos(t),t/7,45,35);

Задача 6.12. Построить линию, заданную параметрически:

Определив массив значений параметра t, вычислим значения X, Y и Z координат кривой.

Для построения графика используем команду param3d, установив углы обозрения наблюдателя 45 и 60 градусов.

Листинг 6.12. Построение линии, заданной параметрически, с помощью функции param3d

t=-50*%pi:0.1:50*%pi;

x=t.*sin(t);

y=t.*cos(t);

z=t.*abs(t)/(50*%pi);

param3d(x,y,z,45,60);

Для вывода нескольких параметрически заданных кривых в одних координатах в Scilab используется функция param3d1. Она имеет несколько отличный синтаксис:

param3d1(x,y,list(z,colors),[theta,alpha,leg,flag,ebox])

Здесь впервые появляется необходимость использования конструкции list(z,colors), которая позволяет не только задавать Z-координату для каждой из кривых, но и устанавливать для них желаемый цвет.

Задача 6.13. Построить графики линий, заданных параметрически:

Зададим массив значений параметра t.

Для построения графиков линий в одной системе координат обратимся к функции param3d1. В качестве параметров в первых квадратных скобках передадим ей X и Y координаты первой кривой, а во вторых - второй. При помощи свойства list определяем Z-координаты и для первой кривой установим темно-синий цвет линии (9), а для второй - красный (5). Числа 35 и 45 - углы обозрения наблюдателя. Параметр ’X@Y@Z’ отвечает за вывод подписей осей графика.

Листинг 6.13. Построение нескольких параметрически заданных линий с помощью команды list функции param3d

t=[0:0.1:5*%pi]’;

param3d1([sin(t),sin(2*t)],[cos(t),cos(2*t)],...

list([t/10,sin(t)],[9,5]),35,45,"X@Y@Z");

Функция contour

В Scilab, кроме построения объемных графиков, также реализована возможность создания пространственных моделей объектов. На практике часто возникает необходимость построения карт в изолиниях значений показателя, где X, Y -координаты задают положение конкретной изучаемой точки на плоскости, а Z-координата - зафиксированную величину показателя в этой точке. Точки с одинаковыми значениями показателя соединяют так называемые изолинии - линии одинаковых уровней значений исследуемой величины.

Для построения изолиний в Scilab существует функция contour. Обращение к ней имеет вид:

contour(x,y,z,nz[theta,alpha,leg,flag,ebox,zlev])

Здесь x, y - массивы действительных чисел;

z - матрица действительных чисел – значения функции, описывающей поверхность Z(x, y);

nz - параметр, который устанавливает количество изолиний. Если nz – целое число, то в диапазоне между минимальным и максимальным значениями функции Z(x, y) через равные интервалы будут проведены nz изолиний. Если же задать nz как массив, то изолинии будут проводиться через все указанные в массиве значения;

theta, alpha - действительные числа, которые определяют в градусах сферические координаты угла обозрения наблюдателя. Попросту говоря, это угол, под которым наблюдатель видит отображаемую поверхность;

leg - подписи координатных осей графика - символы, отделяемые знаком @. Например, ’X@Y@Z’.

flag - массив, состоящий из трех целочисленных параметров: [mode,type,box].

Здесь

mode - устанавливает способ и место нанесения линий уровня.

type - позволяет управлять масштабом графика, по умолчанию имеет значение 2;

box - определяет наличие рамки вокруг отображаемого графика. По умолчанию равен 4;

ebox - определяет границы области, в которую будет выводиться поверхность, как вектор [xmin,xmax,ymin,ymax,zmin,zmax]. Этот параметр может использоваться только при значении параметра type=1;

zlev - математическое выражение, которое задает план (горизонтальную проекцию заданной поверхности) для построения изолиний. По умолчанию совпадает с уравнением, описывающим плоскость, в этом случае может не указываться.

Следует отметить, что функции contour уравнение поверхности Z(x, y) удобнее передавать в качестве параметра как функцию, определенную пользователем.

Напомним, что функции в Scilab создаются при помощи команды deff:

deff(’[s1,s2,...]=newfunction(e1,e2,...)

где s1,s2,... - список выходных параметров, т.е. переменных, которым будет присвоен конечный результат вычислений;

newfunction _имя создаваемой функции, оно будет использоваться для ее вызова;

e1,e2,... _входные параметры.

Второй способ создания функции - это применение конструкции вида:

function <lhs_arguments>=<function_name><rhs_arguments>

<тело_функции>

endfunction

где lhs_arguments _список выходных параметров;

function_name _имя создаваемой функции;

rhs_arguments _входные параметры.

Задача 6.14. Построить линии уровня поверхности Z = x · sin(x)2 · cos(y).

Введем параметр t и определим массив его значений. При помощи команды function создадим функцию my_surface с входными данными x, y и выходными - z. В теле функции вычислим значения математического выражения, задающего поверхность.

Листинг 6.14. Построение изолиний поверхности Z = x·sin(x)2 ·cos(y)

с помощью функции contour

t=linspace(-%pi,%pi,30);

function z=my_surface(x,y)

z=x*sin(x)^2*cos(y)

endfunction

contour(t,t,my_surface,10);

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

Задача 6.15. Построить поверхность Z = sin(x) · cos(y) и вывести изолинии в одном графическом окне.

Прежде всего, введем параметр t и сформируем массив его значений. Создадим функцию Surf, обратившись к команде deff.

С помощью команды rect установим границы области построения графика в графическом окне для того, чтобы стало возможным совместить и поверхность, и спроецированные на горизонтальную плоскость изолинии поверхности.

Напомним, что при построении графика функции вида Z(x, y) при помощи функции plot3d необходимо использовать оператор цикла For, формировать матрицу значений функции zij = f(xi, yj). Чтобы избежать этого, воспользуемся командой feval.

Далее с помощью функции plot3d строим график поверхности Z = sin(x) · cos(y), устанавливая углы обзора наблюдателя, подписи для координатных осей.

Определяем и массив flag [2,1,4]: 2 - цвет графика - синий, 1 - границы области построения графика определяются вручную, 4 - выводятся все оси и рамка вокруг графика.

Затем формируем изолинии, обратившись к функции contour, также устанавливаем углы обзора наблюдателя, подписи координатных осей, число формируемых изолиний 10 и значения массива flag [1,1,4]: 1 - режим вывода изолиний на отдельно построенный план, который задается тем же уравнением, что и поверхность (Z = sin(x) · cos(y)), 1 - границы области построения графики определяются вручную, 4 - выводятся все оси и рамка вокруг графика. Число −5 устанавливает положение горизонтальной плоскости с изолиниями 5 единиц ниже графика поверхности.

С помощью команды xtitle выведем подпись для графика.

Листинг 6.15. Построение поверхности Z = sin(x) · cos(y) (функция plot3d) и вывод ее изолиний (функция contour) в одном графическом окне командой rect

t=%pi*(-10:10)/10;

deff(’[z]=Surf(x,y)’,’z=sin(x)*cos(y)’);

rect=[-%pi,%pi,-%pi,%pi,-5,1];

z=feval(t,t,Surf);

plot3d(t,t,z,35,45,’X@Y@Z’,[2,1,4],rect);

contour(t,t,z,10,35,45,’X@Y@Z’,[1,1,4],rect, -5);

xtitle(’plot3d and contour’);

Задача 6.16. Совместить график поверхности Z = sin(x) · cos(y) с ее изолиниями.

Листинг 6.16. Пример совмещения графика поверхности с ее изолиниями

t=%pi*(-10:10)/10; deff(’[z]=Surf(x,y)’,’z=sin(x)*cos(y)’);

rect=[-%pi,%pi,-%pi,%pi,-1,1];

 z=feval(t,t,Surf);

plot3d(t,t,z,35,45,’X@Y@Z’,[-19,1,4],rect);

contour(t,t,z+0.1,10,35,45,’X@Y@Z’,[0,1,4],rect); ...

xtitle(’plot3d and contour’);

Функция contourf

В Scilab существует функция contourf, которая не просто изображает поверхность на горизонтальной плоскости в виде изолиний, но и заливает интервалы между ними цветом, в зависимости от конкретного уровня значений показателя.

Обращение к функции имеет вид:

contourf (x,y,z,nz,[style,strf,leg,rect,nax])

Здесь x, y - массивы действительных чисел;

z - матрица действительных чисел - значения функции, описывающей поверхность Z(x, y);

nz - параметр, который устанавливает количество изолиний. Если nz – целое число, то в диапазоне между минимальным и максимальным значениями функции Z(x, y) через равные интервалы будут проведены nz изолиний.

Если же задать nz как массив, то изолинии будут проводиться через все указанные в этом массиве значения;

style - массив того же размера, что и nz - устанавливает цвет для каждого интервала уровней значений;

strf - строка, состоящая из трех чисел – «сsа».

Здесь с (Captions) устанавливает режим отображения подписей графика (см. табл.); s (Scaling) - режим масштабирования (см. табл);

a (Axes)_определяет положение осей графика (см. табл.).

leg - легенда графика, подпись каждой из кривых - символы, отделяемые знаком @. По умолчанию – « ».

rect - вектор [xmin, ymin, xmax, ymax], который определяет границы изменения x и y координат графической области окна;

Таблица. Значение параметра с (Captions) строки strf

Значение

Описание

0

нет подписей

1

отображаются подписи, заданные параметров leg

Таблица. Значение параметра s (Scaling) строки strf

Значение

Описание

0

масштабирование по умолчанию

1

устанавливается параметром rect

2

масштаб зависит от минимального и максимального значения входных данных

3

выводятся изометрические оси, исходя из значений параметра rect

4

выводятся изометрические оси, исходя из входных данных

5

расширение осей для наилучшего вида, исходя из значений параметра rect

6

расширение осей для наилучшего вида, исходя из входных данных

Таблица. Значение параметра a (Axes) строки strf

Значение

Описание

0

Нет осей

1

выводятся оси, ось Y слева

2

выводится рамка вокруг графика без делений

3

выводятся оси, ось Y справа

4

оси центрируются в графической области окна

5

оси выводятся таким образом, чтобы они пересекались в точке (0; 0)

Nax - это массив из четырех значений [nx, Nx, ny, Ny], определяющий число основных и промежуточных делений координатных осей графика. Здесь Nx (Ny) - число основных делений c подписями под осью X (Y );

nx (ny) - число промежуточных делений.

Задача 6.17. Построить изображение поверхности Z = sin(x) · cos(y) с помощью функции contourf.

contourf(1:10,1:10,rand(10,10),5,1:5,"011"," ",[0,0,11,11])

function z=peaks(x, y)

x1=x(:).*.ones(1,size(y,'*'));

y1=y(:)'.*.ones(size(x,'*'),1);

z =  (3*(1-x1).^2).*exp(-(x1.^2) - (y1+1).^2) ... 

  - 10*(x1/5 - x1.^3 - y1.^5).*exp(-x1.^2-y1.^2) ... 

  - 1/3*exp(-(x1+1).^2 - y1.^2) 

endfunction

function z=peakit()

x=-4:0.1:4;y=x;z=peaks(x,y);

endfunction

z=peakit();

levels=[-6:-1,-logspace(-5,0,10),logspace(-5,0,10),1:8];

m=size(levels,'*');

n = fix(3/8*m);

r = [(1:n)'/n; ones(m-n,1)];

g = [zeros(n,1); (1:n)'/n; ones(m-2*n,1)];

b = [zeros(2*n,1); (1:m-2*n)'/(m-2*n)];

h = [r g b];

xset('colormap',h);

xset('fpf',' ');

clf();

contourf([],[],z,[-6:-1,-logspace(-5,0,10),logspace(-5,0,10),1:8],0*ones(1,m))

xset('fpf','');

clf();

contourf([],[],z,[-6:-1,-logspace(-5,0,10),logspace(-5,0,10),1:8]);

Функция hist3d

Для построения трехмерных гистограмм в Scilab используется функция hist3d:

hist3d(f,[theta,alpha,leg,flag,ebox])

Здесь f - матрица (m : n), задающая гистограмму f(i, j) = F(x(i), y(j)).

Параметры theta,alpha,leg,flag,ebox управляют теми же свойствами, что и у функции plot3d.

Задача 6.18. Построить трехмерную гистограмму.

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

Напомним, чтобы создать матрицу размером (m,n), необходимо использовать конструкцию rand(m,n).

Листинг 6.18. Построение трехмерной гистограммы при помощи функции hist3d

hist3d(9.7*rand(10,10),20,35);

Примеры построения некоторых трехмерных графиков в

Scilab

Рассмотрим приемы построения некоторых нестандартных трехмерных графиков средствами Scilab.

Прежде всего, научимся вырезать из графиков «ненужные» части.

Задача 6.19. Построить поверхность Z = sin(t) · cos(t), вырезать из графика области, где |Z| > 0.5.

 

Сформируем массив значений параметра t, вычислим значения функции

Z = sin(t) · cos(t) и запишем их в массив Z.

В массив Z1 при помощи команды find запишем индексы тех элементов массива Z, чье модальное значение больше 0,5.

Далее мы будем использовать функцию %inf. Она предназначена для определения бесконечных элементов массива, поэтому запись z(z1)=%inf*z1 приведет к тому, что %inf*z1 объявит те элементы массива Z, чьи индексы содержатся в массиве Z1, бесконечным величинами.

При формировании прямоугольной сетки для построения графика в узлах сетки, смежных с бесконечными элементами массива Z, все значения, разумеется, будут равны бесконечности, и функция plot3d1 зальет соответствующие ячейки белым цветом. Таким образом, нам удастся создать эффект вырезания целых областей поверхности Z = sin(t) · cos(t).

Листинг 6.19. Пример «вырезания» из поверхности заданной области

t=linspace(-%pi,%pi,40);

z=sin(t)’*cos(t);

z1=find(abs(z)>0.5);

z(z1)=%inf*z1;

plot3d1(t,t,z);

Задача 6.20. Построение полой сферы.

Прежде всего, при помощи команды deff создадим функцию sph, которая задает сферу тремя параметрическими уравнениями X, Y , Z.

deff(’[x,y,z]=sph(alp,tet)’,[’x=r*cos(alp).*cos(tet)+...

orig(1)*ones(tet)’;

’y=r*cos(alp).*sin(tet)+orig(2)*ones(tet);

’z=r*sin(alp)+orig(3)*ones(tet)’]);

Далее задаем значения параметра r, вектора-строки orig, массивов x и y.

Уже известным нам способом, при помощи функции %inf, объявляем бесконечными величинами элементы массива x с индексами (5 : 8) и (30 : 35).

Таким образом мы добьемся того, что в графическое окно будет выведена сфера, имеющая две «шляпки», сверху и снизу. Под ними элементы, объявленные бесконечными, образуют два «окошка», через которые можно увидеть полость внутри сферы.

Саму же сферу построим при помощи команды eval3dp и функции plot3d1,

для лучшего обзора всех деталей графика укажем углы поворота наблюдателя 35 и 15.

Листинг 6.20. Построение сферы с полостью внутри и «срезанными» полюсами

deff(’[x,y,z]=sph(alp,tet)’,[’x=r*cos(alp).*cos(tet)+orig(1)*...

ones(tet)’;

’y=r*cos(alp).*sin(tet)+orig(2)*ones(tet)’;

’z=r*sin(alp)+orig(3)*ones(tet)’]);

r=1;orig=[0 0 0];

x=linspace(-%pi/2,%pi/2,40);

y=linspace(0,%pi*2,20);

x(5:8)=%inf*ones(5:8);

x(30:35)=%inf*ones(30:35);

[x1,y1,z1]=eval3dp(sph,x,y);

plot3d1(x1,y1,z1,35,15);

Задача 6.21. Построение ракушкообразного графика. Такой график можно задать следующей системой уравнений:

Зададим массивы значений параметров u, v. Вычислим значения функций x, y, z. Обратившись к функции plot3d2, получим график

Листинг 6.21. Построение ракушкообразного графика

u = linspace(0,2*%pi,40);

v = linspace(0,2*%pi,20);

x= (cos(u).*u)’*(1+cos(v)/2);

y= (u/2)’*sin(v);

z= (sin(u).*u)’*(1+cos(v)/2);

plot3d2(x,y,z);

Задача 6.22. Построение ленты Мебиуса при помощи функции plot3d2.

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

Здесь u принадлежит интервалу [0; 2π], а v - [−1; 1]. Эти формулы задают ленту Мебиуса ширины 1, чей центральный круг имеет радиус 1, лежит в плоскости xy с центром в (0, 0, 0). Параметр u пробегает вдоль ленты, в то время как v задает расстояние от края.

Листинг 6.22. Построение ленты Мебиуса при помощи функции plot3d2

t=linspace(-1,1,20)’;

x=linspace(0,%pi,40);

factor=2+t*cos(x);

X=factor*diag(cos(2*x));

Y=factor*diag(sin(2*x));

Z=t*sin(x);

plot3d2(X,Y,Z);

Задача 6.23. Построение тора с узкой и широкой стороной при помощи функции plot3d2.

Тор - поверхность вращения в форме бублика, получаемая вращением окружности вокруг оси, лежащей в плоскости окружности и не пересекающей ее. Уравнение тора может быть задано параметрически в виде:

Здесь u, v принадлежат интервалу [0; 2π], а также R -  расстояние от центра окружности до оси вращения, r - радиус окружности.

Листинг 6.23. Построение тора с узкой и широкой стороной при помощи функции plot3d2

x=linspace(0,2*%pi,40);

y=linspace(0,2*%pi,20)’;

fact=1.5+cos(y)*(cos(x)/2+0.6);

X=fact*diag(cos(x));

Y=fact*diag(sin(x));

Z=sin(y)*(cos(x)/2+0.6);

plot3d2(X,Y,Z,);

Задача 6.24. Построение деформированного тора при помощи функции plot3d2.

Листинг 6.24. Построение деформирования тора при помощи функции plot3d2

x=linspace(0,2*%pi,40);

y=linspace(0,2*%pi,20)’;

factor=1.5+cos(y);

X=factor*cos(x);

Y=factor*sin(x);

Z=sin(y)*ones(x)+ ones(y)*cos(2*x);

plot3d2(X,Y,Z);


 

А также другие работы, которые могут Вас заинтересовать

47191. Разработка Интернет-сайта для Сибирского центра ФГБУ НИЦ Планета 4.52 MB
  В настоящее время Web-сайт является неотъемлемой частью любой организации. На Web-сайте можно менять информацию несколько раз в день, что обеспечивает оперативность работы, и отслеживание информации в реальном времени. В печатных изданиях надо заказывать рекламу минимум за неделю, а то и больше, так же как и радио – не оперативно.
47193. Реалізація мультисервісної мережі 6.21 MB
  Актуальність розробки мережі У місті діє лише один провайдер який надає ряд телекомунікаційних послуг основними з яких є: місцевий внутрішньозоновий міжміський та міжнародний телефонний звязок телеграфний звязок поштовий звязок послуги передачі даних та інші. Звідси випливає і актуальність проектування нової мультисервісної мережі з наданням послуг Інтернет VoIP та IPTV.2 Сегменти й вузли проектованої мережі Визначимо категорії абонентів які будуть користуватися певними послугами мобільного інтернету–...
47194. Разработка занятий имеющих цель повторения материала по теме «Четырехугольники» 4.48 MB
  В процессе повторения у учащихся развивается память. Эмоциональная память опирается на наглядно–образные процессы, постепенно уступает памяти с логическими процессами мышления, которая основана на умении устанавливать связи между известными и неизвестными компонентами, сопоставлять абстрактный материал, классифицировать его, обосновывать свои высказывания.
47195. Возникновение моббинговых ситуаций внутри коллектива и путей выхода из них на примере магазина «Рибок» ООО «Адидас» 661.5 KB
  Проблема моббинга становится особенно актуальной в последние годы – когда страх потерять работу стал очень популярен а желание сделать карьеру любой ценой уже никого не удивляет. Для достижения поставленной цели необходимо решение следующих задач: определить понятие моббинг в организации; рассмотреть виды типы моббинга проявления и причины появления; провести анализ на наличие моббинга внутри коллектива магазина Рибок и разработать мероприятия по его устранению. Предметом исследования является наличие моббинга ситуаций на...
47196. Разработка стратегии формирования клиентоориентированного состава услуг для целевого сегмента ООО Поликлиника «УРАЛСИБ» в поддержку ее стратегии достижения рентабельного уровня 2.74 MB
  Поликлиника «УРАЛСИБ» существует более 11 лет, и первоначально строилась на средства Урало-Сибирского Банка. Услугами Поликлиники пользовались только сотрудники Банка. При этом Поликлиника полностью финансировалась Банком.
47198. Разработка системы бизнес-процессов, как инструмент повышения результативности действий персонала в поддержку стратегии компании (на примере компании «ИК Ист Коммерц») 1.08 MB
  Цель данного исследования заключалась в оптимизации портфеля БП и разработке критериев оценки эффективности организационной структуры департамента и протекающих процессов с целью повышения уровня обслуживания клиентов. Автор считал, что определение приоритетов усилий сотрудников по различным процессам и адекватное их содержание способно повысить эффективность работы Департамента брокерского обслуживания
47199. Разработка клиентоориентированной стратегии по выводу продукции в целевые розничные сети в интересах продвижения бренда компании на рынке В2В (на примере частного случая компании “Пластал”) 923.5 KB
  Исходя из отмеченного, главной целью предполагаемого исследования выступает разработка клиентоориентированной стратегии производственной компании по выводу продукции строительного назначения в целевые розничные сети (с сильными брендами) в интересах продвижения бренда компании на рынки В2В.