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

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

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

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

  2. Матрица, столбцы которой содержат имена для основных форм. Дополните столбцы нулями или 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

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 является наружной меткой)
8x координата центра окружности0x координату центра эллипса
9y координата центра окружности0y координату центра эллипса
10Радиус0Длина первой полуоси
1100Длина второй полуоси
1200Угол в радианах между осью x и первой полуосью