Как сделать анимацию, захватив все кадры [duplicate]

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
11
задан branny12000 15 May 2014 в 22:27
поделиться

3 ответа

Похоже, вы были близки. Не уверен, что draw on - любая команда.

Посмотрите, подсказывает ли вам код для решения вашего дела -

%// Sample x and y values assumed for demo.
x = 1:1000;
y = x.^2;

%// Plot starts here
figure,hold on

%// Set x and y limits of the plot
xlim([min(x(:)) max(x(:))])
ylim([min(y(:)) max(y(:))])

%// Plot point by point
for k = 1:numel(x)
    plot(x(k),y(k),'-') %// Choose your own marker here

    %// MATLAB pauses for 0.001 sec before moving on to execue the next 
    %%// instruction and thus creating animation effect
    pause(0.001);     
end
7
ответ дан Divakar 15 August 2018 в 18:19
поделиться
  • 1
    Большое вам спасибо за вашу помощь .. по какой-то причине он не выполнил мой график, я изменил его настройку x = DATASET 1 и y = DATASET 2 Ось приближается, но на них ничего не рисуется – branny12000 15 May 2014 в 22:34
  • 2
    Большая проблема заключается в том, что я могу получить «точки» для обновления, но он не образует линейный график для меня, чтобы увидеть путь, который был создан – branny12000 15 May 2014 в 22:37
  • 3
    Добавьте это после выхода цикла - plot(x,y,'-') – Divakar 15 May 2014 в 22:39
  • 4
    @ branny12000 Дайте мне знать, работает ли код для вас. Я буду соответствующим образом обновлять свое решение. – Divakar 15 May 2014 в 22:53
  • 5
    Возможно, что оригинал "draw on" был drawnow . Это обычно необходимо, чтобы сообщить Matlab, чтобы очистить очередь графических событий и заставить его рисовать ваш сюжет now . Однако в вашем коде вам не нужно drawnow, потому что он неявно называется pause. – Luis Mendo 15 May 2014 в 23:34

Если вы хотите, чтобы график «увеличивался» по точкам: самый простой способ - создать пустой сюжет, а затем обновить его свойства XData и YData на каждой итерации:

h = plot(NaN,NaN); %// initiallize plot. Get a handle to graphic object
axis([min(DATASET1) max(DATASET1) min(DATASET2) max(DATASET2)]); %// freeze axes
%// to their final size, to prevent Matlab from rescaling them dynamically 
for ii = 1:length(DATASET1)
    pause(0.01)
    set(h, 'XData', DATASET1(1:ii), 'YData', DATASET2(1:ii));
    drawnow %// you can probably remove this line, as pause already calls drawnow
end

Вот пример1, полученный с помощью DATASET1 = 1:100; DATASET2 = sin((1:100)/6);

enter image description here [/g1]


1 Если кто-то заинтересован, фигура - это анимированный gif, который может создайте, добавив следующий код (взятый из здесь ) в цикле после строки drawnow:

  frame = getframe(1);
  im = frame2im(frame);
  [imind,cm] = rgb2ind(im,256);
  if ii == 1;
      imwrite(imind,cm,filename,'gif','Loopcount',inf);
  else
      imwrite(imind,cm,filename,'gif','WriteMode','append');
  end

29
ответ дан Luis Mendo 15 August 2018 в 18:19
поделиться
  • 1
    Вау! Это gif? – Divakar 15 May 2014 в 23:54
  • 2
    @ Дивакар Да. Я использовал этот – Luis Mendo 15 May 2014 в 23:55
  • 3
    это круто! просто для обмена анимированным gif у вас есть мой +1 – bla 15 May 2014 в 23:56
  • 4
    @natan Спасибо! Я обычно ненавижу анимированные gifs за то, что слишком отвлекаю ... но я не мог устоять :-) – Luis Mendo 15 May 2014 в 23:57
  • 5
    1:ii - хороший трюк, чтобы получить непрерывную линию :) +1 – Santhan Salai 24 April 2015 в 06:18

С R2014b вы можете работать с объектами annimatedline ( doc и как ), которые предназначены для обработки анимированных графиков. В принципе, объект annimatedline имеет функцию addpoints, которая добавляет новые точки в строку, не переопределяя существующие точки, а также функцию clearpoints, которая очищает линии для более сложных анимаций.

Вот пример:

h = animatedline;
axis([0,4*pi,-1,1])

x = linspace(0,4*pi,1000);
y = sin(x);
for k = 1:length(x)  
    addpoints(h,x(k),y(k));
    drawnow
end
3
ответ дан marsei 15 August 2018 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: