本帖最后由 kastin 于 2012-7-15 16:27 编辑
现在基本能实现了。通过组合我前面给的那两个简单图像就行。
首先,将8 楼图形绕z轴旋转一下,然后与12楼中的立方体叠加就行,注意调整一下相对比例。
r=1./(sin(theta).^4.*(sin(phi).^4+cos(phi).^4)+cos(theta).^4).^(1/4)+2.5*(sin(theta).^2.*cos(theta).*cos(2*phi+pi/2)).^2;复制代码
untitled1.jpg (49.28 KB, 下载次数: 8)
Ni2
2012-7-15 15:05 上传
不过这时有点小小遗憾,那就是中间凹陷下去的“谷底”其实是一个平台,而非一个内球面。为了减小这个瑕疵,我们将代码“p=0:pi/90:2*pi; t=0:pi/90:pi;”中的步长改为45,这时候就差不多看不出这个缺陷了。
下面是我发现的第二种方法——
进一步考察立方体方程,发现改动其中的指数,就能相应改动立方体形状。
经测试发现,立方体方程
r=1./(sin(theta).^a.*(sin(phi).^a+cos(phi).^a)+cos(theta).^a).^(1/b);复制代码(其中,a,b为正偶数)
1. 当a=b,如果a=b=2时,图形为球面;a=b=4,6,8,...,图形越来越接近正方体(棱角越来越明晰,各个面越平);
2. 当底数内部的各个a如果不是相同,那么仅仅改变形状的长宽高比例。
3. 当a与b相异时——
1) 若a>b,那么,当a与b差距越大,图形中正方体各个棱角越突出,各个面越内陷,其极限情形就是8楼中的样子;
2) 若a
然后我们就能利用上述规律,来获得我们想要的图形。
close all; clear
p=0:pi/45:2*pi;
t=0:pi/45:pi;
[phi,theta]=meshgrid(p,t);
r=1./(sin(theta).^8.*(sin(phi).^8+cos(phi).^8)+cos(theta).^8).^(1/4);
%球坐标绘图
x=r.*sin(theta).*cos(phi);
y=r.*sin(theta).*sin(phi);
z=r.*cos(theta);
surf(x,y,z,'edgecolor','k','facecolor',[0.5,0.5,0.5])
axis equal
axis off
%set(gcf,'color','w') %白底背景复制代码
untitled2.jpg (41.82 KB, 下载次数: 5)
Ni1
2012-7-15 15:31 上传
此时,凹陷变完美地变为内球面了。同样,这里也存在一点不足,那就是内陷球面所占范围太大,以至于各个顶角不太丰满,偏瘦。
至此,我们已经找到两种方法来实现楼主的图形了。然后我们可以变动相关参数,实现楼主给出附图中铜或者锌对应的图像了。
r=1./(1+cos(theta).^4); %锌对应的弹性模量图复制代码
zn.jpg (39.46 KB, 下载次数: 3)
Zn
2012-7-15 16:19 上传
我们甚至能自己改造参数,做出许多其他图案,比如
r=1./(sin(theta).^4.*(sin(phi).^2+cos(phi).^2)+cos(theta).^2).^(1/2); %灯笼
r=-1./(1+cos(theta).*sin(theta)); %陀螺
r=1./(1+cos(theta).*sin(theta)); %莫斯科标志建筑的圆屋顶
r=1./(2+sin(3*theta).*sin(theta)); %小时候玩的滚轮玩具
r=1./(0.8+sin(2*theta).*sin(theta)); %清朝官员的帽子复制代码--------------------------------------------------------
至于楼主所给图像中的坐标架,这比较容易,线型加粗就行了。