MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем

Femlab

Femlab 2.3. Руководство пользователя (перевод с английского с редакторской правкой В.Е.Шмелева):
1.7. Построение геометрии

В оглавление книги \ К следующему разделу \ К предыдущему разделу

1.7.1. Построение геометрии в двумерной расчётной области

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

Графический интерфейс автоматически назначает каждому геометрическому объекту уникальное имя. Автоматически назначаемые имена для кругов C1, C2, C3, ..., для прямоугольников - R1, R2, R3 ..., для эллипсов - E1, E2, E3 ..., для квадратов - SQ1, SQ2, SQ3 ..., для композиционных (составных) объектов - CO1, CO2, CO3 ..., для кривых Безье - B1, B2, B3 и т.д.

Метки с именами появляются прямо на создаваемых геометрических объектах. В режиме Draw Mode двойной щелчок мышью по объекту приводит к развёртыванию диалогового окна редактирования его свойств (имени, координат характерных точек и др.). Уникальное имя геометрического объекта не должно содержать пробелов. Пример недорисованной гео-метрии показан на рис. 1.101.

Рис. 1.101. Геометрия в процессе прорисовки

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

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

Создание солидных объектов

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

Пусть прикладной режим femlab уже выбран Навигатором моделей. Тогда для создания квадрата нажмём кнопку инструментальной панели рисования. Поместим указатель мы-ши в точку с координатами (-1, 1) и при нажатой левой кнопке переместим его в точку (1, -1). В результате будет нарисован квадрат с центром в точке (0, 0), длиной стороны, равной 2, причём стороны параллельны координатным осям.

Теперь нажмём кнопку этой же панели. Эта кнопка предназначена для создания центрированного эллипса или круга. Поместим указатель мыши в центр с координатами (0, 0). Удерживая клавишу Ctrl и левую кнопку, будем перемещать указатель мыши от центра до тех пор, пока радиус рисуемого круга не станет равным 0.5. Отпускание кнопки мыши приведёт к созданию круга с центром в точке (0, 0) и радиусом 0.5.

Командой меню Edit/ Select All выделим созданные геометрические объекты. После это-го можно нажать кнопку . В результате будет создан композиционный объект, показан-ный на рис. 1.102.

Рис. 1.102. Композиционный объект, представляющий собой разность примитивных объектов

Создать объект, изображённый на рис. 1.102, можно также и другим способом. Можно нажать на кнопку . Нажатие на неё приведёт к развёртыванию диалогового окна, пока-занного на рис. 1.103. Аналогичное действие происходит по команде меню Draw/ Create Composite Object.

Рис. 1.103. Диалоговое окно создания составного объекта
Рис. 1.104. Композиционный объект, сконструированный из двух составных объектов

В диалоговом окне, показанном на рис. 1.103, есть строка редактирования Set formula. Если в этой строке знак "+" заменить на знак "-" и нажать кнопку OK, то будет создан со-ставной объект, показанный на рис. 1.102.

Теперь скопируем в буфер объект, изображённый на рис. 1.102, нажав клавишу Ctrl-C. Вставим из буфера копию этого объекта, нажав клавишу Ctrl-V. Он вставится с некоторым смещением. Выделим исходный объект, щёлкнув по нему мышью. Нажмём кнопку инструментальной панели рисования, в результате развернётся диалоговое окно, показанное на рис. 1.105.

Рис. 1.105. Диалоговое окно поворота геометрических объектов

В строку редактирования Rotation (degrees) впишем число 45 и нажмём кнопку OK. Исходный составной объект повернётся на 45 градусов против часовой стрелки. Теперь копию объекта подвинем мышью так, чтобы центр его переместился в начало координат (0, 0). Нажатие кнопки инструментальной панели рисования приведёт к созданию композиционного объекта, изображённого на рис. 1.104.

Рис. 1.106. Композиционный объект, содержащий две подобласти

