【问题标题】:Improve animation rendering in Matlab改进 Matlab 中的动画渲染
【发布时间】:2011-12-25 20:20:25
【问题描述】:

我编写了一段代码来创建动画 (satellite movement around the Earth)。当我运行它时,它工作正常。但是,当它被修改为 Matlab GUI 中更复杂的代码的一部分时,结果会产生变化(主要是因为要绘制的点数更多)。我还注意到,如果我使用 OpenGL 渲染器,卫星的移动比使用其他渲染器(Painters 和 Zbuffer)时更快。我不知道是否有进一步的可能性来改进卫星运动的渲染。我认为关键可能是更改创建卫星实际位置的代码(handles.psat)及其沿时间的轨迹(handles.tray)

handles.tray = zeros(1,Fin);
handles.psat = line('parent',ah4,'XData',Y(1,1), 'YData',Y(1,2),...
    'ZData',Y(1,3),'Marker','o', 'MarkerSize',10,'MarkerFaceColor','b');
...
while (k<Fin)
            az = az + 0.01745329252;
            set(hgrot,'Matrix',makehgtform('zrotate',az));
            handles.tray(k) = line([Y(k-1,1) Y(k,1)],[Y(k-1,2) Y(k,2)],...
                [Y(k-1,3) Y(k,3)],...
        'Color','red','LineWidth',3);
            set(handles.psat,'XData',Y(k,1),'YData',Y(k,2),'ZData',Y(k,3));
            pause(0.02); 
            k = k + 1;

            if (state == 1)
                state = 0;
                break;
            end
            end
...

【问题讨论】:

    标签: matlab animation 3d


    【解决方案1】:

    您是否考虑过对数据应用旋转变换矩阵而不是轴?
    我认为虽然我没有检查过>它可以加快你的代码。

    【讨论】:

      【解决方案2】:

      您使用了我用来加快速度的典型技巧,例如预先计算帧、设置 XDataYData 而不是重新绘制,以及选择渲染器。不过,这里还有一些提示:

      1) 我在您的描述中注意到的一件事是,不同的渲染器和不同的复杂性会改变动画的运行速度。这通常是不可取的。考虑使用帧之间的实际间隔(即使用tic; dt = toc)来计算动画前进的距离,而不是依靠pause(0.2) 来生成稳定的帧速率。

      2) 如果复杂性导致您的帧速率过低,请考虑将pause(0.02) 替换为drawnow,或者至少计算每帧暂停多长时间。

      3) 尝试通过测量各个步骤所需的时间来进一步缩小瓶颈的来源。这将让您优化操作的正确阶段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-15
        • 2020-06-01
        • 2016-01-16
        • 1970-01-01
        • 2021-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多