求matlab大神帮忙改下程序
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/08 18:33:00
求matlab大神帮忙改下程序
L=120; %长
D=50; %宽,圆桌面直径
d=2.5; %木板宽
hL=L/2; %半长
R=D/2; %圆桌面半径
y=-R+d/2:d:R-d/2; %长条宽度方向中心位置
x=sqrt(R^2-y.^2); %长条中心在圆上的位置搜索
H=hL-x(1); %最长腿长度,也就是最大桌子高度
Tx=[x -x;x -x];Ty=[y-d/2 fliplr(y)+d/2;y+d/2 fliplr(y)-d/2]; %桌面数据
Tx=Tx(:);Ty=Ty(:);Tz=zeros(size(Tx));
legx=[hL*ones(size(x));hL*ones(size(x));x;x]; %桌腿数据
legy=[y-d/2;y+d/2;y+d/2;y-d/2];
legz=zeros(size(legx));
zhoux=[hL-H/2;hL-H/2];zhouy=[-R R];zhouz=[0;0]; %轴数据
figure(1),clf;
h1=patch(Tx,Ty,Tz,'facecolor',[1 0.5 0],'edgecolor',[1 1 1]);
h2=patch(legx,legy,legz,'facecolor',[1 0.5 0],'edgecolor',[1 1 1]);
h3=patch(-legx,legy,legz,'facecolor',[1 0.5 0],'edgecolor',[1 1 1]);
hold on
h4=plot3(zhoux,zhouy,zhouz,'k-.');
h5=plot3(-zhoux,zhouy,zhouz,'k-.');
hold off
view(3);
axis equal;
axis([-hL hL -R R 0 H]);
axis off;
ddeg=2; %角度增量
for deg=0:ddeg:75 %最长条桌腿相对桌面折叠角度
zz=-H/2*sind(deg); %轴相对桌面高度
xx=x(1)+H/2*cosd(deg); %轴横坐标
alldeg=atan2(-zz*ones(size(x)),xx-x); %每个条腿折叠角度
allx=(hL-x).*cos(alldeg)+x; %每条腿末端x坐标
allz=-(hL-x).*sin(alldeg); %每条腿末端z坐标
minz=min(allz); %最小z坐标
legx=[allx;allx;x;x]; %腿x数据
legz=[allz;allz;zeros(size(allz));zeros(size(allz))]-minz;%t腿z数据
set(h1,'ZData',-minz*ones(size(Tz)));
set(h2,'XData',legx,'ZData',legz);
set(h3,'XData',-legx,'ZData',legz);
set(h4,'XData',[xx;xx],'ZData',[zz;zz]-minz);
set(h5,'XData',-[xx;xx],'ZData',[zz;zz]-minz);
pause(0.1);
drawnow;
end
这个程序运行出来是圆桌动态,求大神能不能改个其它形状的桌面,菱形椭圆什么的,在线等
L=120; %长
D=50; %宽,圆桌面直径
d=2.5; %木板宽
hL=L/2; %半长
R=D/2; %圆桌面半径
y=-R+d/2:d:R-d/2; %长条宽度方向中心位置
x=sqrt(R^2-y.^2); %长条中心在圆上的位置搜索
H=hL-x(1); %最长腿长度,也就是最大桌子高度
Tx=[x -x;x -x];Ty=[y-d/2 fliplr(y)+d/2;y+d/2 fliplr(y)-d/2]; %桌面数据
Tx=Tx(:);Ty=Ty(:);Tz=zeros(size(Tx));
legx=[hL*ones(size(x));hL*ones(size(x));x;x]; %桌腿数据
legy=[y-d/2;y+d/2;y+d/2;y-d/2];
legz=zeros(size(legx));
zhoux=[hL-H/2;hL-H/2];zhouy=[-R R];zhouz=[0;0]; %轴数据
figure(1),clf;
h1=patch(Tx,Ty,Tz,'facecolor',[1 0.5 0],'edgecolor',[1 1 1]);
h2=patch(legx,legy,legz,'facecolor',[1 0.5 0],'edgecolor',[1 1 1]);
h3=patch(-legx,legy,legz,'facecolor',[1 0.5 0],'edgecolor',[1 1 1]);
hold on
h4=plot3(zhoux,zhouy,zhouz,'k-.');
h5=plot3(-zhoux,zhouy,zhouz,'k-.');
hold off
view(3);
axis equal;
axis([-hL hL -R R 0 H]);
axis off;
ddeg=2; %角度增量
for deg=0:ddeg:75 %最长条桌腿相对桌面折叠角度
zz=-H/2*sind(deg); %轴相对桌面高度
xx=x(1)+H/2*cosd(deg); %轴横坐标
alldeg=atan2(-zz*ones(size(x)),xx-x); %每个条腿折叠角度
allx=(hL-x).*cos(alldeg)+x; %每条腿末端x坐标
allz=-(hL-x).*sin(alldeg); %每条腿末端z坐标
minz=min(allz); %最小z坐标
legx=[allx;allx;x;x]; %腿x数据
legz=[allz;allz;zeros(size(allz));zeros(size(allz))]-minz;%t腿z数据
set(h1,'ZData',-minz*ones(size(Tz)));
set(h2,'XData',legx,'ZData',legz);
set(h3,'XData',-legx,'ZData',legz);
set(h4,'XData',[xx;xx],'ZData',[zz;zz]-minz);
set(h5,'XData',-[xx;xx],'ZData',[zz;zz]-minz);
pause(0.1);
drawnow;
end
这个程序运行出来是圆桌动态,求大神能不能改个其它形状的桌面,菱形椭圆什么的,在线等
把x=sqrt(R^2-y.^2); %长条中心在圆上的位置搜索改成b = 10;
x=sqrt(R^2-y.^2)*b/R; %长条中心在圆上的位置搜索就可以得到椭圆效果,其中b为椭圆短半轴的长度.
再问: 能再改点其它形状么,可以加分~~~
再答: 同样改那一行:b = 10;
x = -(abs(y)-R)*b/R;b = 10;
x = b - (abs(y)-R)*b/R;
再问: 能画个类似于爱心的么,就是圆形桌面变为爱心的那个~~谢谢大神,弄出来再加50~
再答: 心形线处理起来比较麻烦,如非必需,就不费这个时间了吧。
要是确实非常需要,就再追问吧,我再想想办法。
再问: 那您能看一下如果这个木板中间是一个像操场一样的结构,就是中间是矩形,两边是半圆的那种形状好修改么?
再答: 这些要求只要花上足够的时间都可以做,但都比较麻烦(现在的要求甚至比心形更繁琐)。
我说过,如果确实是很必需的,我可以考虑再花一些时间去做;但如果只是想要锦上添花,抱歉,我真的还有别的事情要处理。这一天回答问题已经荒废了不少时间。
x=sqrt(R^2-y.^2)*b/R; %长条中心在圆上的位置搜索就可以得到椭圆效果,其中b为椭圆短半轴的长度.
再问: 能再改点其它形状么,可以加分~~~
再答: 同样改那一行:b = 10;
x = -(abs(y)-R)*b/R;b = 10;
x = b - (abs(y)-R)*b/R;
再问: 能画个类似于爱心的么,就是圆形桌面变为爱心的那个~~谢谢大神,弄出来再加50~
再答: 心形线处理起来比较麻烦,如非必需,就不费这个时间了吧。
要是确实非常需要,就再追问吧,我再想想办法。
再问: 那您能看一下如果这个木板中间是一个像操场一样的结构,就是中间是矩形,两边是半圆的那种形状好修改么?
再答: 这些要求只要花上足够的时间都可以做,但都比较麻烦(现在的要求甚至比心形更繁琐)。
我说过,如果确实是很必需的,我可以考虑再花一些时间去做;但如果只是想要锦上添花,抱歉,我真的还有别的事情要处理。这一天回答问题已经荒废了不少时间。