Кубик задан восемью вершинами, которые образуют шесть сторон. Этот рисунок показывает координаты x -, y - и z вершин, определяющие кубик, в котором стороны являются одним модулем в длину.
Если вы задаете в качестве векторов аргументы x -, y - и z - координаты, они отображаются как один многоугольник с точками, соединенными последовательно. Если аргументы матрицы, MATLAB® рисует по одному многоугольнику на столбец, получая одну закрашенную фигуру с несколькими гранями. Эти грани не должны быть соединены и могут быть самопересекающимися.
Кроме того, можно задать координаты каждой уникальной вершины и порядок их соединения для формирования граней. Примеры в этом разделе иллюстрируют оба методов.
Каждая из шести граней имеет четыре вершины. Поскольку вам не нужно закрывать каждый многоугольник (т.е. первая и последняя вершины не должны быть одинаковыми), можно задать этот кубик с помощью матрицы 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
свойства.
Как Закрашенная фигура Данных относится к Палитре обсуждает раскраски методов более подробно.