绘制头-躯干-腿-臂可以独立控制角度和姿态的代码,待下一步加入肢体联动功能。
r0=1; %% radius
h0=6; %% height自已调整高度
NN=25;
cla
[X,Y,Z]=cylinder(r0,NN);
Z=h0*Z;
XX=X(2,: );
YY=Y(2,: );
Z1=Z(1,: );
Z2=Z(2,: );
N=6; %自己修改数目
% rotate this cylinders by Euler angles (th1,th2,th3) 自己改倾斜角
TH1 = [0,0,0,0,0,90]/180 *pi;
TH2 = [150,-150,0,80,-80,30]/180 *pi;
TH3 = [0,0,0,0,0,0,0]/180 *pi;
%%% centers of the cylinders,自已修改柱中心坐标
%x=[-4*cos(TH2(2))-6*cos(TH2(1)),-4*cos(TH2(2)),4*cos(TH2(3))];
%y=[0,2,4];
%z=[-4*sin(TH2(2))-6*sin(TH2(1)),-4*sin(TH2(2)),4*sin(TH2(3))];
x=[0,0,0,0,0,0];
y=[-2,2,0,-2,2,0];
z=[-4,-4,-3,3,3,4];
hold off;
for k=1:N
th1=TH1(k);th2=TH2(k);th3=TH3(k);
R1=[cos(th1),-sin(th1),0;sin(th1),cos(th1),0;0,0,1];
R2=[1,0,0;0,cos(th2),-sin(th2);0,sin(th2),cos(th2)];
R3=[cos(th3),-sin(th3),0;sin(th3),cos(th3),0;0,0,1];
A=R1*R2*R3;
for i=1:NN+1
r=[X(1,i),Y(1,i),Z(1,i)]';
rT=A*r;
XC(1,i)=rT(1);YC(1,i)=rT(2);ZC(1,i)=rT(3);
r=[X(2,i),Y(2,i),Z(2,i)]';
rT=A*r;
XC(2,i)=rT(1);YC(2,i)=rT(2);ZC(2,i)=rT(3);
r=[XX(i),YY(i),Z1(i)]';
rT=A*r;
XX1C(i)=rT(1);YY1C(i)=rT(2);Z1C(i)=rT(3);
r=[XX(i),YY(i),Z2(i)]';
rT=A*r;
XX2C(i)=rT(1);YY2C(i)=rT(2);Z2C(i)=rT(3);
end
hold on;fill3(XX1C+x(k),YY1C+y(k),Z1C+z(k),[0.1 0.1 0.1+k/(5*N)],'EdgeColor','none');
hold on;fill3(XX2C+x(k),YY2C+y(k),Z2C+z(k),[0.1 0.1 0.1+k/(5*N)],'EdgeColor','none');
hold on;XC=XC+x(k);YC=YC+y(k);ZC=ZC+z(k);
surf(XC,YC,ZC,'FaceColor','green','EdgeColor','none');
end
grid on;
daspect([1 1 1])
view(3); axis equal
camlight
lighting gouraud
x1=xlabel('X'); %#x轴标题
x2=ylabel('Y'); %#y轴标题
x3=zlabel('Z'); %#z轴标题
set(x1,'Rotation',30); %#x轴名称旋转
set(x2,'Rotation',-30); %#y轴名称旋转