这是我在毕设期间做的关于魔方机械手的一部分东西,属于matlab对于颜色识别部分,这里是对魔方惊醒了建模。大家在matlab里就可以实现。希望对大家有帮助
MATLAB源程序:
- clc;clear;
- close all;
- x=[-0.5 +0.5 +0.5 -0.5 -0.5 -0.5;
- +0.5 +0.5 -0.5 -0.5 +0.5 +0.5;
- +0.5 +0.5 -0.5 -0.5 +0.5 +0.5;
- -0.5 +0.5 +0.5 -0.5 -0.5 -0.5];
- y=[-0.5 -0.5 +0.5 -0.5 -0.5 -0.5;
- -0.5 +0.5 +0.5 +0.5 -0.5 -0.5;
- -0.5 +0.5 +0.5 +0.5 +0.5 +0.5;
- -0.5 -0.5 +0.5 -0.5 +0.5 +0.5];
- z=[0 0 0 0 0 1;
- 0 0 0 0 0 1;
- 1 1 1 1 0 1;
- 1 1 1 1 0 1];
- Orgcell1=[1 0 1 0 1 1];
- Orgcell2=[0 0 0.46 1 1 1];
- Orgcell3=[0 1 0 0 0 1];
- Org1(:,1)=Orgcell1;
- Org2(:,1)=Orgcell2;
- Org3(:,1)=Orgcell3;
- x1=ones(size(x))+x;
- y1=ones(size(x))+y;
- x2=-1*ones(size(x))+x;
- y2=-1*ones(size(x))+y;
- z1=ones(size(z))+z;
- z2=-1*ones(size(z))+z;
- Org(1,:,:)=[Org1 Org2 Org3 ];
- Org(2,:,:)=[Org1 Org2 Org3 ];
- Org(3,:,:)=[Org1 Org2 Org3 ];
- Org(4,:,:)=[Org1 Org2 Org3 ];
-
- h.h0=patch(x2,y1,z, Org);
- axis equal tight
- axis([-4 4 -4 4 -4 4]);
- hold on;
- h.h1=patch(x,y1,z, Org);
- h.h2=patch(x1,y1,z, Org);
- h.h3=patch(x2,y,z, Org);
- h.h4=patch(x,y,z, Org);
- h.h5=patch(x1,y,z, Org);
- h.h6=patch(x2,y2,z, Org);
- h.h7=patch(x,y2,z, Org);
- h.h8=patch(x1,y2,z, Org);
- h.h10=patch(x2,y1,z1, Org);
- h.h11=patch(x,y1,z1, Org);
- h.h12=patch(x1,y1,z1, Org);
- h.h13=patch(x2,y,z1, Org);
- h.h14=patch(x,y,z1, Org);
- h.h15=patch(x1,y,z1, Org);
- h.h16=patch(x2,y2,z1, Org);
- h.h17=patch(x,y2,z1, Org);
- h.h18=patch(x1,y2,z1, Org);
- h.h20=patch(x2,y1,z2, Org);
- h.h21=patch(x,y1,z2, Org);
- h.h22=patch(x1,y1,z2, Org);
- h.h23=patch(x2,y,z2, Org);
- h.h24=patch(x,y,z2, Org);
- h.h25=patch(x1,y,z2, Org);
- h.h26=patch(x2,y2,z2, Org);
- h.h27=patch(x,y2,z2, Org);
- h.h28=patch(x1,y2,z2, Org);
- hold off;
- title('Rubic Cube');
- xlabel('Variable X');
- ylabel('Variable Y');
- zlabel('Variable Z');
- grid on;
- %view(0,0);
- origin=[0 0 0.5];
- direct1=[0 1 0];
- direct2=[0 0 1];
- direct3=[0 0 1];
- direct4=[1 0 0];
- direct5=[1 0 0];
- direct6=[0 1 0];
- direct=[direct1;direct2;direct3;direct4;direct5;direct6];
- theta1=45;
- theta2=45;
- theta3=-45;
- theta4=-45;
- theta5=45;
- theta6=-45;
- theta=2*[theta1,theta2,theta3,theta4,theta5,theta6];
- H.H1=[h.h6 h.h7 h.h8; %H1为红色面
- h.h16 h.h17 h.h18;
- h.h26 h.h27 h.h28];
- H.H2=[h.h20 h.h21 h.h22; %H2为黄色面
- h.h23 h.h24 h.h25;
- h.h26 h.h27 h.h28];
- H.H3=[h.h10 h.h11 h.h12; %H3为白色面
- h.h13 h.h14 h.h15;
- h.h16 h.h17 h.h18];
- H.H4=[h.h2 h.h5 h.h8; %H4为蓝色面
- h.h12 h.h15 h.h18;
- h.h22 h.h25 h.h28];
- H.H5=[h.h0 h.h3 h.h6; %H5为绿色面
- h.h10 h.h13 h.h16;
- h.h20 h.h23 h.h26];
- H.H6=[h.h0 h.h1 h.h2; %H6为橙色面
- h.h10 h.h11 h.h12;
- h.h20 h.h21 h.h22];
- for i=0:23
- [H,h]=CubicRotate(H,h,direct,theta,origin,mod(i,6)+1);
- end
- function [H,h]=CubicRotate(H,h,direct,theta,origin,surface)
- switch surface
- case 1
- Handle=H.H1;
- case 2
- Handle=H.H2;
- case 3
- Handle=H.H3;
- case 4
- Handle=H.H4;
- case 5
- Handle=H.H5;
- case 6
- Handle=H.H6;
- end
- for i=1:10
- rotate(Handle,direct(surface,:),theta(surface)/10,origin);
- pause(0.01);
- end
- [H,h]=RotateConvert(H,h,surface);
复制代码
全部资料51hei下载地址:
MATLAB对三阶魔方建模并进行旋转操作.zip
(1.13 KB, 下载次数: 47)
|