Теперь кратко рассмотрим технологию добавления подобластей к объектам. Пусть имеется геометрический объект, изображённый на рис. 1.104. Пусть с правой стороны нужно добавить к нему эллипс с центром (1, 0), большой полуосью 0.5, малой полуосью 0.25. Если нужно нарисовать эллипс точно в режиме SNAP, то надо сначала установить параметры координатной сетки. Выполним команду меню Options/ Axes/Grid Settings. Установим пределы по x от -1.2 до 1.5651013, пределы по y от -1.2 до 1.2, не отменяя флажок Axes equal; далее в закладке Grid сбросим флажок Auto, установим шаг по x, равный 0.5 и шаг по y, равный 0.2; в строку редактирования Extra Y впишем "-0.25 0.25"; нажмём кнопку OK. Теперь нужные параметры координатной сетки установлены, и можно рисовать эллипс. Нажимаем кнопку инструментальной панели рисования, устанавливаем указатель мыши в центр (1, 0), при нажатой левой кнопке перемещаем указатель мыши от центра до тех пор, пока не нарисуется требуемый эллипс. Выделим все геометрические объекты и нажмём кнопку инструментальной панели рисования. Развернётся диалоговое окно, аналогичное изображённому на рис. 1.103. Вводим формулу CO1+E1 и устанавливаем флажок Keep internal borders, жмём OK. В результате будет создан композиционный объект, изображённый на рис. 1.106. Этот объект состоит из двух подобластей. В данном случае это означает, что если перейти в режим Subdomain Mode, то мы отчетливо увидим две зоны в расчётной области.

Использование языка программирования

Создание примитивных и композиционных геометрических объектов возможно непосредственно в среде MATLAB, используя функции пакета FEMLAB. Следующие примеры показывают, как создавать составные объекты, начиная с примитивных, используя язык программирования MATLAB. В среде MATLAB повторим операции, проведённые в GUI femlab. Использование языка программирования для создания геометрических объектов весьма полезно, когда требуется быстро и точно задать координаты характерных точек объектов. Созданные в рабочей области MATLAB объекты легко вставляются в GUI femlab для дальнейшего моделирования.

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

R1=rect2(-1,1,-1,1); % Создаём объект-прямоугольник
geomplot(R1) % Графически отображаем созданный объект в обычной фигуре
axis equal
C1=circ2(0,0,0.5); % Создаём объект-круг
CO1=R1-C1; % Создаём композиционный объект; знак минус - вычитание множеств
geomplot(CO1)
axis equal; grid on

Возможен другой способ создания композиционного объекта:

CO1=geomcomp({R1,C1},'ns',{'R1','C1'},'sf','R1-C1');

Общий вид фигуры, полученной в результате выполнения этих операторов, показан на рис. 1.107.

Рис. 1.107. Отображение геометрического объекта в обычной фигуре MATLAB

Далее выполним следующую последовательность операторов MATLAB:

CO2=rotate(CO1,pi/4,0,0); % Объект CO1 повернули на 45 градусов и присвоили CO2
CO1=CO1*CO2; % Пересечение объектов
geomplot(CO1)
axis equal; grid on

Общий вид фигуры, полученной в результате выполнения этих операторов, показан на рис. 1.108.

Рис. 1.108. Композиционный объект, сконструированный из двух составных объектов

Теперь добавим к полученному объекту эллипс (такой же, как на рис. 1.104) и изобразим то, что получится. Для этого выполним следующую последовательность команд MATLAB, в результате чего в фигуре MATLAB получим изображение созданного объекта (рис. 1.109):

e1=ellip2(1,0,0.5,0.25); % Эллипс с центром в точке (1,0) и полуосями 0.5 и 0,25
CO1=CO1+e1; % Операция объединения сохраняет внутренние границы
geomplot(CO1)
axis equal
grid on

Рис. 1.109. Объект, полученный в результате прямого применения функций FEMLAB

Геометрические объекты можно перемещать и поворачивать, создавая тем самым новые объекты (рис. 1.110):

geomplot(CO1+move(rotate(CO1,-pi/4),sqrt(2),sqrt(2)))
axis equal
grid on

Здесь move - функция перемещения (параллельного переноса) объекта: первый параметр - перемещаемый объект, второй и третий - x и y компоненты вектора переноса; rotate - функция поворота объекта относительно некоторого центра: первый параметр - поворачиваемый объект, второй - угол поворота в радианах, отсчитываемый против часовой стрелки.

Рис. 1.110. Поворот, перемещение и объединение объектов функциями FEMLAB

Редактирование объектов средствами GUI

