• 【7.21】动态桌子代码


    圆形:

    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]); %edgecolor为形状边缘线颜色
    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-.');	%k表示黑色,-.表示点划线
    h5=plot3(-zhoux,zhouy,zhouz,'k-.');
    hold off
    view(3);
    
    axis equal;	%沿每个坐标轴使用相同的数据单位长度。
    axis([-hL hL -R R 0 H]); %把坐标范围移动到x=[-hl,hl],y=[-R,R],z=[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))); %设置h1-h5 X、Y、Z方向的参量
        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 = R-(abs(y)/sqrt(3)) %正六边形
    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);%最长腿的长度
    chax=x-x(1);%每根木条顶点离最外面木条顶点的距离
    for h=2:5:50
    alpha=acos(h/H);
    beta=pi/2-alpha;
    caodi=sqrt(chax.^2+(H^2)/4-chax.*H*cos(beta));
    %%开槽长度
    kaicaochang=caodi-(H/2-chax);%开槽长度
    sin_gama=(H/2).*sin(beta)./(caodi);
    cos_gama=(chax.^2+caodi.^2-(H/2)^2)/(2*chax.*caodi);
    
    mutiaochang=H-chax;
    dix=-(L/2-mutiaochang.*(1+cos_gama));
    diy=y;
    diz=-mutiaochang.*sin_gama;
    
    figure(1);
    scatter3(dix,diy,50+diz,'r','LineWidth',1.5)
    xlabel('X');ylabel('Y');zlabel('Z');
    view(150,10) %控制观察角度
    pause(0.5);
    drawnow;
    grid on
    end
    

      

    Lingo求解:

    MODEL:
    MIN=l1;
    r=40;
    h=70;
    Gmax=@sqrt(r^2-(r/n)^2);
    Gmin=@sqrt(r^2-(r-r/n)^2);
    g1=Gmax-Gmin;
    l1>=h;
    @cos(alpha)=70/l1;
    g1<l1*@sin(alpha);
    EF^2=g1^2+(l1/2)^2-g1*l1*@cos(alpha);
    EF^2+g1^2>=(l1/2)^2;
    l1+Gmin>=dis;
    dis>=Gmax;
    d=r/n;
    N>3;
    N<=50;
    d>=2.5;
    END
    

      

  • 相关阅读:
    招聘 微软全球技术支持中心 sql server组
    retrofit2 上传图片
    android 6.0权限判断 音频 拍照 相册
    android studio 修改成自己jks(keystore)签名文件
    android 透明度颜色值
    android studio clone 失败
    fresco Bitmap too large to be uploaded into a texture
    android 虚线
    EventBus 3.0使用
    java.lang.IllegalArgumentException: You must not call setTag() on a view Glide is targeting
  • 原文地址:https://www.cnblogs.com/zxhyxiao/p/9347733.html
Copyright © 2020-2023  润新知