Визуализация точек, линий, поверхностей, 2-х мерных скалярных и векторных полей. Анимация движения и измерения формы геометрических объектов с использованием MATLAB

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

При моделировании геометрической формы в качестве моделей используются геометрические объекты, к которым относятся точки, линии, фигуры, поверхности и тела (рис. 24).

Виды геометрических объектов, используемых в моделировании

Рис 24. Виды геометрических объектов, используемых в моделировании.

Рассмотрим, каким образом геометрические объекты описываются математически и как они представляются и визуализируются в компьютере.

ТОЧКА.

Математически точка представляется двумя или тремя координатами (для 2D и 3D пространства соответственно). Если рассматривается обычное физическое пространство, то значения координат - это вещественные числа, например (23,12,14).

Точка может:

  • А) задаваться пользователем таблично: x=const, y=const
  • В) вычисляться как пересечение двух линий для плоских кривых

FI(x,y) = 01

  • (190)
  • (191)

F2(x,y) = 0j

или как пересечение трех поверхностей трехмерном пространстве

Fi(x,y,z) = 0 F2 (х, y,z) = Q F3(x,y,z) = 0

или как пересечение линии и поверхности в трехмерном пространстве.

Во всех случаях, кроме первого, для того, чтобы определить координаты точки необходимо решить систему алгебраических уравнений.

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

хо=23;

уо=12;

zo=14;

Визуализация точки в Matlab производится операторами

plot(xo,yo) для 2D пространства и

plot3(xo,yo,zo) для 3D пространства.

Так для визуализации точки на рис.2.1. потребуются операторы:

xo=-5;yo=5; zo=0; "/«координаты точки

plot3(xo,yo,zo,... "/«Вывести точку с координатами xo,yo,zo

. "/«форма маркера - точка

'LineVVidth',4,... "/«толщина границы маркера

'MarkerEdgeColor',Ъ',..."/«цвет границы - синий

'МагкегРасеСо1ог','у',...%цвет фона маркера - желтый

'MarkerSize',30) "/«размер маркера

ЛИНИЯ.

Математически линия представляет собой упорядоченное множество точек.

Линия может быть задана:

А) таблично двумя или тремя матрицами-строками, содержащими координаты точек линии.

х = ||х, X, ... х„||

У = Ь| Уг - У„|| z = ||z, z2 ... z„||

  • (192)
  • Б) как результат пересечения двух поверхностей:

F, (х, у, z) = 0

F2 (х, у, z) = 0

  • (193)
  • В) в виде функциональной зависимости

F(x,y)=0

  • (194)
  • Г) параметрически

х = x(Z)