В среде GUI femlab можно перемещать объекты, перемещая указатель мыши на объекте и одновременно удерживая левую кнопку мыши. Можно также изменять внутренние свойства объектов, выполняя команду Draw/ Object Properties или делая двойной щелчок левой кнопкой мыши по объекту. В результате такого щелчка разворачивается диалоговое окно редактирования свойств объекта. Пример такого окна для объекта прямоугольника показан на рис. 1.111.

Рис. 1.111. Диалоговое окно редактирования свойств прямоугольника

прямоугольника Для разных типов геометрических объектов диалоговое окно редактирования их свойств имеет различный вид. Различие этих окон объясняется различием параметров, определяющих геометрические объекты разных типов. Так, для прямоугольника это минимальные и максимальные значения координат x и y, угол поворота и базовая точка (начальная вершина или центр). Для эллипса это координаты центра, полуоси, угол поворота и базовая точка. Для примитивных геометрических объектов набор параметров в точности совпадает с набором входных параметров соответствующей функции пакета FEMLAB. В составных объектах доступны для редактирования граничные кривые, возможно также перемещение границ. В любом случае можно редактировать имена (метки) объектов (строка редактирования Name).

Существует также другой способ редактирования примитивных и составных объектов. Этот способ заключается в перетаскивании вершин мышью. Указатель мыши совмещается с вершиной, нажимается левая кнопка, указатель перемещается при нажатой кнопке, вместе с ним будет перемещаться и вершина. Изменение топологии редактируемого объекта при перемещении вершины порождает предупреждающее сообщение. Такими изменениями могут быть, например, появление новых точек пересечения границ или разделение солидного объекта.

Любая операция, создающая композиционный объект, по умолчанию приводит к сохранению внутренних границ. Эти границы разделяют составной объект на подобласти. Если в результирующем объекте не нужно сохранять внутренние границы, то в диалоговом окне создания композиционного объекта (рис. 1.103) надо сбросить флажок Keep internal borders.

Пусть солидный составной объект выделен. Тогда нажатие кнопки инструментальной панели прорисовки геометрии или подача команды меню Draw/ Split Object приведёт к разделению композиционного объекта на подобласти. Каждая подобласть станет отдельным геометрическим объектом. Вне GUI эту же операцию можно выполнить с помощью функции split пакета FEMLAB:

CO=split(CO1);

Здесь CO1 - композиционный объект (например, такой, как на рис. 1.109); CO - массив ячеек, состоящий из объектов, полученных из подобластей объекта CO1. Если CO1 - объект, изображённый на рис. 1.109, то массив ячеек CO будет состоять из трёх объектов. Для наглядности изобразим первый и третий из них в обычной фигуре MATLAB (рис. 1.112):

geomplot(CO{1}+CO{3})
axis equal
grid on

Рис. 1.112. Результат выделения подобластей в отдельные объекты

Граничная технология моделирования геометрии

В системе FEMLAB поддерживаются также криволинейные объекты, которые могут выполнять роль границ подобластей расчётной области. Поддерживаются следующие примитивы криволинейных объектов: линии, дуги (круговые и эллиптические), иначе называемые кривыми Безье второго порядка, а также кривые Безье третьего порядка. Составные криволинейные объекты формируются из совокупности примитивных объектов. В GUI femlab для создания таких составных объектов используется команда меню Draw/ Create Composite Object. Эта команда действует на совокупность выделенных объектов. Правила выделения изложены в описании графического интерфейса.

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

В строке показа дополнительных режимов включим переключатель SNAP (это делается двойным щелчком мыши, если переключатель был выключен). Командой Options/ Axes/Grid Settings установим шаг координатной сетки, равный 0.5 по осям x и y, сбросив в соответствующем диалоговом окне флажок Auto.

Рис. 1.113. Составной солидный объект, построенный граничным способом

