这是一个代表我需要做的代码的示例代码:
ang=0:0.01:2*pi;
r = 1;
xp=r*cos(ang);
yp=r*sin(ang);
frequency = 1/0.016; % real frequency
datalength = length(ang); % n° of points
scale = 10; % resampling
nFrames = floor(datalength/scale);
% figure
figure()
set(gcf, 'Color','white')
hold on
axis equal
set(gca, 'nextplot','replacechildren', 'Visible','off'); % ?
% preallocate
mov(1:nFrames) = struct('cdata',[], 'colormap',[]);
% create movie
for k = 1:nFrames
axes(gca); cla;
hold on
plot3(xp,yp,zeros(size(xp)));
plot3(1,0,0,'kx');
% Update Target
for j = 1:scale
id = (k-1)*scale + j;
CurTar = ang(id);
PsiTar = CurTar + pi*0.5;
end
% Plot obj
plot3(2*xp(id),2*yp(id),0,'k.','LineWidth',4)
% Plot Target
plot3(xp(id),yp(id),0,'r.','LineWidth',3)
a = -PsiTar - 0.75*pi;
% Set Camera
xc = xp(id) - sin(a);
yc = yp(id) - cos(a);
zc = 0.5;
campos([xc,yc,zc])
camtarget([xp(id),yp(id),0])
mov(k) = getframe(gcf);
end
close(gcf)
movie2avi(mov, 'mymovie', 'fps', round(frequency/scale));
我有以下问题/疑问:
我想绘制一次圆圈,而不是每个循环。我试图将它放在for
循环之前,但是在每次迭代时都没有维护,除非我注释掉axes(gca); cla;
行,但是这有一个明显的另一个缺点:一切都得到维护,而不是只有圆圈。
我希望从多个角度看到相同的场景。我知道怎么做子图,我会知道如何多次绘制相同的东西并简单地设置相机,有没有一种方法可以绘制一次并有多个投影?
我的相机位置有问题。您看到我在sin
和cos
的定义中有xc
和yc
。在这个例子中一切都很好,但我的完整脚本中的相同代码导致错误:
??? Error using ==> set
Value must be a 3 element numeric vector
Error in ==> campos at 50
set(ax,'cameraposition',val);
我怎么能摆脱它?我已经打印屏幕上显示所有值,它们是数字的,我不知道会发生什么。
修改
其他问题
如果我绘制以下内容
for k = 1:nFrames
axes(gca); cla;
hold on
plot3(zeros(length(ang)),ang,zeros(length(ang)),'b')
% Update Target
for j = 1:scale
id = (k-1)*scale + j;
end
% Plot obj
plot3(0,2*yp(id),0,'k.','LineWidth',4)
if k==1
view(0,0)
camzoom(50)
end
camtarget([0,yp(id),0])
end
close(gcf)
您可以看到相机未与y
轴对齐,否则您将看不到蓝线。这是为什么?怎么可能避免呢?