Делаем кубик Рубика в Matlab?
Я пытаюсь сделать 3d модель кубика Рубика.
Я изначально попробовал это с помощью команды patch
vert = [0 0 0; 0 1 0; 1 1 0; 1 0 0 ; ...
0 0 1;0 1 1; 1 1 1;1 0 1];
fac = [1 2 3 4; ...
2 6 7 3; ...
4 3 7 8; ...
1 5 8 4; ...
1 2 6 5; ...
5 6 7 8];
k = patch('Faces',fac,'Vertices',vert,'FaceColor','r'); % patch function
material shiny;
alpha('color');
alphamap('rampdown');
view(30,30);
Но так как мне может потребоваться придать разный цвет каждой поверхности, мне пришлось использовать команду patch несколько раз. Следовательно, я не смог сослаться на весь куб, когда хотел
Другой метод, который я нашел, использовал команду plot::Box
в MuPAD
plot(plot::Box(0..1, 0..1, 0..1, Filled = TRUE,
FillColor = RGB::Red),
plot::Box(1..2, 0..1, 0..1, Filled = TRUE,
FillColor = RGB::Red),
plot::Box(2..3, 0..1, 0..1, Filled = TRUE,
FillColor = RGB::Red),
plot::Box(0..1, 1..2, 0..1, Filled = TRUE,
FillColor = RGB::Red),
plot::Box(0..1, 2..3, 0..1, Filled = TRUE,
FillColor = RGB::Red),
plot::Box(2..3, 1..2, 0..1, Filled = TRUE,
FillColor = RGB::Red),
plot::Box(1..2, 2..3, 0..1,Filled = TRUE,
FillColor = RGB::Red),
plot::Box(2..3, 2..3, 0..1, Filled = TRUE,
FillColor = RGB::RED,),
Axes = None, Scaling = Constrained)
Но здесь я не могу придать отдельный цвет каждой поверхности. Я пытался с помощью FillColorDirection = [0, 0, 1])
Но это не работает
Можно ли дать отдельный цвет для каждого лица при использовании сюжета:Box или есть лучший способ сделать это?
1 ответ
Я смог решить проблему с помощью самого патча. Для патча есть свойство, известное как FaceVertexCData. Благодаря этому мы сможем указать цвет для каждого лица. Мы должны также Facecolor для плоских, как показано ниже
cube = patch('Faces',fac,'Vertices',vertice,'FaceVertexCData',color,'FaceColor','flat'); % patch function
В приведенном выше цвете матрица 6*3, в которой каждая строка имеет значение RGB требуемого цвета. Цвет в каждой строке применяется к граням в том порядке, в котором он был определен.