matlab高手帮我看看怎么把几个相交的曲面弄透明,汇出交线~有3个曲面相交,分别为曲面1,曲面2,曲面3,他们的方程在下面程序里面我想把个曲面1,2,3分别弄成透明的,颜色各不相同,比如分别为红,

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/11 02:44:19
matlab高手帮我看看怎么把几个相交的曲面弄透明,汇出交线~有3个曲面相交,分别为曲面1,曲面2,曲面3,他们的方程在下面程序里面我想把个曲面1,2,3分别弄成透明的,颜色各不相同,比如分别为红,

matlab高手帮我看看怎么把几个相交的曲面弄透明,汇出交线~有3个曲面相交,分别为曲面1,曲面2,曲面3,他们的方程在下面程序里面我想把个曲面1,2,3分别弄成透明的,颜色各不相同,比如分别为红,
matlab高手帮我看看怎么把几个相交的曲面弄透明,汇出交线~
有3个曲面相交,分别为曲面1,曲面2,曲面3,他们的方程在下面程序里面
我想把个曲面1,2,3分别弄成透明的,颜色各不相同,比如分别为红,绿,蓝色,这样好区分些
然后把曲面1和曲面3的交线,曲面2和曲面3的交线用实线绘制出来



[D,g]=meshgrid(9.*10.^-9:1.*10.^-9:1.*10.^-6,1:1000:20000);
f=(-8.3.*10.^-21.*(4.*0.0000002.^2).^3.*((D+2.*0.0000002)./(((D+2.*0.0000002).^2-4.*0.0000002.^2).^2.*((D+2.*0.0000002).^2-4.*0.0000002.^2+4.*0.0000002.^2).^2))./6)+64.*pi.*78.4.*8.854187817.*10.^-12.*5.2424e+006.*(8.3144621.*298.15./(1.*96485.3365)).^2.*(tanh(1.*96485.3365.*-35.*10.^-3./(4.*8.3144621.*298.15))).^2.*((2.*10.^-7).^2./(2.*2.*10.^-7)).*exp(-5.2424e+006.*D); %曲面1
mesh(D,g,f);
xlabel('\bfD');
ylabel('\bfg');
zlabel('\bff');
hold on;
[D,g]=meshgrid(9.*10.^-9:1.*10.^-9:1.*10.^-6,1:1000:20000);
f=(-8.3.*10.^-21.*(4.*0.0000002.^2).^3.*((D+2.*0.0000002)./(((D+2.*0.0000002).^2-4.*0.0000002.^2).^2.*((D+2.*0.0000002).^2-4.*0.0000002.^2+4.*0.0000002.^2).^2))./6)+64.*pi.*78.4.*8.854187817.*10.^-12.*1.1722e+007.*(8.3144621.*298.15./(1.*96485.3365)).^2.*(tanh(1.*96485.3365.*-45.*10.^-3./(4.*8.3144621.*298.15))).^2.*((2.*10.^-7).^2./(2.*2.*10.^-7)).*exp(-1.1722e+007.*D); %曲面2
mesh(D,g,f);
xlabel('\bfD');
ylabel('\bfg');
zlabel('\bff');
hold on;
[D,g]=meshgrid(9.*10.^-9:1.*10.^-9:1.*10.^-6,1:1000:20000);
f=3.2840e-016.*g; %曲面3
mesh(D,g,f);
xlabel('\bfD');
ylabel('\bfg');
zlabel('\bff');
hold off;

matlab高手帮我看看怎么把几个相交的曲面弄透明,汇出交线~有3个曲面相交,分别为曲面1,曲面2,曲面3,他们的方程在下面程序里面我想把个曲面1,2,3分别弄成透明的,颜色各不相同,比如分别为红,
参考代码
[D,g]=meshgrid(linspace(9e-9,1e-6,200),linspace(1,20000,200));
f1=(-8.3.*10.^-21.*(4.*0.0000002.^2).^3.*((D+2.*0.0000002)./(((D+2.*0.0000002).^2-4.*0.0000002.^2).^2.*((D+2.*0.0000002).^2-4.*0.0000002.^2+4.*0.0000002.^2).^2))./6)+64.*pi.*78.4.*8.854187817.*10.^-12.*5.2424e+006.*(8.3144621.*298.15./(1.*96485.3365)).^2.*(tanh(1.*96485.3365.*-35.*10.^-3./(4.*8.3144621.*298.15))).^2.*((2.*10.^-7).^2./(2.*2.*10.^-7)).*exp(-5.2424e+006.*D); %曲面1
f2=(-8.3.*10.^-21.*(4.*0.0000002.^2).^3.*((D+2.*0.0000002)./(((D+2.*0.0000002).^2-4.*0.0000002.^2).^2.*((D+2.*0.0000002).^2-4.*0.0000002.^2+4.*0.0000002.^2).^2))./6)+64.*pi.*78.4.*8.854187817.*10.^-12.*1.1722e+007.*(8.3144621.*298.15./(1.*96485.3365)).^2.*(tanh(1.*96485.3365.*-45.*10.^-3./(4.*8.3144621.*298.15))).^2.*((2.*10.^-7).^2./(2.*2.*10.^-7)).*exp(-1.1722e+007.*D); %曲面2
f3=3.2840e-016.*g; %曲面3
cla
hold on;
mesh(D, g,f1,'FaceColor','r','EdgeColor','none');
mesh(D, g,f2,'FaceColor','g','EdgeColor','none');
mesh(D, g,f3,'FaceColor','b','EdgeColor','none');
xlabel('\bfD');
ylabel('\bfg');
zlabel('\bff');
alpha(0.6)
view(30,30)
tol = diff(zlim)*0.002;
r0=(abs(f1-f2)<=tol)&D<5e-7;
zz=(f1+f2)/2;
plot3(D(r0),g(r0),zz(r0),'-','linewidth',2)
tol = diff(zlim)*0.001;
r0=(abs(f3-f2)<=tol);
zz=(f3+f2)/2;
plot3(D(r0),g(r0),zz(r0),'-','linewidth',2)
tol = diff(zlim)*0.001;
r0=(abs(f3-f1)<=tol);
zz=(f3+f1)/2;
plot3(D(r0),g(r0),zz(r0),'-','linewidth',2)
 
效果图

 
说明
1、生成网格数据的方法建议用linspace函数,而不要直接指定间隔(原来的数据间隔取的不太好).
2、为了得到更好的效果,网格数据需要稍微密集一些.
3、求交线的做法是,在对应的x、y坐标,看两个平面(或曲面)的z值是否相差足够小.这种做法思路比较直接,但要求两个曲面的x、y坐标必需对应(如果不对应,可考虑进行插值),而判断z值相等的误差限也需要根据情况适当调整.
4、两个曲面在D较大的位置接近重合,使用现有的方法不太好处理,暂时把该部分数据忽略(也就是不考虑那部分的交线).
5、透明度可用alpga函数调整,0为完全透明,1为不透明.需要说明的是,设置透明之后,红绿蓝看上去不再是很纯正的颜色.
6、绘制平面和曲面交线可使用函数contourslice,该函数应该也可用于两个曲面相交的场合,但我没有进一步考虑,只是提供一个线索给楼主,感兴趣的话不妨自行研究.