2010-05-08 2 views
1

Я хотел бы создать анимацию для демонстрации LDPC кодирования, которая основана на Sum-Product AlgorithmMatlab Моделирование: Point (символ) Переход от начальной точки до конечной точки и обратно

До сих пор я создал график, который показывает соединения между узлами символов (слева) и узлами четности (справа) alt text http://img29.imageshack.us/img29/9780/ldpc.jpg и хотел бы оживить точки, перемещающиеся от символа до узлов четности и обратно.

фигура рисуется, выполнив следующий метод:

function drawVertices(H) 
hold on; 
nodesCount = size(H); 
parityNodesCount = nodesCount(1); 
symbolNodesCount = nodesCount(2); 
symbolPoints = zeros(symbolNodesCount, 2); 
symbolPoints(:, 1) = 0; 
for i = 0 : symbolNodesCount - 1 
    ji = symbolNodesCount - i; 
    scatter(0, ji) 
    symbolPoints(i + 1, 2) = ji; 

end; 
parityPoints = zeros(parityNodesCount, 2); 
parityPoints(:, 1) = 10; 
for i = 0 : parityNodesCount - 1 
    ji = parityNodesCount - i; 
    y0 = symbolNodesCount/2 - parityNodesCount/2; 
    scatter(10, y0 + ji) 
    parityPoints(i + 1, 2) = y0 + ji; 
end; 
axis([-1 11 -1 symbolNodesCount + 2]); 
axis off 

%connect vertices 
d = size(H); 
for i = 1 : d(1) 
    for j = 1 : d(2) 
     if(H(i, j) == 1) 
      plot([parityPoints(i, 1) symbolPoints(j, 1)], [parityPoints(i, 2) symbolPoints(j, 2)]); 
     end; 
    end; 
end; 

Так что я хотел бы сделать здесь, чтобы добавить еще один метод, который принимает начальную точку (х и у) и конечную точку в качестве аргументов и оживляет перемещаемый круг (точка) от начала до конца и обратно вдоль отображаемых линий.

Я был бы признателен, если бы кто-нибудь из вас смог показать решение или предложить любой полезный учебник по симуляциям Matlab.

Спасибо!

ответ

2

Я считаю, что лучший способ узнать - пример. Поэтому я предлагаю вам взглянуть на демо lorenz, который поставляется с MATLAB:

edit lorenz 

Для других прохладных анимации, искать orbits.m и swinger.m демок часть книги Клив Молер в: Experiments with MATLAB


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

%# coordinates 
t = (0:.01:2*pi)';   %# 'fix SO syntax highlight 
D = [cos(t) -sin(t)]; 

%# setup a figure and axis 
hFig = figure('Backingstore','off', 'DoubleBuffer','on'); 
hAx = axes('Parent',hFig, 'XLim',[-1 1], 'YLim',[-1 1], ... 
      'Drawmode','fast', 'NextPlot','add'); 
axis(hAx, 'off','square') 

%# draw circular path 
line(D(:,1), D(:,2), 'Color',[.3 .3 .3], 'LineWidth',1); 

%# initialize point 
h = line('XData',D(1,1), 'YData',D(1,2), 'EraseMode','xor', ... 
     'Color','r', 'marker','.', 'MarkerSize',50); 
%# init text 
hTxt = text(0, 0, num2str(t(1)), 'FontSize',12, 'EraseMode','xor'); 

i=0; 
while true 
    i = rem(i+1,numel(t)) + 1;    %# circular increment 
    set(h,'XData',D(i,1), 'YData',D(i,2)) %# update X/Y data 
    set(hTxt,'String',num2str(t(i)))   %# update angle text 
    drawnow         %# force refresh 
    if ~ishandle(h), return; end    %# in case you close the figure 
end 

Для более детального описания параметров, используемого (EraseMode, Backingstore, DoubleBuffer, ..), обратитесь к этому animation guide

Смежные вопросы