Улучшить рендеринг анимации в Matlab - PullRequest
0 голосов
/ 26 декабря 2011

Я написал код для создания анимации ( движение спутника вокруг Земли ).Когда я запускаю его, он работает нормально.Однако, когда он был изменен, чтобы стать частью кода, намного более сложного, присутствующего в GUI Matlab, результаты привели к изменениям (в основном из-за большего количества точек для построения графика).Я также заметил, что если я использую рендерер 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
...

Ответы [ 2 ]

1 голос
/ 27 января 2013

Вы использовали типичные приемы, которые я использую для ускорения, такие как предварительный расчет кадров, установка XData и YData вместо реплоттинга и выбор средства визуализации. Вот еще пара советов:

1) Одна вещь, которую я заметил в вашем описании, это то, что разные средства визуализации и разные сложности меняли скорость, с которой ваша анимация работала. Это часто нежелательно. Подумайте об использовании фактического интервала между кадрами (т. Е. Используйте tic; dt = toc), чтобы рассчитать, насколько далеко продвигается анимация, вместо того, чтобы полагаться на pause(0.2) для создания постоянной частоты кадров.

2) Если сложность такова, что ваша частота кадров нежелательно низкая, рассмотрите возможность замены pause(0.02) на drawnow или, по крайней мере, рассчитайте, как долго делать паузу в каждом кадре.

3) Попробуйте немного сузить источник своего узкого места, измерив, сколько времени занимают различные шаги. Это позволит вам оптимизировать правильный этап операции.

1 голос
/ 26 декабря 2011

Рассматривали ли вы применить матрицу преобразования вращения к вашим данным вместо оси?
Я думаю <<em> Хотя я не проверял >, что это может ускорить ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...