Download presentation
Presentation is loading. Please wait.
1
科学计算软件 第五章 三维图形
2
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}]
3
5.1 绘制二元函数的图形 f[x,y]在给定的矩形内有无数个值,使用计算机绘图只能计算出其中有限个点处的值,绘制出的曲面实际上是由有限块简单曲面构成的(类似的一维函数的图形是由若干段直线段构成的) PlotPoints选项指定生成图形式在每个方向(x、y)上所用的点数(采样点),默认值为15。 也就是说将给定的矩形(xmin,xmax)*(ymin,ymax) 分成14*14的网格,先计算出每个网格点上的函数值(共有15*15个),再由相邻的4个点确定一个曲面
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];
5
Plot3D命令的选项 Axes->False:不显示坐标轴
Axes->{True|False,True|False,True|False}:分别控制三个坐标轴是否显示 Boxed->False:不显示包围图形的盒子 BoxRations->{sx,sy,sz}:指定三维图形包围盒各边长度的比率 Ticks->False:不显示所有坐标轴上的刻度以及相应的标签
6
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
7
Plot3D命令的选项 AxesEdge->Automatic 由系统确定显示哪个边界轴
BoxStyle:指定包围盒的绘制方式,如Dashing, Thickness,GrayLevel或RGBColor Mesh:确定在曲面上是否显示格线 Shading:确定是否给曲面加阴影效果。默认值为Shading->True 下面以几种不同方式绘制抛物柱面z=x^2
8
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}}]
9
Plot3D命令的选项 在三维图形中,为了获得较好的立体透视效果,默认对曲面添加阴影,产生遮挡效果,即被可见曲面遮挡的曲面是不可见的
使用Shading->False使得不进行阴影处理,但是曲面仍是不透明的 使用HiddenSurface->False将曲面绘制成透明的,只画出连接线段。该选项的缺省值为True
10
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];
11
透视效果:观察的角度 三维图形的透视图的效果与观察点的位置密切相关
ViewPoint->{x,y,z}:给出相当于要绘制曲面的包围盒中心的视点位置 对于视点坐标而言,包围盒的最长边被缩放为1,视点必须在包围盒的外部 ViewPoint参数的默认值为{1.3,-2.4,2.0} Input->3D ViewPoint Selector:图形界面交互观察不同视点的透视效果
12
透视效果:观察的角度 例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}];
13
空间参数曲线的绘制 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为参数的三维曲面
14
空间参数曲线的绘制 例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}]
15
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:去掉轮廓段
16
回答: :39 共2条评论...
18
等高线图 例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]
19
密度图 与等高线图不同,密度图将定义域分成规则的网格,在每个网格上由一个采样值的大小确定颜色的深浅。越淡的区域表示的值越高
DensityPlot[f[x,y],{x,xmin,xmax},{y,ymin,ymax}]
20
例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];
21
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}}];
22
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方向的采样点数
23
例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];
24
ListContourPlot3D是ContourPlot3D的离散形式,包含在软件包Graphics`ContourPlot3D`中
ListContourPlot3D[array]:绘制由三维数组f中的数确定的轮廓图
25
例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]
26
5.3 特殊的三维图形 在软件包Graphics`Graphics3D`中包含大量实用的绘图命令
BarChart3D[array]:利用array确定高度,构造三维的柱形图。array={{z11,z12,...}, {z21,z22,...},...} zij表示柱(i,j)的高度 XSpacing与YSpacing:确定在x方向与y方向上柱之间的距离,取值在[0,1]之间 SolidBarEdge->False:去掉柱之间的边界
27
柱形图 例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"}];
28
点在三维空间中的分布图 ScatterPlot3D[lst]:在三维盒子中绘制包含在lst中的点形成的图形。lst必须是由子列表构成的列表,每个子列表由三个数构成,表示点的坐标。该函数是ListPlot的三维形式 ScatterPlot3D函数包含在Graphics`Graphics3D`软件包中
29
点在三维空间中的分布图 例16 在三维空间中生成50个随机点,然后在三维空间中绘制它们的图形
<<Graphics`Graphics3D` lst = Table[Random[Integer,{1,10}],{50},{3}]; ScatterPlot3D[lst] ScatterPlot3D[lst,PlotStyle->PointSize[.02]]; ScatterPlot3D[lst,PlotJoined->True];
30
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}]
31
旋转曲面 旋转曲面是由沿给定直线旋转一曲线得到的曲面。软件包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
32
旋转曲面 SurfaceOfRevolution[x[t],y[t],z[t],{t,tmin,tmax}]:通过绕z轴旋转参数曲线x=x(t), y=y(t), z=z(t), tmin<=t<=tmax构造旋转面
33
旋转曲面 例 18 <<Graphics`SurfaceOfRevolution`
SurfaceOfRevolution[x^2,{x,0,3}]; SurfaceOfRevolution[x^2,{x,0,3},{a,0,3 Pi/2}];
34
旋转曲面 选项RevolutionAxis可以指定不同于z轴的其它旋转轴
RevolutionAxis->{x,z}:曲线沿x-z平面上原点与(x,z)点间连线旋转 RevolutionAxis->{x,y,z}:曲线沿空间中原点与(x,y,z)点间连线旋转
35
旋转曲面 例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"}];
36
5.4 标准形状—三维图形基本单元 Graphics3D[基本单元]:创建三维的图形对象,可用Show命令查看结果
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),...的一系列线段
37
5.4 标准形状—三维图形基本单元 Point[{x,y,z}]:坐标为(x,y,z)的点
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)的表达式文本构成的图形基本单元(文本框)
38
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}}]
39
5.4 标准形状—三维图形基本单元 Cylinder[r,h,n]:使用n个多边形绘制一个圆柱,半径为r,半高为h
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的圆环面
40
5.4 标准形状—三维图形基本单元 MoebiusStrip[r1,r2,n]:使用2n个多边形绘制半径为r1和r2的Möbius带
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
41
5.4 标准形状—三维图形基本单元 例22 <<Graphics`Shapes`
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[]]];
42
WireFrame[对象]:把在构造对象时使用的全部多边形显示为透明的。可以作用到任何包含基本单位Polygon,Line与Point等的Graphics3D对象上
wire: adj.金属丝制的 例 23 <<Graphics`Shapes` object=Graphics3D[Torus[]]; Show[object]; Show[WireFrame[object]];
43
空间变换 在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.[数]仿射(几何学)的
44
欧拉角静态的定义 对于在三维空间里的一个参考系,任何坐标系的取向,可以用三个欧拉角来表现 参考系又称为实验室参考系,是静止不动的。
坐标系则固定于刚体,随着刚体的旋转而旋转。 设定 xyz-轴为参考系的参考轴。称 xy-平面与 XY-平面的相交为交点线,用N表示 三个欧拉角:α,β, γ 蓝色: xyz-轴,红色: XYZ-坐标轴。绿色的线是交点线 (N) 。
45
欧拉角静态的定义 对于任何一个参考系,一个刚体的取向,是依照顺序,从这参考系,做三个欧拉角的旋转而设定的。
zxz 顺规的欧拉角可以静态地这样定义: α x-轴与交点线的夹角 β z-轴与Z-轴的夹角 γ 交点线与X-轴的夹角
46
欧拉角静态的定义 对于夹角的顺序和标记,夹角的两个轴的指定,并没有任何常规。
实际上,有许多方法可以设定两个坐标系的相对取向。欧拉角方法只是其中的一种。此外,不同的作者会用不同组合的欧拉角来描述,或用不同的名字表示同样的欧拉角。因此,使用欧拉角前,必须先做好明确的定义。 角值范围 值从 0 至 2π 弧度。 β 值从 0 至 π 弧度。
47
空间变换 例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]];
48
空间变换 Show[object,TranslateShape[object,{1,2,3}]];
shrunkenobject=AffineShape[object,{.5,.5,.5}]; Show[object,TranslateShape[shrunkenobject,{1,2,3}]]
49
习题解答 5.22 绘制互相垂直的两个圆柱的图形 <<Graphics`Shapes`
cyl1=Graphics3D[Cylinder[1,5,20]]; cyl2=Graphics3D[RotateShape[Cylinder[1,5,20],0,Pi/2,0]]; Show[cyl1,cyl2];
50
构造一个位于半径为1的球面内部的圆柱 <<Graphics`Shapes` sph=WireFrame[Graphics3D[Sphere[]]]; cy1=Graphics3D[Cylinder[1/2,Sqrt[3]/2,20]]; Show[sph,cy1,Boxed->False];
Similar presentations