Многогранные закрашенные фигуры

Пример - Определение куба

Кубик задан восемью вершинами, которые образуют шесть сторон. Этот рисунок показывает координаты x -, y - и z вершин, определяющие кубик, в котором стороны являются одним модулем в длину.

Если вы задаете в качестве векторов аргументы x -, y - и z - координаты, они отображаются как один многоугольник с точками, соединенными последовательно. Если аргументы матрицы, MATLAB® рисует по одному многоугольнику на столбец, получая одну закрашенную фигуру с несколькими гранями. Эти грани не должны быть соединены и могут быть самопересекающимися.

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

Определение координат X, Y и Z

Каждая из шести граней имеет четыре вершины. Поскольку вам не нужно закрывать каждый многоугольник (т.е. первая и последняя вершины не должны быть одинаковыми), можно задать этот кубик с помощью матрицы 4 на 6 для каждой из координат x -, y - и z.

Каждый столбец матриц задает разную грань. Хотя вершин всего восемь, необходимо задать 24 вершины, чтобы задать все шесть граней. Поскольку каждая грань разделяет вершины с четырьмя другими гранями, можно более эффективно задать закрашенную фигуру, задав каждую вершину только один раз и затем задав порядок, в котором можно соединить эти вершины для формирования каждой грани. Область закрашенной фигуры Vertices и Faces свойства определяют закрашенные фигуры именно таким образом.

Определение граней и вершин

Эти матрицы задают кубик используя Vertices и Faces.

Использование метода вершин/граней может сэкономить значительное количество памяти компьютера, когда закрашенные фигуры содержат большое количество граней. Этот метод требует формального patch синтаксис функции, который влечет за собой присвоение значений Vertices и Faces свойства явно. Для примера,

patch('Vertices',vertex_matrix,'Faces',faces_matrix)

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

Цвет плоской грани

Цвет плоской грани является результатом определения одного цвета на грань. Для примера используйте метод вершин/граней и FaceVertexCData свойство для определения цвета, этот оператор задает один цвет на лицо и устанавливает FaceColor свойство к flat.

vert = [0 0 0;1 0 0;1 1 0;0 1 0;0 0 1;1 0 1;1 1 1;0 1 1];
fac = [1 2 6 5;2 3 7 6;3 4 8 7;4 1 5 8;1 2 3 4;5 6 7 8];
patch('Vertices',vert,'Faces',fac,...
      'FaceVertexCData',hsv(6),'FaceColor','flat')

Отрегулируйте оси:

view(3)
axis vis3d

Потому что truecolor задан как FaceVertexCData свойство имеет тот же формат, что и палитра MATLAB (т.е. массив значений RGB n на 3), этот пример использует hsv палитра, чтобы сгенерировать шесть цветов, необходимых для плоского затенения.

Чтобы сопоставить цвета граней с текущей палитрой, присвойте массив n на 1 FaceVertexCData свойство:

patch('Vertices',vert,'Faces',fac,...
      'FaceVertexCData',(1:6)','FaceColor','flat')

Отрегулируйте оси:

view(3)
axis vis3d

Интерполированный цвет лица

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

patch('Vertices',vert,'Faces',fac,...
      'FaceVertexCData',hsv(8),'FaceColor','interp')

Отрегулируйте оси:

view(3)
axis vis3d

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

Чтобы определить ту же окраску, используя x, y, z, c метод, c должен быть массивом m на n на 3, где размерности x, y, и z составляют m на n.

Эта схема показывает соответствие между FaceVertexCData и CData свойства.

Как Закрашенная фигура Данных относится к Палитре обсуждает раскраски методов более подробно.