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

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

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

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

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

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

Создайте основные формы

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

Круг

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

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

СтрокаЗначение
12 (указывает на многоугольник),
2Количество линейных сегментов n
3 через 3+n-1x- начальных точек ребра
3+n через 2*n+2y- начальных точек ребра

Примечание

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

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

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

Кодирование прямоугольника совпадает с кодированием многоугольника, за исключением того, что первой строкой является 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

Удалите контуры поверхности.

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

Анализируемая структура данных геометрии

Анализируемая матрица геометрии имеет следующее кодирование. Каждый столбец матрицы соответствует одному граничному сегменту. Любые 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 и первой полуосью