Matlab画小球沿轨迹运动

作者: 牛河 | 来源:发表于2017-12-13 00:47 被阅读236次

    以下m文件可以绘制小球沿着螺旋线运动的动画,其实就是两个步骤:

    1. 画出螺旋线背景
    2. 改变小球的位置,不断刷新图像,看起来就是动画了

    完整的m文件代码如下

    function f = ballw( K,ki )
    %ballw.m演示红色小球沿着一条封闭螺旋线运动的实时动画
    %仅演示实时动画的调试格式为ballw(K)
    %既演示实时动画又拍摄照片的调试格式为f = ballw(K,ki)
    %K红球运动的循环次数(不小于1)
    %ki指定拍摄照片的瞬间,取1到1034之间的任意整数
    %f存储拍摄的照片数据,可用image(f.cdata)观察照片
    %产生封闭的运动轨迹
    
    t1 = (0:1000)/1000 * 10 * pi;
    x1 = cos(t1);
    y1 = sin(t1);
    z1 = -t1;
    
    t2 = (0:10)/10;
    x2 = x1(end) * (1-t2);
    y2 = y1(end) * (1-t2);
    z2 = z1(end) * ones(size(x2));
    
    t3 = t2;
    z3 = (1-t3)* z1(end);
    x3 = zeros(size(z3));
    y3 = x3;
    
    t4 = t2;
    x4 = t4;
    y4 = zeros(size(x4));
    z4 = y4;
    
    x = [x1 x2 x3 x4];
    y = [y1 y2 y3 y4];
    z = [z1 z2 z3 z4];
    %data = [x',y',z']              %查看封闭曲线的坐标数值
    plot3(x,y,z,'r','Linewidth',4)  %绘制曲线
    axis off;                       %不画坐标轴
    %定义“线”色、“点”型(点)、点的大小(40)、擦除方式(xor)
    h = line('Color',[0.67 0 1],'Marker','.','MarkerSize',40,'EraseMode','xor');
    %使小球运动
    n = length(x);
    i = 1;
    j = 1;
    while 1
        set(h,'xdata',x(i),'ydata',y(i),'zdata',z(i));
        %bw = [x(i),y(i),z(i)]     %查看小球位置
        drawnow;                    %刷新屏幕
        pause(0.01)               %控制球速
        i = i+1;
        if nargin == 2 && nargout == 1  %当输入变量个数为2并且输出变量1个时才拍摄照片
            if (i == ki && j == 1)
                f = getframe(gcf);      %拍摄i = ki时的照片
            end
        end
        if i > n
            i = 1;
            j = j+1;
            if j > K
                break;
            end
        end
    end
    

    代码注解:

    • getframe(gcf) 获取整个窗口内容的图像,gcf是get current figure
    • nargin是number of input arguments的缩写,意为输入参数的个数
    • nargout是number of output arguments的缩写,意为输出参数的个数
    • drawnow 刷新屏幕,当需要实时看到程序绘图变化,需要此函数
    • pause(n) 暂停程序运行n秒

    代码中注释掉的两行代码可以用来打印出坐标点,方便调试。


    由此引出Matlab的m文件的调试方法:

    • 直接调试法
      • 打印重点怀疑命令行的结果(去掉行尾的;),或打印重点变量
      • 在适当位置添加keyboard指令,中断程序,查看内存空间
      • 在原函数文件首行之前加上百分号,使一个中间变量难于观察的M函数文件变为一个所有变量都保留在基空间中的M文件
      • 用echo指令,使M文件在运行时在屏幕上逐行显示文件内容
    • 工具调试法
      • Matlab集成专门的调试工具,常用的就是设置断点,查看内存空间,跟踪变量值的变化。

    可见Matlab的m文件调试方法和其他语言完全类似。


    将上述的m文件保存为ballw.m,然后在Matlab命令窗口中执行如下代码:

    >>  f = ballw(1,200)
    
    f = 
    
           cdata: [420x560x3 uint8]
        colormap: []
    
    >> image(f.cdata)       %查看获得的照片
    
    拍摄的小球照片

    本来想将小球运动的gif动图导出贴在这儿的,可惜我不会,也懒得弄了,感兴趣的朋友可以学习一下,matlab的什么函数可以导出gif或者avi的动画。

    相关文章

      网友评论

        本文标题:Matlab画小球沿轨迹运动

        本文链接:https://www.haomeiwen.com/subject/ixrnixtx.html