У = y(t)> z = z(O

(195)

В компьютере значения координат могут задаваться разными способами.

При табличном способе задания как:

"/«Ломаная линия из пяти точек (х,у):(-5,-8,6)(0,2,4)(9,7,5)(5,3,2)(5,0,1),

"/«заданная таблично х=[-5 0 9 5 5|;% матрица-строка х-координат точек линии у=[-8 2 7 3 0|;% матрица-строка у-координат точек линии z=[ 6 4 5 2 1 ];% матрица-строка у-координат точек линии

При задании функциональной зависимости

у = у(х) : например у = а(> + at-x + CI2X2

"/«Парабола, заданная в виде функции у=у(х) х=-10:1:10; %матрица-етрока аргумента х ао=-9;а1=0.3;а2=0.05; "/«коэффициенты полинома (скаляры) у=ао+а!*х+а2*х.л2; "/«зависимость у=у(х) у- матрица-строка

При параметрическом задании, например для окружности и спирали:

"/«Окружность, заданная параметрически x=x(t),y=y(t)

fi=(0:15:360)*pi/180; "/«матрица-строка параметра-угла поворота

г=8; %радиус окружности (скаляр)хс=5;ус=2; "/«координаты центра окружности

(скаляры)

x=xc+r*cos(fi); "/«умножение скаляра на матрицу-строку

y=yc+r*sin(fi);

%ЗО-снираль, заданная параметрически x=x(t),y=y(t), z=z(t)

fi=(0:5:5*360)*pi/180; “/«матрица-строка параметра-угла fi

kr=5/(5*360*pi/180); "/«коэффициент расхождения спирали

г=кк*Л; "/«зависимость текущего радиуса спирали от угла fi. г- матрица-строка

x=0+r.*cos(fi); "/«поэлементное умножение матриц

y=O-r.*sin(fi);

kz=10/(5*360*pi/180); %Коэффициент подъема винтовой линии. Kz-скаляр z=kz*fi; %z - матрица-строка

Визуализация линии производится, так же как и точки, операторами

plot(x,y) для 2D пространства и

plot3(x,y,z) для 3D пространства.

При этом могут быть указаны толщина (LineWidth) и цвет (Color ) линии

plot(x, у, 'LineWidth', 2, 'Color', 'г');

ФИГУРА - множество точек, ограниченное замкнутой кривой. Например, круг - это фигура, ограниченная окружностью. Иными словами фигура - это плоский вариант поверхности. В 2-D пространстве (на плоскости) она играет роль тела.

Визуализация фигуры производится операторами

fiii(x,y,’red’) для 2D пространства и fiU3(x,y,z,’red’) для 3D пространства, которые замыкают плоский или пространственный контур, заданный матрицами-строками x,y,z, и заливают его указанным цветом (в данном случае

- красным.)

ПОВЕРХНОСТЬ.

Математически поверхность представляется:

в виде функции двух независимых которая может записываться в общем виде как F(x,y,z)=0 или

а) таблично в виде трех матриц, содержащих упорядоченные по двум индексам координаты точек поверхности

xl,l

*1.2

X1,J

Xl,n

У1Л

У1.2

Уи

У1.П

Z1.1

^1,2

х =

Х2,1

*2,2

X2,j

*2,n

Y =

У2Л

У 2,2

У2.А

У2,п

z =

':.i

^2.2

Z2.j

Z2.n

1

Xi,2

X• j

Xi,n

У.Л

Yi,2

y>.i

У..П

z,-.i

Zi,2

Zi.j

Zi,n

Хт,2

XmJ

Xm.n

У mA

Ут,2

y«,j

У m,n

Zm,l

Zm,2

Zm,j

Zm.n

  • (196)
  • б) в виде зависимости как функции двух переменных z=z(x,y)
  • в) параметрически - в виде зависимостей координат от двух (в отличие от одного для линии) параметров

X=X(p,q)

Y=Y(p,q) (197)

Z=Z(p,q)

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

Если образующая линия содержит п точек (1,2,.. .j, .. .,п) и занимает на направляющей m положений (l,2,...,i,...,m), то координаты точек и образуют искомые матрицы координат, в которых каждая строка отражает очередное положение образующей, а каждый столбец - все положения одной точки образующей при ее движении по направляющей.

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

Образующая и направляющая линии для поверхности

Рис. 25. Образующая и направляющая линии для поверхности

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

Транспонирование матрицы

(198)

Получение матрицы с одинаковыми строками

Получение матрицы с одинаковыми столбцами

(200)

У1

У1

Ух ?

••

Уг

*111

1

1 II-

У1

У1 ?

•• Уг

II1!

12 ?

•• mi-

Ут

Ут

Ут ?

- Ут

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

(201)

Использование поэлементной операции умножения матриц. В поэлементном варианте операции производятся не с матрицами в целом, а с соответствующими элементами. В Matlab перед знаком поэлементной операции ставится точка

(•*

./ .Л

.+ .-).

У1

Jl Х1 *1 Х I У1,1**1,1 У1**2 - Ух*Хп

Уг

У2

У2 * Х1 Х1 Х У2**1 У2*Х2 - У2*Хп

Ут

Ут

Ут Х1 Хт,2 Хт,п Ут*Х1 У т* Х2 - Ут * ХП (202)

Единичная матрица Е, такого же размера, как образцовая X: Е = ones(size(X))

Нулевая матрица О, такого же размера, как образцовая X: О = zeros(size(X))

Приведем примеры вычисления координат матриц для плоскости, цилиндра, сферы, конуса, диска:

"/«ПЛОСКОСТЬ Z=const

х=-40:10:40; %сетка по X; образующая

у=-20:5:20; %сетка по Y; направляющая

z=-50; "/«высота над плоскостью XY

X=ones(size(y))'*x; "/«одинаковые строки

Y=y'*ones(size(x)); "/«одинаковые столбцы

Z=z*ones(size(X)); "/«матрица высот

"/«ДИСК

х=10:2:30; "/«Образующая прямая,

z=0*ones(size(x1)); "/«лежащая в плоскости Z=0.

fi=(0:10:360)*pi/180; "/«направляющий угол

