Как сделать кубик Рубика в 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]), но это не работает

Можно ли задать отдельный цвет для каждой грани при использовании plot:Box или есть лучший способ сделать это?


person Kenneth Joseph Paul    schedule 03.08.2014    source источник


Ответы (1)


Мне удалось решить проблему с помощью самого патча. Существует свойство, известное как FaceVertexCData для patch. Благодаря этому мы сможем указать цвет для каждой грани. Мы также должны сделать Facecolor плоским, как показано ниже.

cube = patch('Faces',fac,'Vertices',vertice,'FaceVertexCData',color,'FaceColor','flat');  % patch function

В приведенном выше примере цвет представляет собой матрицу 6*3, в которой каждая строка имеет значение RGB требуемого цвета. Цвет в каждой строке применяется к граням в том порядке, в котором он был определен.

person Kenneth Joseph Paul    schedule 03.08.2014