Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Похоже, вы были близки. Не уверен, что 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
Если вы хотите, чтобы график «увеличивался» по точкам: самый простой способ - создать пустой сюжет, а затем обновить его свойства 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);
[/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
С 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
plot(x,y,'-')
– Divakar 15 May 2014 в 22:39draw on
" былdrawnow
. Это обычно необходимо, чтобы сообщить Matlab, чтобы очистить очередь графических событий и заставить его рисовать ваш сюжет now i>. Однако в вашем коде вам не нужноdrawnow
, потому что он неявно называетсяpause
. – Luis Mendo 15 May 2014 в 23:34