matlab slice四维,Matlab有关四维数据作图小结2(slice命令)

问题:

对如下数据,做出截面图,并按相应的颜色值设置数据;

x   y    z    s

1   2    2   25

1   3    3   21

1   4    4   20

2   5    5   19

2   6    7   31

这样一组s与x,y,z没有直接函数表达式关系的数据希望能够用slice函数绘出切面图,也就是说,在x=1这个切面上,应该有对应s=25 21 20这三种用颜色表示的函数值。

首先,看到slice命令的帮助文件中有个例子:

[x,y,z] = meshgrid(-2:.2:2,-2:.25:2,-2:.16:2);

v = x.*exp(-x.^2-y.^2-z.^2);

xslice = [-1.2,.8,2]; yslice = 2; zslice = [-2,0];

slice(x,y,z,v,xslice,yslice,zslice)

colormap hsv

这里的slice前三个参数,必须构成网格数据,如图:

通过:

[x,y,z] = meshgrid(-2:.2:2,-2:.25:2,-2:.16:2);

figure;

view(3);

hold on;

for i = 1 : size(x, 1)

for j = 1 : size(x, 2)

for k = 1 : size(x, 3)

plot3(x(i, j, k), y(i, j, k), z(i, j, k), '.');

end

end

end

这些点构成了网格数据

所以,我们需要制造网格数据,进行截面操作;

close all;

clc;

clear;

A = [1  2    2   25

1  3    3   21

1   4   4    20

2   5    5   19

2   6    7    31];

x = A(:, 1)';

y = A(:, 2)';

z = A(:, 3)';

s = A(:, 4)';

% 提取有效数据

xb = min(x);

xe = max(x);

yb = min(y);

ye = max(y);

zb = min(z);

ze = max(z);

sb = min(s);

se = max(s);

x1 = linspace(xb, xe, 30);

y1 = linspace(yb, ye, 30);

z1 = linspace(zb, ze, 30);

s0 = linspace(sb, se, 30);

% 对有效数据分割

[x1 y1 z1] = meshgrid(x1, y1, z1);

% 生成网格数据点

s1 = zeros(size(x1, 1), size(x1, 2));

for i = 1 : size(s1, 1)

s1(i, :) = s0;

end

st = zeros(size(x1, 1), size(x1, 2), size(x1, 3));

for i = 1 : size(st, 3)

st(:, :, i) = s1;

end

s1 = st;

% 构造第四维数据s1

figure;

hold on;

view(3);

slice(x1, y1, z1, s1, x, [], []);

这样就做出来所谓的截面图

这个是通过slice(x1, y1, z1, s1, x, y, []);来做的,但没有颜色值设置选项;

close all;

clc;

clear;

A = [1  2    2   25

1  3    3   21

1   4   4    20

2   5    5   19

2   6    7    31];

x = A(:, 1)';

y = A(:, 2)';

z = A(:, 3)';

s = A(:, 4)';

% 对有效数据分割

xb = min(x);

xe = max(x);

yb = min(y);

ye = max(y);

zb = min(z);

ze = max(z);

y1 = linspace(yb, ye, 30);

z1 = linspace(zb, ze, 30);

x1 = ones(size(y1, 1), size(y1, 2)) * x(1);

[x1, y1] = meshgrid(x1, y1);

z = zeros(length(z1));

for i = 1 : size(z, 1)

z(i, :) = z1;

end

surf(x1, y1, z);

% 这个时候产生了对应于x1的网格截面图,下面来定颜色

[a, b] = size(z);

rgb = ones(a, b);

len = length(s)+1;

slic = floor(linspace(1, a, len));

for i = 1 : length(slic)-1

rgb(slic(i):slic(i+1)-1, :) = rgb(slic(i):slic(i+1)-1, :)*s(i);

end

% 产生颜色值

figure;

surf(x1, y1, z, rgb);

这个是设置了颜色的图

附件中是附图的文档,如果m币足够,可以下载来看看。

[本帖最后由 mooni 于 2009-6-16 14:56 编辑]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值