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- начальных точек ребра

Примечание

Ваш многоугольник не должен содержать самопересечения.

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

СтрокаЗначение
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 функция, чтобы создать массив. Эта функция заполняет строки по мере необходимости, таким образом, у всех есть та же длина. При продолжении примера дайте имена для трех форм.

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 object. The axes object contains 13 objects of type line, text.

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

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

Figure contains an axes object. The axes object 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 и первой полуосью