【发布时间】:2016-08-26 20:16:55
【问题描述】:
我有一个surf 图绘制了一个二维函数。我有一个循环可以更改meshgrid 矩阵中每个点[x,y] 的z 值,以便为我的情节设置动画:
p = surf(x, y, z)
frames = 10/1000
for t = 0:frames:10
newZ = updateZVal(someArgs)
set(p, 'ZData', newZ)
这在大多数情况下都可以正常工作。但是,颜色映射不会更新。基本上原始z 矩阵的颜色图纹理就保留在那里。 x-y 平面随着newZ 的变化而上下移动,但颜色不会。
这个确切的代码在 Matlab 中工作,在 Octave 中工作正常,除了这个颜色问题。
编辑:最小的工作示例。小移动高斯类型的东西。你可以看到颜色没有更新
figure();
x_range = [-2:0.2:2];
y_range = [-2:0.2:2];
[x,y] = meshgrid(x_range, y_range);
frames = 500;
z = (x) .* y;
p = surf(x, y, z);
for t = [0:2/frames:2]
z = exp(-((((x-t).^2)/2) + (((y-t).^2)/2)));
set(p, 'ZData', z);
drawnow;
end
【问题讨论】:
-
这听起来是个有趣的问题。如果您想提供一个最小的工作示例,我很乐意看看。
-
如果我不得不猜测,我会说颜色数据驻留在 CData 数组中。看看 CData / CDataMode / CDataMapping / CDataSource 属性
-
这怎么可能
for t = 0:1000:10? -
@NKN,因为该表达式会生成一个向量
t,范围从0到10,步骤为1000 -
@NKN 哇哦,你是对的,我想错了,几个月没碰过这种语言。我的问题仍然存在,我只是在这里的示例中输入了错误
标签: matlab plot octave colormap