修改
在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
答案 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
这就是我想要的。
答案 1 :(得分:0)
phi和teta - 只是我在单位球面上球面坐标中的矩形节点网格(RO = 1)。 N和N1的数量(NxN1 - 节点总数) Y_exact - 我在球体上的函数(Franke函数)(NxN1值)</ p>
首先,我用笛卡尔坐标计算网格并计算Y_exact的值。然后在球体上的每个点上,我像RO + Y_exact一样拉伸球体,并在笛卡尔坐标系中计算x和y的相应新值。
结果我收到了在单位球体上伸展的Y_exact函数!
当我获得足够的声誉时,我会用图片支持这个解决方案