【手把手制作三阶魔方模拟器】用MATLAB绘制一个一阶魔方
by 今天不飞了
有一个酷爱魔方的朋友,托我给他定制一个专门用于“训练魔方观察和预判能力”的程序。听完需求之后觉得很有趣,就答应了,并决定把整个制作过程公开。
今天不飞了,一起写代码吧!
要完成整个任务我们需要三步:画一个魔方,让魔方动起来,设计训练功能。我们先来做第一步,要画出一个魔方,首先得会画立方体。
话不多说,直接上代码。
在三维空间绘制一个正方形
要画体,先画面。
% 定义图形的顶点顺序
F = [1,2,3,4];
% 定义图形的顶点坐标
V = [0,0,0; 1,0,0; 1,1,0; 0,1,0];
% 定义图形的颜色
C = [1,1,0];
% 定义图形的不透明度
A = 0.6
% 定义窗口
figure('Position',[900,100,600,700])
axis equal
axis([-1,1,-1,1,-1,1]*2)
grid on
view(1,1,1)
% 绘制
patch('Faces',F,'Vertices',V,'FaceColor',C,'FaceAlpha',A)
效果展示
在三维空间绘制一个正六面体
我们以正六面体中心为原点,边长为2,则如下图
六面编号与颜色如下图
准备完毕,直接上代码
% 六面顶点表
blockFace{1} = [ 1,-1,-1; 1, 1,-1;-1, 1,-1;-1,-1,-1];
blockFace{2} = [ 1,-1,-1; 1, 1,-1; 1, 1, 1; 1,-1, 1];
blockFace{3} = [ 1, 1,-1;-1, 1,-1;-1, 1, 1; 1, 1, 1];
blockFace{4} = [-1, 1,-1;-1,-1,-1;-1,-1, 1;-1, 1, 1];
blockFace{5} = [-1,-1,-1; 1,-1,-1; 1,-1, 1;-1,-1, 1];
blockFace{6} = [ 1,-1, 1; 1, 1, 1;-1, 1, 1;-1,-1, 1];
% 颜色表
color = {[1,1,1],[0,.2,.8],[.8,.0,0],[0,.8,.2],[1,.4,0],[1,1,0]};
% 透明度表
colorAlpha = [1,1,1,1,1,1]*0.8;
% 窗口设定
figure('Position',[900,100,600,700])
axis equal
axis([-1,1,-1,1,-1,1]*2)
grid on
view(1,1,1)
% 绘制
for n = 1:6
F = [1,2,3,4];
V = blockFace{n};
C = color{n};
A = colorAlpha(n);
patch('Faces',F,'Vertices',V,'FaceColor',C,'FaceAlpha',A)
end
效果展示(左:透明, 右:不透明)
其他
- 持续更新
- B站录播视频:【三阶魔方】手把手从零实现,魔方观察训练程序(一)我们来画个魔方