matlab中怎么让三维曲面的颜色随X、Y的值变化?

我在这里画了一个三维曲面,其中Vex是速度,它只跟X和Y的坐标值有关,我想让三维曲面的颜色随Vxf的变化而变化,代码如上,但是运行之后曲面的颜色都是红色的,没有变化,我看过了Vxf的值在-43637.10067到6727.487386之间变化,大神给看看怎么弄??
clear
L=133.9804;
R1=156.3;
R0=319;
w =0.8170;
Rp=329.4336;
Rc=375;
H0=171;
Cz=23.1846;
[X,Y]=meshgrid(0:1:L,-150:1:150);
SA=Y./R1;
R=R0+R1.*(1-sqrt(1-SA.^2));
SB=(L-X)./R;
Vxf=w.*Rp.*(Rc-R.*sqrt(1-SB.^2))./(Rc-R);%
Z=Rc-sqrt((R0+R1-sqrt(R1.^2-Y.^2)).^2-(X-L).^2);
M=0.5*(H0-2*(H0-2*Cz)*(X/L)+(H0-2*Cz)*(X/L).^2);
N=(R1.^2-(R1+R0-((Rc-M).^2+(L-X).^2).^0.5).^2).^0.5;
Z(Y>=N|Y<=(-N))=nan;
p=mesh(X,Y,Z,Vxf);
colorbar;
xlabel('X./mm'), ylabel('Y./mm'),zlabel('Z./mm');
我知道问题出在哪了,在这个代码里p=mesh(X,Y,Z,Vxf);控制颜色的是Vxf,从colorbar中可以看出来Vxf的取值范围是-4*10^4到0.5*10^4,但是我在这个代码里Z(Y>=N|Y<=(-N))=nan;定义了三维曲面的定义域(就是X和Y的取值范围),在这个取值范围里的曲面上的Vxf的值都是接近红色所对应的Vxf的值的,比如0.5*1064<Vxf<0,所以这段三维曲面都是红色的,这个怎么解决呢??

再贴一个不限制定义域的图,如下图所示,可以看出图中的曲面是有颜色变化的,正验证了我的猜想,但是我不会改代码啊??????来大神啊赶紧

第1个回答  2015-01-22

    首先,使用colormap肯定是不行的,因为该函数改变的是整个窗口的调色板,不可能用于区分三个不同的surface对象;

    可行的做法:在绘制曲面时,同时指定颜色值,示例代码:

    [x,y,z]=peaks;
    surf(x,y,z,z)
    hold on
    surf(x,y,z+5,z+10)
    surf(x,y,z-5,z-10)
    axis auto

    其中surf命令的第4个参数用于指定颜色(scaled),你可以在原有数据z基础上加或减去某个数,即可把整个曲面的颜色空间与其它曲面区别开来。

追问

我所画的三维曲面上每一点的速度是不同的,Vxf就是速度,它是随X和Y变化的,我想设置的是让三维曲面上的点的颜色代表Vxf的值大小,你可以看我运行上边代码出来的图中的colorbar的数值就是Vef的值,但是三维图的颜色并没有变化,都是红色的,我的代码里关于颜色的设置肯定有问题

本回答被提问者采纳
相似回答