例3 Plot3D[x^2,{x,-2,2},{y,

Download Report

Transcript 例3 Plot3D[x^2,{x,-2,2},{y,

科学计算软件
三维图形
第五章
5.1 绘制二元函数的图形
具有两个变量的函数可以看作是三维空间中的曲面。
绘制曲面的最简单命令是Plot3D
 Plot3D[f[x,y],{x,xmin,xmax},{y,ymin,ymax}]
 绘制函数f[x,y]在矩形xmin<=x<=xmax,ymin
<=y<=ymax上定义的三维曲面
 例1
Plot3D[Sin[x-y],{x,-Pi,Pi},{y,-Pi,Pi}]

5.1 绘制二元函数的图形

f[x,y]在给定的矩形内有无数个值,使用计算机绘
图只能计算出其中有限个点处的值,绘制出的曲面
实际上是由有限块简单曲面构成的(类似的一维函
数的图形是由若干段直线段构成的)

PlotPoints选项指定生成图形式在每个方向(x、y)上
所用的点数(采样点),默认值为15。

也就是说将给定的矩形(xmin,xmax)*(ymin,ymax)
分成14*14的网格,先计算出每个网格点上的函数
值(共有15*15个),再由相邻的4个点确定一个曲面
5.1 绘制二元函数的图形

PlotPoints->n:指定在每个方向上取n个点
 PlotPoints->{nx,xy}:指定在x轴和y轴的采样点个
数
 例2
f[x_,y_]=x^2 y^2 Exp[-(x^2+y^2)];
Plot3D[f[x,y],{x,-2,2},{y,-2,2}];
Plot3D[f[x,y],{x,-2,2},{y,-2,2},PlotPoints->25];
Plot3D[f[x,y],{x,-2,2},{y,-2,2},PlotPoints->40];
Plot3D命令的选项





Axes->False:不显示坐标轴
Axes->{True|False,True|False,True|False}:分别控
制三个坐标轴是否显示
Boxed->False:不显示包围图形的盒子
BoxRations->{sx,sy,sz}:指定三维图形包围盒各边
长度的比率
Ticks->False:不显示所有坐标轴上的刻度以及相
应的标签
Plot3D命令的选项





Ticks->{True|False,True|False,True|False}:控制每
个坐标轴是否显示刻度
FaceGrids控制是否绘制在包围盒的每个侧面上显
示网格线
FaceGrids->All:在包围盒的所有6个侧面上显示格
线
FaceGrids->None:不绘制任何格线
FaceGrids->{ {x1,y1,z1}, {x2,y2,z2}... {x6,y6,z6}}:
定义每个侧面的格线,每个列表的三个数中有两个
必须为0,第三个为±1
Plot3D命令的选项





AxesEdge->Automatic 由系统确定显示哪个边界轴
BoxStyle:指定包围盒的绘制方式,如Dashing,
Thickness,GrayLevel或RGBColor
Mesh:确定在曲面上是否显示格线
Shading:确定是否给曲面加阴影效果。默认值为
Shading->True
下面以几种不同方式绘制抛物柱面z=x^2
5.1 绘制二元函数的图形
例3
Plot3D[x^2,{x,-2,2},{y,-2,2}]
Plot3D[x^2,{x,-2,2},{y,-2,2},Mesh->False]
Plot3D[x^2,{x,-2,2},{y,-2,2},Shading->False]
Plot3D[x^2,{x,-2,2},{y,-2,2},BoxRatios->{1,1,1}]
Plot3D[x^2,{x,-2,2},{y,-2,2},FaceGrids->{{1,0,0}, {0,1,0}}]
Plot3D[x^2,{x,-2,2},{y,-2,2},AxesEdge->{{-1,1},{1,1},
{1,-1}}]

Plot3D命令的选项
在三维图形中,为了获得较好的立体透视效果,默
认对曲面添加阴影,产生遮挡效果,即被可见曲面
遮挡的曲面是不可见的
 使用Shading->False使得不进行阴影处理,但是曲
面仍是不透明的
 使用HiddenSurface->False将曲面绘制成透明的,
只画出连接线段。该选项的缺省值为True

Plot3D命令的选项
例4
Plot3D[1-y^2,{x,-5,5},{y,-5,5},BoxRatios->{1,1,2},
Boxed->False,Axes->False];
Plot3D[1-y^2,{x,-5,5},{y,-5,5},BoxRatios->{1,1,2},
Boxed->False,Axes->False,Shading->False];
Plot3D[1-y^2,{x,-5,5},{y,-5,5},BoxRatios->{1,1,2},
Boxed->False,Axes->False,HiddenSurface->False];

透视效果:观察的角度





三维图形的透视图的效果与观察点的位置密切相关
ViewPoint->{x,y,z}:给出相当于要绘制曲面的包围
盒中心的视点位置
对于视点坐标而言,包围盒的最长边被缩放为1,
视点必须在包围盒的外部
ViewPoint参数的默认值为{1.3,-2.4,2.0}
Input->3D ViewPoint Selector:图形界面交互观察
不同视点的透视效果
透视效果:观察的角度
例5
Plot3D[x^2-y^2,{x,-5,5},{y,-5,5},BoxRatios->{1,1,1}];
Plot3D[x^2-y^2,{x,-5,5},{y,-5,5},BoxRatios->{1,1,1},
ViewPoint->{2,2,2}];
Plot3D[x^2-y^2,{x,-5,5},{y,-5,5},BoxRatios>{1,1,1},ViewPoint->{1.5,-2.6,-1.5}];

空间参数曲线的绘制

ParametricPlot3D[{x[t],y[t],z[t]},{t,tmin,tmax}]:
绘制以t为参数的三维曲线
 ParametricPlot3D[{x[s,t],y[s,t],z[s,t]},{s,smin,smax},
{t,tmin,tmax}]]绘制由s,t为参数的三维曲面
空间参数曲线的绘制
例7
ParametricPlot3D[{Cos[t],Sin[t],t/4},{t,0,4 Pi},
ViewPoint->{1.292,-2.788,1.418}]
ParametricPlot3D[{Sin[s+t],Cos[s+t],s},{s,-2,2},{t,2,2}]

5.2 其它的绘图命令






ContourPlot[f[x,y],{x,xmin,max},{y,ymin,ymax}]:
绘制函数f[x,y]在给定矩形上的等高线
Mathematica中绘制的等高线采用了与地图中等高
线绘制的类似处理,采用颜色的深浅来表示值的大
小:值越大的区域,颜色越浅,反之亦反。
Contours->n:确定要绘制的轮廓数,缺省为10
Contours->{k1,k2,...}:指定等高线的值
ContourShading->False:不显示阴影
ContourLines->False:去掉轮廓段
回答:2007-02-17 17:39
共2条评论...
等高线图
例9 给出抛物面z=x^2+y^2的等高线图。
ContourPlot[x^2+y^2,{x,-10,10},{y,-10,10}]
ContourPlot[x^2+y^2,{x,-10,10},{y,-10,10},
ContourLines->False]
ContourPlot[x^2+y^2,{x,-10,10},{y,-10,10},
ContourShading->False]
ContourPlot[x^2+y^2,{x,-10,10},{y,-10,10},
ContourShading->False, ContourLines->False]

密度图
与等高线图不同,密度图将定义域分成规则的网格,
在每个网格上由一个采样值的大小确定颜色的深浅。
越淡的区域表示的值越高
 DensityPlot[f[x,y],{x,xmin,xmax},{y,ymin,ymax}]

例10
DensityPlot[x^2+y^2,{x,-10,10},{y,-10,10}];
DensityPlot[x^2+y^2,{x,-10,10},{y,-10,10},Mesh>False];


ListContourPlot[array]:生成二维数组的轮廓图
 ListDensityPlot[array]:生成二维数组的密度图
例11
lst=Table[Random[],{x,1,10},{y,1,10}];
ListContourPlot[lst,MeshRange->{{-5,5},{3,7}}];
ListDensityPlot[lst,MeshRange->{{-5,5},{3,7}}];


ContourPlot3D[f[x,y,z],{x,xmin,xmax}, {y,ymin,
ymax},{z,zmin,zmax}]:在由xmin,xmax,ymin,
ymax,zmin,zmax确定的盒子中绘出层次曲面
f(x,y,z)=0的三维轮廓图
 选项
 Contours->{k1,k2,...}:绘制相应于k1,k2,...的层
次曲面
 PlotPoints->{nx,ny}:确定在x方向和y方向的采
样点数
例12
<<Graphics`ContourPlot3D`
ContourPlot3D[z-x^2-y^2,{x,-5,5},{y,-5,5},{z,0,10},
Contours->{0.,5.},
BoxRatios->{1,1,1},
PlotPoints->5];


ListContourPlot3D是ContourPlot3D的离散形式,
包含在软件包Graphics`ContourPlot3D`中
 ListContourPlot3D[array]:绘制由三维数组f中的
数确定的轮廓图

例14 生成函数f[x,y,z]=x^2+y^2+z^2的一组离散值,
并绘制对应于k=0.5与k=1.5的两个轮廓
<<Graphics`ContourPlot3D`
lst=Table[x^2+y^2+z^2,{x,-1,1,.25},{y,-1,1,.25}, {z,1,1,.25}];
ListContourPlot3D[lst,MeshRange->{{-1,1},{-1,1},{1,1}},Contours->{.5,1.5},Axes->True]
5.3 特殊的三维图形
在软件包Graphics`Graphics3D`中包含大量实用的
绘图命令
 BarChart3D[array]:利用array确定高度,构造三
维的柱形图。array={{z11,z12,...}, {z21,z22,...},...}
zij表示柱(i,j)的高度
 XSpacing与YSpacing:确定在x方向与y方向上柱之
间的距离,取值在[0,1]之间
 SolidBarEdge->False:去掉柱之间的边界

柱形图
例15
<<Graphics`Graphics3D`
lst={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
BarChart3D[lst,AxesLabel->{"x","y","z"}];
BarChart3D[lst,XSpacing->.5,YSpacing>.5,AxesLabel->{"x","y","z"}];

点在三维空间中的分布图

ScatterPlot3D[lst]:在三维盒子中绘制包含在lst中
的点形成的图形。lst必须是由子列表构成的列表,
每个子列表由三个数构成,表示点的坐标。该函数
是ListPlot的三维形式
 ScatterPlot3D函数包含在Graphics`Graphics3D`软
件包中
点在三维空间中的分布图
例16 在三维空间中生成50个随机点,然后在三维
空间中绘制它们的图形
<<Graphics`Graphics3D`
lst = Table[Random[Integer,{1,10}],{50},{3}];
ScatterPlot3D[lst]
ScatterPlot3D[lst,PlotStyle->PointSize[.02]];
ScatterPlot3D[lst,PlotJoined->True];

5.3 特殊的三维图形

ListSurfacePlot3D[lst]:从列表lst中指定的顶点构
造多边形网格。其中lst的形式为
{{{x11,y11,z11},{x12,y12,z12},...}
{{x21,y21,z21},{x22,y22,z22},...},...}
 例17
<<Graphics`Graphics3D`
lst=Table[{x,y,x^2-y^2},{x,-3,3},{y,-3,3}];
ListSurfacePlot3D[lst,Axes->True,BoxRatios->{1,1,1}]
旋转曲面
旋转曲面是由沿给定直线旋转一曲线得到的曲面。
软件包Graphisc`SurfaceOfRevolution`中包含的命
令SurfaceOfRevolution可以构造旋转曲面
 SurfaceOfRevolution[f[x],{x,xmin,xmax}]:通过绕
z轴旋转曲线z=f(x),xmin<=x<=xmax构造旋转面
 SurfaceOfRevolution[f[x],{θ, θmin, θmax}]:通过
绕z轴旋转曲线z=f(x),xmin<=x<=xmax构造部分旋
转面,其中θmin<= θ <= θmax

旋转曲面

SurfaceOfRevolution[x[t],y[t],z[t],{t,tmin,tmax}]:
通过绕z轴旋转参数曲线x=x(t), y=y(t), z=z(t),
tmin<=t<=tmax构造旋转面
旋转曲面
例 18
<<Graphics`SurfaceOfRevolution`
SurfaceOfRevolution[x^2,{x,0,3}];
SurfaceOfRevolution[x^2,{x,0,3},{a,0,3 Pi/2}];

旋转曲面
选项RevolutionAxis可以指定不同于z轴的其它旋转
轴
 RevolutionAxis->{x,z}:曲线沿x-z平面上原点与
(x,z)点间连线旋转
 RevolutionAxis->{x,y,z}:曲线沿空间中原点与
(x,y,z)点间连线旋转

旋转曲面
例19
<<Graphics`SurfaceOfRevolution`
SurfaceOfRevolution[x^2,{x,0,3},RevolutionAxis>{1,0},BoxRatios->{1,1,1},Ticks->False,AxesLabel>{"x","y","z"}];
SurfaceOfRevolution[x^2,{x,0,3},RevolutionAxis>{1,1,1},BoxRatios->{1,1,1},Ticks>False,AxesLabel->{"x","y","z"}];

5.4 标准形状—三维图形基本单元





Graphics3D[基本单元]:创建三维的图形对象,可
用Show命令查看结果
Cuboid[{x,y,x}]:角点在(x,y,z)的单位立方体,所有
边平行于坐标轴 (adj.立方体的, 立方的)
cube: n.立方体, 立方
Cuboid[{x1,y1,z1},{x2,y2,z2}]对角点为(x1,y1,z1)和
(x2,y2,z2)的长方体
Line[{x1,y1,z1},{x2,y2,z2},...]:连接(x1,y1,z1),
(x2,y2,z2),...的一系列线段
5.4 标准形状—三维图形基本单元

Point[{x,y,z}]:坐标为(x,y,z)的点
 Polygon[{x1,y1,z1},{x2,y2,z2},...]:顶点坐标为
(x1,y1,z1),(x2,y2,z2),...的填充多边形
 Text[表达式,{x,y,z}]由中心位于(x,y,z)的表达式文本
构成的图形基本单元(文本框)
5.4 标准形状—三维图形基本单元

例 20
Show[Graphics3D[{Cuboid[{0,0,0}],Cuboid[{1,1,1},
{2,3,4}]}],Axes->True,Ticks->{{0,1,2},{0,1,2,3},
{0,1,2,3,4}}]
例21
vertices={{0,0,0},{2,2,0},{0,2,1},{0,0,2}};
Show[Graphics3D[Polygon[vertices]],Axes->True,
Ticks->{{0,1,2},{0,1,2},{0,1,2}}]

5.4 标准形状—三维图形基本单元

Cylinder[r,h,n]:使用n个多边形绘制一个圆柱,半
径为r,半高为h
 Sphere[r,n,m]:使用n(m-2)+2个多边形绘制半径为
r的球面
 Cone[r,h,n]:使用n个多边形绘制底面半径为r,半
高为h的圆锥面
 Torus[r1,r2,n,m]:使用n*m网格绘制半径为r1与r2
的圆环面
5.4 标准形状—三维图形基本单元

MoebiusStrip[r1,r2,n]:使用2n个多边形绘制半径
为r1和r2的Möbius带
 Helix[r,h,m,n]:利用n*m网格绘制半径为r,半高
为h,有m个来回的螺旋面
 DoubleHelix[r,h,m,n]:利用n*m网格绘制半径为r,
半高为h,有m个来回的双螺旋面
 上述命令在没有指定参数时都有默认值,见P145
5.4 标准形状—三维图形基本单元
例22
<<Graphics`Shapes`
Show[Graphics3D[Cylinder[]]];
Show[Graphics3D[Sphere[]]];
Show[Graphics3D[Cone[]]];
Show[Graphics3D[Torus[]]];
Show[Graphics3D[MoebiusStrip[]]];
Show[Graphics3D[Helix[]]];
Show[Graphics3D[DoubleHelix[]]];


WireFrame[对象]:把在构造对象时使用的全部多
边形显示为透明的。可以作用到任何包含基本单位
Polygon,Line与Point等的Graphics3D对象上
 wire: adj.金属丝制的
 例 23
<<Graphics`Shapes`
object=Graphics3D[Torus[]];
Show[object];
Show[WireFrame[object]];
空间变换





在Graphics`Shapes`中有三条进行空间变换的命令
RotateShape[对象,φ,θ,ψ]利用欧拉角φ,θ,ψ
旋转对象:先沿z轴旋转φ角,再沿新的y轴旋转θ
角,最后沿这些旋转所得到的新z轴旋转ψ角
TranslateShape[对象,{x,y,z}]把对象平移向量(x,y,z)
AffineShape[对象,{xscale,yscale,zscale}]把x,y,z坐标
分别进行因子为xscale,yscale,zscale的放缩变换
affine adj.[数]仿射(几何学)的
欧拉角静态的定义
对于在三维空间里的一个参
考系,任何坐标系的取向,
可以用三个欧拉角来表现
 参考系又称为实验室参考系,
是静止不动的。
 坐标系则固定于刚体,随着
刚体的旋转而旋转。
三个欧拉角:α,β, γ 蓝
 设定 xyz-轴为参考系的参考 色: xyz-轴,红色: XYZ轴。称 xy-平面与 XY-平面 坐标轴。绿色的线是交点
的相交为交点线,用N表示 线 (N) 。

欧拉角静态的定义
对于任何一个参考系,一个
刚体的取向,是依照顺序,
从这参考系,做三个欧拉角
的旋转而设定的。
 zxz 顺规的欧拉角可以静态
地这样定义:
 α x-轴与交点线的夹角
 β z-轴与Z-轴的夹角
 γ 交点线与X-轴的夹角

欧拉角静态的定义
对于夹角的顺序和标记,夹角的两个轴的指定,并
没有任何常规。
 实际上,有许多方法可以设定两个坐标系的相对取
向。欧拉角方法只是其中的一种。此外,不同的作
者会用不同组合的欧拉角来描述,或用不同的名字
表示同样的欧拉角。因此,使用欧拉角前,必须先
做好明确的定义。
 角值范围

值从 0 至 2π 弧度。
 β 值从 0 至 π 弧度。

空间变换
例24
<<Graphics`Shapes`
shape=Helix[];
object=Graphics3D[shape];
Show[object];
Show[RotateShape[object,0,Pi/2,0]];
Show[RotateShape[object,0,Pi/2,Pi/2]];

空间变换
Show[object,TranslateShape[object,{1,2,3}]];
shrunkenobject=AffineShape[object,{.5,.5,.5}];
Show[object,TranslateShape[shrunkenobject,{1,2,3}]]
习题解答
5.22 绘制互相垂直的两个圆柱的图形
<<Graphics`Shapes`
cyl1=Graphics3D[Cylinder[1,5,20]];
cyl2=Graphics3D[RotateShape[Cylinder[1,5,20],0,Pi/
2,0]];
Show[cyl1,cyl2];

构造一个位于半径为1的球面内部的圆柱
<<Graphics`Shapes`
sph=WireFrame[Graphics3D[Sphere[]]];
cy1=Graphics3D[Cylinder[1/2,Sqrt[3]/2,20]];
Show[sph,cy1,Boxed->False];
