双曲面(Hyperboloid)分为单叶双曲面和双叶双曲面。这里介绍的是单叶双曲面。
单叶双曲面是一种直纹面(Ruled_surface),即它是由一族直线铺成的曲面。
直线 x=1, y=t, z=2t 绕 z 轴旋转得到的单叶双曲面。
with(plots):
x:=t->1:y:=t->t:z:=t->2*t:
u:=t->sqrt(x(t)^2+y(t)^2):a:=-1.3:b:=1.3:
qumian:=plot3d([u(t)*cos(theta),u(t)*sin(theta),z(t)],t=a..b,theta=0..2*Pi,scaling=constrained):
quxian:=spacecurve([x(t),y(t),z(t)],t=a-0.3..b+0.3,thickness=4,color=red):
display(qumian,quxian,axes=none,grid=[54,76],lightmodel=light2);
一点遗憾:用以上参数方程画出的曲面不能显示单叶双曲面上的直纹。
为了显示直纹,可将直线用正交变换实现绕 z 轴的旋转,相应的参数方程是:
看到了吧?直纹出来了!
with(plots):
x:=t->1:y:=t->t:z:=t->2*t:
a:=-1.2:b:=1.2:
qumian:=plot3d([x(t)*cos(s)-y(t)*sin(s),x(t)*sin(s)+y(t)*cos(s),z(t)],t=a..b,s=0..2*Pi,scaling=constrained):
quxian:=spacecurve([x(t),y(t),z(t)],t=a-0.1..b+0.1,thickness=4,color=red):
display(qumian,quxian,axes=none,grid=[54,76],lightmodel=light2);
with(plots):
x:=t->1:y:=t->t:z:=t->t:
a:=-1.3:b:=1.3:
ti:=5:
qumian:=plot3d([x(t)*cos(theta)-y(t)*sin(theta),x(t)*sin(theta)+y(t)*cos(theta),z(t) ],t=a..b,theta=0..ti, scaling=constrained,color=grey):
muxian:=spacecurve([x(t)*cos(ti)-y(t)*sin(ti),x(t)*sin(ti)+y(t)*cos(ti),z(t)],t=a-0.5..b+0.5,thickness=5,color=red):
display(qumian,muxian,axes=normal,lightmodel=light4);
with(plots):
x:=t->1:y:=t->t:z:=t->2*t:
a:=-1.3:b:=1.3:
K:=80:for i from 1 to K do ti:=i*4*Pi/K:
qumian[i]:=plot3d([x(t)*cos(theta)-y(t)*sin(theta),x(t)*sin(theta)+y(t)*cos(theta),z(t) ],t=a..b,theta=0..ti, scaling=constrained):
muxian[i]:=spacecurve([x(t)*cos(ti)-y(t)*sin(ti),x(t)*sin(ti)+y(t)*cos(ti),z(t)],t=a-0.5..b+0.5,thickness=3,color=red) od:
qumian:=display(seq(qumian[i],i=1..K),insequence=true):
muxian:=display(seq(muxian[i],i=1..K),insequence=true):
display(qumian,muxian,axes=normal);
以下程序让动画中的各帧画面以“连环画”的形式出现(这里只输出了6帧画面):
with(plots):
x:=t->1:y:=t->t:z:=t->2*t:
a:=-1.3:b:=1.3:
K:=6:for i from 1 to K do ti:=i*2*Pi/K:
qumian[i]:=plot3d([x(t)*cos(theta)-y(t)*sin(theta),x(t)*sin(theta)+y(t)*cos(theta),z(t) ],t=a..b,theta=0..ti, scaling=constrained):
muxian[i]:=spacecurve([x(t)*cos(ti)-y(t)*sin(ti),x(t)*sin(ti)+y(t)*cos(ti),z(t)],t=a-0.5..b+0.5,thickness=3,color=red):
AA[i]:=display(qumian[i],muxian[i],orientation=[20,70]) od:
AA:=display(seq(AA[i],i=1..K),insequence=true):
display(AA);
以下程序中使用了4*floor(i/4),使动画产生跳动的效果(每4帧变化一次):
with(plots):
x:=t->1:y:=t->t:z:=t->2*t:
a:=-1.3:b:=1.3:
K:=80:for i from 1 to K do ti:=i*2*Pi/K:
qumian[i]:=plot3d([x(t)*cos(theta)-y(t)*sin(theta),x(t)*sin(theta)+y(t)*cos(theta),z(t) ],t=a..b,theta=0..ti, scaling=constrained):
muxian[i]:=spacecurve([x(t)*cos(ti)-y(t)*sin(ti),x(t)*sin(ti)+y(t)*cos(ti),z(t)],t=a-0.5..b+0.5,thickness=3,color=red): AA[i]:=display(qumian[i],muxian[i]) od:
display(seq(AA[4*floor(i/4)],i=4..K),insequence=true,axes=normal);
直线 x=t, y=1, z=t 绕 x 轴旋转得到的单叶双曲面:
with(plots):
x:=t->t:y:=t->1:z:=t->t:
K:=40:for i from 1 to K do ti:=i*2*Pi/K:
qumian[i]:=plot3d([x(t),y(t)*cos(theta)-z(t)*sin(theta),y(t)*sin(theta)+z(t)*cos(theta)],t=-1..1,theta=0..ti, scaling=constrained):
muxian[i]:=spacecurve([x(t),y(t)*cos(ti)-z(t)*sin(ti),y(t)*sin(ti)+z(t)*cos(ti)],t=-1.3..1.3,thickness=3,color=red) od:
qumian:=display(seq(qumian[i],i=1..K),insequence=true):
muxian:=display(seq(muxian[i],i=1..K),insequence=true):
display(qumian,muxian);
单叶双曲面的应用
由于有良好的稳定性和漂亮的外观,单叶双曲面常常应用于一些大型的建筑结构,如发电厂的冷却塔、电视塔等等(见 Hyperboloid structure)。
为迎接2010年亚运会而正在修建的广州电视塔(高度610m ,中国最高的建筑)的主体结构就是一个典型的单叶双曲面(如图)。
火电厂的冷却塔常用的外形之一就是旋转单叶双曲面,它的优点是对流快、散热效果好。(详见)
英国Didcot发电厂(Didcot Power Station)的冷却塔(Cooling Tower)
评论