我有一个单值类型的矩阵,我想将其绘制为曲面。当我尝试在MATLAB中使用surf函数时,我收到一个错误,指出我需要使用uint8或double:
x=peaks; %# Initialize x to a matrix of doubles
surf(x); %# No problem when x is of type double
现在我会尝试单打:
x=single(peaks);
surf(x);
给出以下错误:
Warning: CData must be double or uint8.
Warning: CData must be double or uint8.
那很不幸。我想我必须增加色彩图的双倍精度:
x=single(peaks);
surf(x,double(x));
工作得很好。但是只是为了踢,我们也试试uint8:
x=single(peaks);
surf(x,uint8(x));
产生以下内容:
Warning: CData must be double or single unless it is used only as a texture data
Warning: CData must be double or single unless it is used only as a texture data
什么是MATLAB?下定决心!那么为什么我必须以双精度的形式使用额外的内存来表示surf
函数的颜色映射?即使MATLAB错误文本告诉我,我可以使用uint8 或单,取决于我没有使用的哪一个?
答案 0 :(得分:1)
喜欢这个问题。
不确定您是否看过this,但它至少解决了同样的厌恶。听起来迈克尔对uint8
算法中的表现感到失望,因为他描述了它似乎为自己创造了更多的计算工作,其中的情节不符合他的审美需求。我用peaks
样本尝试了这个,这就是我得到的:
然后我添加了一个偏移来获得所有的情节。
呃,我觉得很好。这是代码,希望这有用。
% Test code from Matlab Central
a=256*rand(5);
b=uint8(a);
figure;
surf(b,'facecolor','texturemap')
% get the example peaks data
% and plot without any scaling
x = peaks;
figure;
surf(uint8(x),'facecolor','texturemap')
% get the offset to keep all the data positive
% not pretty but functional
xp = x-min(min(x))+1;
figure;
surf(uint8(xp),'facecolor','texturemap')