Теперь можно начать рисовать. Для этого будем пользоваться кнопками инструментальной панели прорисовки геометрии. Нажмём кнопку . Указатель мыши поставим в точку с координатами (-0.5, -0.5). При нажатой лавой кнопке перемещаем указатель в точку (-1, 0.5) и отпускаем кнопку. Далее при нажатой левой кнопке указатель перемещаем в точку (-1, 0). Отпускание кнопки мыши приведёт к прорисовке дуги. Выполняем аналогичные манипуляции с точками (-1, 0), (-1, 0.5), (-0.5, 0.5). Нарисуется второй сегмент дуги. Теперь жмём кнопку , не отжимая (в противном случае нарисованная кривая замкнётся прямой и создастся солидный объект). При нажатой левой кнопке указатель переместим из точки (-0.5, 0.5) в точку (0.5, 0.5). При отпускании кнопки нарисуется отрезок прямой. Опять жмём , не отжимая . Выполняем описанные манипуляции с тройками точек (0.5, 0.5), (1, 0.5), (1, 0) и (1, 0), (1, -0.5), (0.5, -0.5). Нарисуется ещё два сегмента дуги. Снова жмём кнопку , не отжимая , и при нажатой кнопке перемещаем указатель в точку (-0.5, -0.5). Когда кривая замкнётся, можно отжимать кнопку . Отжатие кнопки инструментальной панели приведёт к созданию составного солидного объекта, изображённого на рис. 1.113.

В GUI femlab есть возможность преобразования солидных объектов в криволинейные. Такое преобразование осуществляется командой меню Draw/ Coerce Object(s) To/ Curve или кнопкой панели рисования. Разделение криволинейных объектов на подобласти осуществляется командой меню Draw/ Split Object или нажатием кнопки (так же, как и для солидных объектов). Возможно также преобразование криволинейных объектов в солидные. Такое преобразование осуществляется командой меню Draw/ Coerce Object(s) To/ Solid или кнопкой панели прорисовки геометрии.

Использование языка программирования

Теперь создадим геометрический объект, изображённый на рис. 1.113, в рабочей области MATLAB, используя функции пакета FEMLAB. Выполним следующую последовательность операторов MATLAB:

w = 1/sqrt(2);
c1 = curve2([-0.5 -1 -1],[-0.5 -0.5 0],[1 w 1]);
c2 = curve2([-1 -1 -0.5],[0 0.5 0.5],[1 w 1]);
c3 = curve2([-0.5 0.5],[0.5 0.5]);
c4 = curve2([0.5 1 1],[0.5 0.5 0],[1 w 1]);
c5 = curve2([1 1 0.5],[0 -0.5 -0.5],[1 w 1]);
c6 = curve2([0.5 -0.5],[-0.5 -0.5]);

Переменные c1, c2, c3, c4, c5, c6 являются объектами типа curve2. Матрица-строка [1 w 1] определяет веса для рациональной кривой Безье, которая является эквивалентной дуге, представляющей собой четверть окружности. GUI femlab автоматически корректирует веса вершин так, чтобы всегда прорисовывались дуги окружности или эллипса. В Справочном руководстве это описано более подробно.

Теперь создадим солидный объект типа solid2 из кривых c1, c2, c3, c4, c5:

s = geomcoerce('solid',{c1,c2,c3,c4,c5,c6});

для визуализации выполним операторы

geomplot(s)
axis equal
grid on

В результате получим картинку, изображённую на рис. 1.114.

Рис. 1.114. Солидный объект, полученный из криволинейных объектов

Чтобы из этих шести кривых создать композиционный криволинейный объект, можно воспользоваться функцией geomcomp:

c = geomcomp({c1,c2,c3,c4,c5,c6});

для визуализации выполним операторы

geomplot(s)
axis equal
grid on

В результате получим картинку, изображённую на рис. 1.115.

Рис. 1.115. Композиционный криволинейный объект

Некоторые особенности прорисовки криволинейных объектов различных типов

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

Дуги - кривые Безье второго порядка с весами, которые зависят от формы контрольной ломаной. В GUI femlab веса вершин автоматически подстраиваются под форму контрольной ломаной так, чтобы создавались круговые или эллиптические криволинейные сегменты. Для подробностей см. Руководство пользователя.

Для геометрического моделирования расчётной области в системе FEMLAB можно использовать рациональные кривые Безье. Кратко рассмотрим технологию создания таких криволинейных объектов в GUI femlab и вне GUI при использовании языка программирования.