X=cos(fi)'*x;

Y=sin(fi)'*x;

Z=ones(size(fi))'*z;

%ЦИЛИНДР

v=(0:15:360)*pi/180; "/«образующий угол

г=6; %радиус цилиндра

h=-10:2:-6; "/«направляющая прямая

x=r*cos(v);

y=r*sin(v);

X=ones(size(h))'*x;

Y=ones(size(h))'*y;

Z=h'*ones(size(v));

"/«КОНУС x=0:l:5; "/«образующая прямая Z=2*X z=2*x; % в плоскости XOZ

fi=(0:10:360)*pi/180; “/«направляющий угол поворота вокруг оси Z

X=cos(fi)'*x;

Y=sin(fi)'*x;

Z=ones(size(fi))'*z;

%СФЕРА

г =3;%радиус сферы

f =(0:10:360)*pi/l 80; %угол образующей окружности

v =(0:10:180)*pi/180; “/«угол направляющей полуокружности (поворот вокруг Z)

F =ones(size(v))' * f; “/«одинаковые строки. Умножение матриц

V =v*ones(size(f)); “/«одинаковые столбцы. Умножение матриц

Z =r*sin(F); “/«поэлементное умножение

X =r*cos(F) .* cos(V); “/«поэлементное умножение

Y =r*cos(F) .* sin(V); % поэлементное умножение

% ТОР

г=10; “/«Малый радиус тора

R=30; “/«Большой радиус тора

v=(0:10:360)*pi/180; %Образующий угол сечения тора по малой окружности

fi=(0:10:360)*pi/180; “/«Направляющий угол тора по большой окружности

x=r*cos(v)-R;

z=r*sin(v);

X=cos(fi)'*x;

Y=sin(fi)'*x;

Z=ones(size(fi))'*z;

ВИЗУАЛИЗАЦИЯ.

Визуализация поверхности производится оператором surf

S=surf(X,Y,Z,... "/«Матрицы, описывающие поверхность

'FaceColor'/r',... %Цвет поверхности

'EdgeColor','none'); %Цвет сетки на поверхности (попе - нет сетки)

"/«задание прозрачности поверхности S: 0-прозрачна,1 - непрозрачна

alpha(S,0.9);

Для получения фотореалистического изображения необходимо осветить поверхность и убрать огранку:

camlight; "/«Подсветка от камеры

lighting gouraud; %Убрать огранку

Используя эти средства мы можем представить поверхности в программной среде так, как показано на рис. 26:

Типы поверхностей, представленные в программной среде Matlab

Рис. 26. Типы поверхностей, представленные в программной среде Matlab

Перемещение геометрических объектов в пространстве.

При создании модели объекта, имеющего несколько поверхностей, эти поверхности должны быть не только созданы, но еще и правильно размещены друг относительно друга.

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

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

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

Для того, чтобы сдвинуть графический объект вдоль координатной оси, необходимо к соответствующей координате всех точек прибавить величину смещения, т.е. сложить соответствующую матрицу с величиной смещения. Например, если мы хотим перевести объект, из положения описываемого матрицами Xo,Yo, Zo в положение, описываемого матрицами X1,Y1,Z1, путем смещения его вдоль координатных осей х,у,х на величины соответственно dx,dy,dz, то вторые матрицы вычисляются по формулам

Xl=Xo+dx Yl=Yo+dy Zl=Zo+dz (203)

Пример смещения плоскости в синтаксисе Matlab

"/«Координаты плоскости в исходном положении

Хо=[1 2 3

  • 123
  • 12 3]

Yo=[l 1 1

  • 222
  • 3 3 3]

Zo=[0 0 0

ООО]

ООО]

"/«Смешения плоскости вдоль осей

dx=-5; "/«смещение по оси X

dy= 6; %смещение по оси Y

dz= 4; “/«смещение по оси Z

%Координаты точек плоскости в смещенном положении

XI = Хо + dx;

Yl = Yo + dy;

Z1 = Zo + dz;

Обратим внимание, что изменение последовательности смещений не окажет влияния на конечное положение объекта.

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

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

Здесь:

X,Y,Z - матрицы координат точек объекта в исходном состоянии,

Xx,Yx,Zx - координаты этих же точек после поворота вокруг оси X,

Xy,Yy,Zy - координаты этих же точек после поворота вокруг оси Y,

Xz,Yz,Zz - координаты этих же точек после поворота вокруг оси X,

