我正在尝试在3D空间中绘制四个变量(x,y,z,u)。
下面我定义了u = f(x,y,z) = (x-y)/z
以及x
,y
和z
的范围。
然后我使用scatter3
函数进行绘图。
但linspace
命令仅返回
u1 = f(x1, y1, z1)
u2 = f(x2, y2, z2)
...
我想绘制我的变量,以便为所有u
,x
和y
获取z
的值,以及u_i = f(x_i, y_i, z_i)
,我想要:
u112 = f(x1, y1, z2)
u121 = f(x1, y2, z1)
...
我需要使用哪个功能?
完整代码:
z = linspace(1,2,50);
y = linspace(0,0.5,50);
x = linspace(-1,1,50);
f = (x-y)./z;
scatter3(x,y,z,5,f,'filled')
for i=1:50
if f(i)<0
scatter3(x,y,z,5,f,'r','filled');
else
scatter3(x,y,z,5,f,'b','filled');
end
end
答案 0 :(得分:2)
您需要将x
,y
和z
向量传递给meshgrid
,让它生成点以填充整个3-D卷:
z = linspace(1, 2, 50);
y = linspace(0, 0.5, 50);
x = linspace(-1, 1, 50);
[X, Y, Z] = meshgrid(x, y, z);
f = (X-Y)./Z;
这些将是50乘50乘50的矩阵。要使用scatter3
绘制它们,您需要使用colon operator将它们重新整形为列向量:
scatter3(X(:), Y(:), Z(:), 5, f(:), 'filled');
如果您想将f
的负值显示为红色,将正值显示为蓝色,则可以像这样调用scatter3
并添加jet colormap(没有必要的循环):
scatter3(X(:), Y(:), Z(:), 5, (f(:) < 0), 'filled');
colormap(jet);