Задание №3 – трёхмерная графика
//код 6
[X,Y]=meshgrid(0:.2:1,0:.02:1);//meshgrid создаёт матрицы или трёхмерные массивы
Z=X.^2+Y.^2;//функция
xtitle('$\huge z=x^2+y^2$');//добавление заголовка в графическое окно
mesh(X,Y,Z);//mesh создает график трехмерной сетки
Рисунок 18 трехмерная сетка
Примечание: используйте функцию meshgrid() и mesh().
//код 7
[x,y]=meshgrid(-2:0.24:2,-2:0.24:2);//область определения х, у с шагами 0.24(т.к вариант- 24)
--> x0=0;
--> y0=0;
--> z=exp(-((x-x0).^2/2+(y-y0).^2/2));//функция
--> xtitle('$\huge z(x,y)=exp(-((x-x0).^2/2+(y-y0).^2/2))$');\
mesh(x,y,z);//реализация графика
Рисунок 19 сетчатый график функции
//код 8
[x,y]=meshgrid(-1:0.1:1,-1:0.1:1);//создание векторов
--> N=24;//номер варианта
--> z=N/2.*sin(x.*2*%pi).*cos(1.5*%pi*y).*(1-x^2)*y.*x.*(1-y);//функция
--> mesh(x,y,z);//реализация графика
Рисунок 20 прозрачная сетчатая поверхность функции z(x,y)=N/2 sin(2πx) cos(1.5πy) (1-x^2 )yx(1-y)
//к коду 8 приписываем следующие строчки
mesh_handle=get("hdl")//функция get позволяет получить текущий графический объект и
возвращает различные свойства, т.к. mesh имеет flag_color=0(белый или без цвета)
mesh_handle.color_mode=2//даем код цвета (синий)
Рисунок 21 непрозрачная сетчатая поверхность функции z(x,y)=N/2 sin(2πx) cos(1.5πy) (1-x^2 )yx(1-y)
3.4. Постройте каркасную поверхность функции z (x y) с помощью команд
surf(X, Y, Z), surf(X, Y, Z, 'facecol','interp') и приведите их в отчете. Добавьте
также отображение сетки в трёхмерном пространстве.
//код 9
[x,y]=meshgrid(-1:0.1:1,-1:0.1:1);
N=24;//номер варанта
z=N/2.*sin(x.*2*%pi).*cos(1.5*%pi*y).*(1-x^2)*y.*x.*(1-y);//функция графика
surf(x,y,z);//строит 3d графики
xgrid(2);//сетка
Рисунок 22 каркасная поверхность с помощью функции surf
//код 10
[x,y]=meshgrid(-1:0.1:1,-1:0.1:1);
N=24;//номер варанта
z=N/2.*sin(x.*2*%pi).*cos(1.5*%pi*y).*(1-x^2)*y.*x.*(1-y);//функция графика
surf(x,y,z,'facecol','interp');//интерполированный режим затенения flag_color=3
xgrid(2);//сетка
Рисунок 23 каркасная поверхность с помощью функции surf(x,y,z,'facecol','interp')
3.5. Постройте каркасную поверхность функции z= (x y с) помощью
следующего набора команд:
surf(X, Y, Z);
f = gcf();
f.color_map = hsvcolormap(32)
Результаты приведите в отчете и объясните что делает каждая строка.
--> surf(X, Y, Z) //строит каркасную поверхность
--> f = gcf(); //gcf-возвращяет дескриптор текущего графического окна
--> f.color_map = hsvcolormap(32)//изменяет насыщенность оттенка
Рисунок 24 каркасная поверхность (изменение насыщенности)
3.6. Постройте каркасную поверхность функции z (x y) с помощью команд
аналогичным выше со следующими палитрами: autumncolormap,
coolcolormap, pinkcolormap. Посмотрите, как будет меняться палитра при
изменении параметра n (например при числах 8, 16, 32).
--> f = gcf(); //gcf-возвращяет дескриптор текущего графического окна
--> f.color_map = autumncolormap (32)//цветовая карта от красного до
оранжевого, до желтого цвета. При изменении параметра n в большую
сторону палитра становится более четким(начинает приближаться к желтому
цвету)
Рисунок 25 поверхность с палитрой f.color_map = autumncolormap (32)
Рисунок 25 поверхность с палитрой f.color_map = autumncolormap (16)
Рисунок 27 поверхность с палитрой f.color_map = autumncolormap (8)
--> f = gcf(); //gcf-возвращяет дескриптор текущего графического окна
--> f.color_map = coolcolormap (32)//coolcolormap- вычисляет цветовую карту
с n цветами, варьирующимися от голубого до пурпурного. При изменении
параметра n в большую сторону палитра меняется, цвета распределяются
иначе.
Рисунок 28 поверхность с палитрой f.color_map = coolcolormap (32)
Рисунок 29 поверхность с палитрой f.color_map = coolcolormap (16)
Рисунок 30 поверхность с палитрой f.color_map = coolcolormap (8)
--> f = gcf(); //gcf-возвращяет дескриптор текущего графического окна
--> f.color_map = pinkcolormap (32)//pinkcolormap - раскрашивание цвета
сепии на черно-белые изображения. При изменении параметра n в большую
сторону палитра меняется, цвета начинают приближаться к белому
Рисунок 31 поверхность с палитрой f.color_map = pinkcolormap (32)
Рисунок 32 поверхность с палитрой f.color_map = pinkcolormap (16)
Рисунок 33 поверхность с палитрой f.color_map = pinkcolormap (8)
3.7. C помощью команды param3d(x,y,z) постройте параметрическую кривую
в объёмном пространстве, которая описывается следующим образом:
где параметр t - вектор, который должен изменяться от 0 до 10π. Шаг следует
выбирать в диапазоне от 0.001 до 0.01.
//код 11
t=[0:0.007:10*%pi];//вектор t в диапазоне [0,10π] и с шагом 0.007
--> clf
--> x=sin(t);//функция х
--> y=sin(t);//функция у
--> z=t;//функция z
--> param3d(x,y,z,theta=[2],alpha=[4]);//param3d-построение одной кривой в 3D декартовой рамке
Рисунок 34 реализация param3d
Задание №4 М-файлы и функции
Работа с М-файлами и пользовательскими функциями.
4.1 Описать и реализовать следующий код, создать файл функцию
//код 12
x = [0:0.1:10];//создает вектор х в диапазоне [0,10] с шагом 0.1
--> f = exp(-x);//функция f
--> subplot(1, 2, 1)//subplot- устанавливает текущие оси для выбора ячейки текущей разграфлённой фигуры
plot(x, f)//строит график f
--> g = sin(x);//функция g
--> subplot(1, 2, 2) // subplot(m,n,p) виртуально разделяет графическое окно на матрицу
подокон размером m-на-n, и выбирает p-тое подокно для получения графика
--> plot(x, g)//строит график g
Рисунок 35 реализация функции subplot
//код 11 данная программа строит график двух функций и показывает их в
одном окне с разными осями
--> exec(“main.sce”)//как только набираем в консоли эту команду, сразу
появляется графическое окно. Мы создали отдельную файл-функцию main,
которая реализует код 11.
4.2. Постройте график файл-функции myfun с помощью команд plot и fplot2d.
В файле-функции myfun должно рассчитываться следующее выражение:
где
k =N , N - номер варианта по списку,
T =N/50
. В качестве входного
аргумента файл-функция должна принимать вектор
t
, который должен быть
задан на интервале [0, 5] с шагом 0.01. Таким образом, М-файл функции
должен иметь следующее заглавие:
function f = myfun(t)
В командной строке MATLAB вызов этой функции происходит
следующим образом:
--> y = myfun(t)
В результате чего создастся вектор-строка y с тем же числом элементов,
что и вектор
t . После этого можно воспользоваться функцией plot.
Чтобы воспользоваться функцией fplot2d необходимо выполнить
следующую команду:
--> fplot2d(t, myfun),
где t – вектор времени.
//код 12-файл_функция myfun
function y=myfun(t)
N=24//вариант
T=N/50;
k=N;
y=k.*(t-T.*(1-exp(-t./T)));
endfunction
Содержание консоли:
--> t=[0:0.01:5]
t =
……………………
--> exec("myfun.sce");
--> y=myfun(t)//создается вектор-строка у
--> plot(t,y)
Рисунок 36 реализация графика plot через файл_ функцию “myfun.sce”
--> fplot2d(t,myfun)
Рисунок 37 реализация графика fplot2d(t,myfan) через файл_ функцию “myfun.sce”
4.3. Напишите файл-функцию root2, которая находит только действительные
корни квадратного уравнения, а при наличии комплексного корня выдает
сообщение об ошибке. В демонстрационных примерах второй коэффициент
квадратного уравнения должен быть равен вашему номеру по списку в
журнале группы.
//код 13
function [y1, y2]=root2//ax^2+bx+c=0
a=input("Введите а:")
c=input("Введите c:")
b=24//номер варианта
D=sqrt(b.^2-a.*c)//дискриминант квадратного уравнения
y1=(-2+D)./2*a//первый корень
y2=(-2-D)./2*a//второй корень
if D<0//функция если
then disp("Ошибка")//тогда
else disp(y1,"Значение у1:")//в противном случае, вывести на экран значения корней
disp(y2,"Значение y2:")
end
endfunction
Содержание консоли:
Рисунок 38 результат программы код 13
>> B = Bezie(P0,P1,P2,P3,step)
34
В отчёте приведите не менее 5 графиков кривых Безье для различных
комбинаций опорных точек P0,P1,P2,P3.
Решение
//код 14-файл Bezie
function B=Bezie(P0, P1, P2, P3, step)
t=[0:step:1];//вектор t с шагом step
X=((1-t).^3)*P0(1,1)+(3.*t.*(1-t).^2)*P2(1,1)+(3.*t.*t.*(1-t))*P3(1,1)+(t.*t.*t).*P1(1,1)//
координата по Х
Y=((1-t).^3)*P0(2,1)+(3.*t.*(1-t).^2)*P2(2,1)+(3.*t.*t.*(1-t))*P3(2,1)+(t.*t.*t).*P1(2,1)//
координата по У
B=[X;Y];//матрице B задаем координаты ХУ
plot(X,Y)//строит кривую безье
endfunction
//набираем в консоли
--> P0=[1;2]//вектор Р0
P0 =
1.
2.
--> P1=[2;4]//вектор Р1
P1 =
2.
4.
--> P2=[4;1]//вектор Р2
P2 =
4.
1.
--> P3=[2;2]//вектор Р3
P3 =
2.
2.
35
--> step=0.01//шаг вектора t
step =
0.01
--> B=Bezie(P0,P1,P2,P3,step)//вызываем файл_ функцию Bezie
Рисунок 39 график кривой безье Р0,Р1,Р2,Р3
--> B=Bezie(P1,P0,P2,P3,step)//меняем порядок
Рисунок 40 график кривой безье Р1,Р0,Р2,Р3
Рисунок 41 график кривой безье Р0,Р1,Р3,Р2
Рисунок 42 график кривой безье Р3,Р2,Р1,Р0
Рисунок 43 график кривой безье Р0,Р3,Р1,Р2
Вывод:
В ходе лабораторной работы получил базовые знания для работы в
двумерной и трехмерной графикой. В среде MATLAB/SCILAB, научился
создавать графики функций, построил поверхности, также использовал Мфайлы.