В синтаксисе MATLAB формулы для вычисления новых координат представляются как:

%поворот объекта вокруг оси X на угол vx Хх=Х;

Yx=Y*cos(vx) - Z*sin(vx);

Zx=Y*sin(vx) + Z*cos(vx);

“/«поворот объекта вокруг оси Y на угол vy Zy=Z*cos(vy) - X*sin(vy);

Xy=Z*sin(vy) + X*cos(vy);

Yy=Y;

“/«поворот вокруг оси Z на угол vz

Xz=X*cos(vz) - Y*sin(vz);

Yz=X*sin(vz) + Y*cos(vz);

Zz=Z;

Эти формулы применимы как к отдельной точке (в этом случае X,Y,Z -скаляры), так и к линии (в этом случае X,Y,Z - матрицы-строки) и поверхности (в этом случае X,Y,Z - прямоугольные матрицы).

Обратим внимание, что в отличии от смещения вдоль осей, последовательность поворотов оказывает влияние на конечное положение объекта!

Анимация изменения формы объектов и их движения в пространстве

В технике при моделировании сложного совместного движения деталей машин и механизмов высокоэффективным способом визуализации результатов моделирования является анимация (оживление, мультипликация)

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

В технической анимации механического движения ставятся задачи:

  • • отразить изменение формы объекта
  • • отразить изменение положения объекта
  • • отобразить траектории движения отдельных точек объекта

Анимация в Matlab представляет собой последовательность кадров, каждый из которых отражает форму и положение объекта в определенный момент времени.

Каждый кадр формируется программой, записывается в управляющую матрицу и затем весь фильм воспроизводится. Для этого Matlab предоставляет несколько весьма удобных в использовании функций.

Поскольку форма и положение геометрических объектов представлено матрицами координат, для анимации необходимо

  • • указать зависимости изменения координат от времени X=X(t), Y=Y(t), Z=Z(t).
  • • указать количество кадров анимации
  • • установить начальное, конечное время анимации и покадровый временной шаг, связав эти параметры с текущим номером кадра фильма.
  • • организовать цикл, в котором будет:

о формироваться очередные форма и положение объектов

о стираться с экрана предыдущий кадр и выводиться на экран очередной кадр

о запоминаться в управляющей матрице текущее изображение экрана

о = воспроизвести сформированный анимационный фильм

В синтаксисе Matlab представим фрагменты программы, обеспечивающие создание анимационного фильма:

"/«ЗАДАНИЕ ФУНКЦИИ АНИМАЦИИ

plays=|'movie(M_film,2);']; "/«Проиграть 2 раза фильм

"/«Задание параметров анимации и начальная подготовка управляющей матрицы

n_film=10; %Количество кадров в фильме

clear Mfilm; "/«Стереть матрицу анимации

M_film=moviein(n_film); "/«Создать шаблон матрицы анимации

Другие операторы figure(l) ’/©открытие графического окна for k_film=l:l:n_film; “/©Цикл создания n-кадрового фильма

’/©вычисление текущего параметра анимации - времени t=k_film*2*pi/n_film;

’/©вычисление текущих координат графических объектов X=X(t); Y=Y(t); Z=Z(t);

cla %Стереть предыдущий кадр

’/©рисовать графические объекты surf(X,Y,Z)

’/©запись очередного кадра в матрицу анимации

M_film( :,k_film)=getframe;

end ’/©конец цикла формирования фильма

’/©ФУНКЦИЯ УПРАВЛЕНИЯ АНИМАЦИЕЙ ПУТЕМ НАЖАТИЯ ЭКРАННОЙ КНОПКИ

pl=uicontrol('style','push',... %Стильэлемента - кнопка

'units','normal',... "/©единицы измерения - пиксели

'pos',[0.5,0.01,0.12,0.05],.."/©позиция 0.5 0.01 и размеры 0.12 0.05 кнопки

'string','Играть',... % Надпись на кнопке

'call',plays); ’/©При нажатии кнопки запустить функцию plays

Для более подробного изучения вопросов, связанных с геометрическим моделированием, воспользуйтесь демонстрационными программами:

Компьютерное моделирование - весьма эффективное средство решения дифференциальных уравнений, позволяющее получить их численное решение и наглядно его визуализировать. Система MATLAB позволяет достаточно легко создавать дискретные модели самых различных экологических процессов.

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ   След >