球体上的绘图功能(颜色和形状)

时间:2013-11-04 14:17:05

标签: matlab function plot geometry

修改

在S2中的单位球面(x,y,z)上定义函数f(x,y,z)。我必须在单位球体上绘制它而不仅仅是用颜色。

我尝试过冲浪(x,y,z,f),但它只是根据f的值对球体进行着色。但我需要将单位球变成“蛋”。也就是说,如果在某一点上函数f = 2的值,例如 - 我必须在此点沿着z的原始值的单位法线方向拉伸球体两倍。对于f的所有点和值都是一样的。

for i=1:N
     for ii=1:N1+1
         [x(i,ii) y(i,ii) z(i,ii)]=sph2cart(phi(ii),acos(cosTeta(i))+pi/2,RO);

         Y_exact(i,ii)=FrankeF(x(i,ii), y(i,ii), z(i,ii));
         cap_point=-0.5*x(i,ii)-0.5*y(i,ii)+1/sqrt(2)*z(i,ii);

         if cap_point>=cos(0.5)
             f_cap(i,ii)=2*cos(pi*acos(cap_point));
         end

     end
end

Y_exact=Y_exact+f_cap;

surf(x,y,z,Y_exact,'FaceColor','interp','EdgeColor','none','FaceLighting','phong');
shading interp
axis square
colorbar

2 个答案:

答案 0 :(得分:1)

 for i=1:N
     for ii=1:N1+1       
[x1(i,ii) y1(i,ii) z1(i,ii)]=sph2cart(phi(ii),acos(cosTeta(i))+pi/2,RO+Y_exact(i,ii));
     end
  end

 figure(1);
 surf(x1,y1,z1,Y_exact,'FaceColor','interp','EdgeColor','none','FaceLighting','phong');
 shading interp
 axis normal
 colorbar 

这就是我想要的。 enter image description here

答案 1 :(得分:0)

phi和teta - 只是我在单位球面上球面坐标中的矩形节点网格(RO = 1)。 N和N1的数量(NxN1 - 节点总数) Y_exact - 我在球体上的函数(Franke函数)(NxN1值)<​​/ p>

首先,我用笛卡尔坐标计算网格并计算Y_exact的值。然后在球体上的每个点上,我像RO + Y_exact一样拉伸球体,并在笛卡尔坐标系中计算x和y的相应新值。

结果我收到了在单位球体上伸展的Y_exact函数!

当我获得足够的声誉时,我会用图片支持这个解决方案