Все кривые в системе FEMLAB представляются в рациональной форме Безье, т.к. эта форма обладает наибольшей общностью. Рациональные кривые Безье второго порядка могут представлять все различные типы сечений конуса, включая окружности, эллипсы, параболы, и гиперболы. FEMLAB непосредственно поддерживает также рациональные кривые Безье третьего порядка, чтобы помочь пользователям создавать кривые с точками перегиба (s-образные кривые).

Кривая Безье полностью определяется контрольными вершинами (иначе они называются характерными точками) и их весами. Рациональная кривая Безье n-го порядка полностью определена в терминах контрольной ломаной, состоящей из n+1 контрольных вершин и n+1 соответствующих им значений весовых коэффициентов. Конечные точки контрольной ломаной всегда принадлежат этой кривой. Изменение формы контрольной ломаной и положений её вершин приводит к изменению формы кривой. Чем больший вес имеет вершина, тем ближе к ней проходит кривая.

Это простое и интуитивно понятное взаимодействие между контрольными вершинами с их весами и кривой делает рациональное представление кривой Безье весьма полезным для моделирования. Рассмотрим некоторые простые примеры.

Рисование в GUI femlab

Пусть кривая Безье третьего порядка имеет следующие контрольные вершины: b0 = (-1, 0), b1 = (-0.5, 1), b2 = (0.5, -1), b3 = (1, 0). Пусть веса всех вершин равны единице. Чтобы нарисовать такую кривую, нужно нажать кнопку инструментальной панели рисования, поставить указатель мыши в точку b0, затем, удерживая левую кнопку, переместить указатель в точку b1, отпустить кнопку, и т.д., пока не дойдём до точки b3. В результате выполнения этих действий получится кривая, изображённая на рис. 1.116 (если переключатель SOLID в строке показа дополнительных режимов отключен). Контрольная ломаная видна только для выделенных криволинейных объектов. После прорисовки кривой кнопку нужно отжать.

Рис. 1.116. Кривая Безье третьего порядка, построенная в GUI femlab

Теперь переместим вершину b1 в точку с координатами (-0.5, 0.4). Это можно сделать двумя способами: перетаскиванием мышью и с помощью диалогового окна редактирования свойств объекта. Первый способ: ставим указатель мыши в вершину b1, при нажатой левой кнопке перемещаем указатель в точку (-0.5, 0.4). Вместе с указателем будет перемещаться и вершина. В результате кривая преобразуется к виду, показанному на рис. 1.117.

Рис. 1.117. Кривая с перемещённой контрольной вершиной

Теперь изменим вес вершины b2. Вес w2=1 заменим на w2=7. Сделаем двойной щелчок мышью по кривой B1 или по её метке. В результате развернётся диалоговое окно Object Properties. Откроем в этом окне закладку Weights. Выделим кривую 1 в списке Curve selection. В строку редактирования weight 3 введём число 7. Диалоговое окно примет вид, показанный на рис. 1.118. После нажатия кнопки OK и закрытия окна кривая примет вид, показанный на рис. 1.119.

Рис. 1.118. Диалоговое окно редактирования свойств кривой Безье третьего порядка
Рис. 1.119. Кривая с изменённым весом вершины № 3 (b2)

Использование языка программирования для создания кривых Безье

Для создания и отображения объекта, такого же, как на рис. 1.116, выполним следующую последовательность операторов MATLAB:

c=curve2([-1 -0.5 0.5 1],[0 1 -1 0],[1 1 1 1]);
geomplot(c,'ctrlmode','on')
axis equal; grid on

В фигуре MATLAB получится изображение созданного криволинейного объекта (рис. 1.120).

Рис. 1.120. Изображение кривой Безье в обычной фигуре MATLAB

Теперь подвинем вершину № 2 (b1) в точку (-0.5, 0.4):

c=change(c,2,-0.5,0.4);

или иначе

c=curve2([-1 -0.5 0.5 1],[0 0.4 -1 0]);

В результате переменной c будет присвоена кривая, изображённая на рис. 1.117.

Изменить веса контрольных вершин также можно функцией change пакета FEMLAB:

c=change(c,1,[1 1 7 1]);

В результате переменной c будет присвоена кривая, изображённая на рис. 1.119.

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

В оглавление книги \ К следующему разделу \ К предыдущему разделу


Поиск по сайту:

Система Orphus

Яндекс.Метрика