exponenta event banner

2-D Создание геометрии в командной строке

Три элемента геометрии

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

  1. Матрица, столбцы которой описывают основные фигуры. При экспорте геометрии из приложения PDE Modeler эта матрица имеет имя по умолчанию gd (описание геометрии). См. раздел Создание основных фигур.

  2. Матрица, столбцы которой содержат имена основных фигур. Поместите столбцы с нулями или 32 (пробелы) так, чтобы каждый столбец имел одинаковую длину. См. раздел Создание имен для основных фигур.

  3. Набор символов, описывающих соединения, пересечения и заданные различия базовых форм, образующих геометрию. См. раздел Задание формулы.

Создание основных фигур

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

Круг

РядСтоимость
11 (обозначает круг)
2x-координата центра окружности
3координата y центра окружности
4Радиус (строго положительный)

Многоугольник

РядСтоимость
12 (указывает многоугольник)
2Количество отрезков n
3 через 3+n-1координата X начальных точек кромки
3+n через 2*n+2координата y начальных точек кромки

Примечание

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

Прямоугольник

РядСтоимость
13 (обозначает прямоугольник)
24 (количество отрезков)
3 через 6координата X начальных точек кромки
7 через 10координата y начальных точек кромки

Кодировка прямоугольника аналогична кодировке многоугольника, за исключением того, что первая строка 3 вместо 2.

Эллипс

РядСтоимость
14 (обозначает эллипс)
2x-координата центра эллипса
3y-координата центра эллипса
4Длина первой полуоси (строго положительная)
5Длина второй полуоси (строго положительная)
6Угол в радианах от оси x до первой полуоси

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

rect1 = [3
    4
    -1
    1
    1
    -1
    0
    0
    -0.5
    -0.5];
C1 = [1
    1
    -0.25
    0.25];
C2 = [1
    -1
    -0.25
    0.25];

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

C1 = [C1;zeros(length(rect1) - length(C1),1)];
C2 = [C2;zeros(length(rect1) - length(C2),1)];

Объединение фигур в одну матрицу.

gd = [rect1,C1,C2];

Создание имен для основных фигур

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

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

ns = char('rect1','C1','C2');
ns = ns';

Задать формулу

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

Продолжая пример, задайте объединение прямоугольника и C1и вычесть C2.

sf = '(rect1+C1)-C2';

Создание геометрии и удаление границ граней

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

[dl,bt] = decsg(gd,sf,ns);

Просмотр геометрии с удалением границ и без него.

pdegplot(dl,'EdgeLabels','on','FaceLabels','on')
xlim([-1.5,1.5])
axis equal

Figure contains an axes. The axes contains 13 objects of type line, text.

Удалите границы граней.

[dl2,bt2] = csgdel(dl,bt); % removes face boundaries
figure
pdegplot(dl2,'EdgeLabels','on','FaceLabels','on')
xlim([-1.5,1.5])
axis equal

Figure contains an axes. The axes contains 8 objects of type line, text.

Структура данных разложенной геометрии

Разложенная геометрическая матрица имеет следующее кодирование. Каждый столбец матрицы соответствует одному граничному сегменту. Любая запись 0 означает, что кодирование для этой строки не требуется. Так, например, если в матрице появляются только отрезки линии, то матрица имеет 7 строк. Но если есть и круговой сегмент, то матрица имеет 10 строк. Дополнительные три строки столбцов строки заполняются 0.

РядКругЛинияЭллипс
1124
2Начальная координата xНачальная координата xНачальная координата x
3Окончание координаты xОкончание координаты xОкончание координаты x
4Начало координат yНачало координат yНачало координат y
5Окончание координаты yОкончание координаты yОкончание координаты y
6Метка области слева от сегмента с направлением, наведенным начальной и конечной точками (0 - внешняя метка)Метка области слева от сегмента с направлением, наведенным начальной и конечной точками (0 - внешняя метка)Метка области слева от сегмента с направлением, наведенным начальной и конечной точками (0 - внешняя метка)
7Метка области справа от сегмента с направлением, наведенным начальной и конечной точками (0 - внешняя метка)Метка области справа от сегмента с направлением, наведенным начальной и конечной точками (0 - внешняя метка)Метка области справа от сегмента с направлением, наведенным начальной и конечной точками (0 - внешняя метка)
8координата x центра окружности0координата x центра эллипса
9координата y центра окружности0координата y центра эллипса
10Радиус0Длина первой полуоси
1100Длина второй полуоси
1200Угол в радианах между осью x и первой полуосью