第09章Maple的3D图形数据对象及其绘图.docx
- 文档编号:12228512
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:36
- 大小:500.46KB
第09章Maple的3D图形数据对象及其绘图.docx
《第09章Maple的3D图形数据对象及其绘图.docx》由会员分享,可在线阅读,更多相关《第09章Maple的3D图形数据对象及其绘图.docx(36页珍藏版)》请在冰豆网上搜索。
第09章Maple的3D图形数据对象及其绘图
第九章3D图形数据对象及其绘图
图9-01~113D图形数据对象的类型
图9-01~03GRID的数据结构及其对应图形
PLOT3D(GRID(1..3,1..4,[[4,3,5,2],[3,5,7,0],[2,8,4,6]]),COLOR(RGB,1,0,0),AXESSTYLE(FRAME));
图1第一种语句给出的GRID对象
plot3d(x*y,x=-3..3,y=-4..4,grid=[3,4],axes=box,orientation=[-12,64]);Q:
=%:
lprint(Q);
图2第二种形式的GRID对象通常出现在返回信息中
PLOT3D(GRID(-3...3.,-4...4.,Array(1..3,1..4,{(1,1)=12.,(1,2)=4.,(1,3)=-3.99999999999999912,(1,4)=-11.9999999999999982,(3,1)=-12.,(3,2)=-4.,(3,3)=3.99999999999999912,(3,4)=11.9999999999999982},datatype=float[8],storage=rectangular,order=C_order)),ORIENTATION(-12.,64.),AXESLABELS(x,y,""),AXESSTYLE(BOX))
若从返回的图形数据结构中取出Array,放入执行组中执行之后,返回一个三行四列矩阵样子的二维数组。
其各个元素的数值,正是Array中各个等式右端的数值。
该等式左端括号中的正整数是矩阵的行码和列码。
元素值为0的相关Array等式省略不写。
Array(1..3,1..4,{(1,1)=12.,(1,2)=4.,(1,3)=-3.99999999999999912,(1,4)=-11.9999999999999982,(3,1)=-12.,(3,2)=-4.,(3,3)=3.99999999999999912,(3,4)=11.9999999999999982},datatype=float[8],storage=rectangular,order=C_order);
同一个单片曲面图形,可以使用两种形式的数据结构表示它的数据对象,效果是相同的。
a:
=-3:
b:
=3:
c:
=-4:
d:
=4:
m:
=3:
n:
=4:
GRID(a..b,c..d,[seq([seq((a+(b-a)*i/m)*(c+(d-c)*j/n),j=0..n)],i=0..m),COLOR(RGB,0,1,1)
]):
dvxd1:
=%:
PLOT3D(dvxd1,AXESLABELS(x,y,""),AXES(BOX),ORIENTATION(-12,64));
GRID(a..b,c..d,Array(1..m,1..n,{(1,1)=12.,(1,2)=4.,(1,3)=-3.99999999999999912,(1,4)=-11.9999999999999982,(3,1)=-12.,(3,2)=-4.,(3,3)=3.99999999999999912,(3,4)=11.9999999999999982},datatype=float[8],storage=rectangular,order=C_order),COLOR(RGB,1,1,0)
):
dvxd2:
=%:
PLOT3D(dvxd2,AXESLABELS(x,y,""),AXES(BOX),ORIENTATION(-12,64));
图3两种形式数据结构表示的数据对象效果相同(注意两图分割份数有差别)
图9-04~06MESH的数据结构及其对应图形
PLOT3D(MESH([[[1,2,1],[2,3,1]],[[4,3,2],[3,2,4]],[[5,4,3],[3,0,5]]]));
lprint(%);
图4MESH的对象信息必需是listoflistsoflists
PLOT3D(MESH([[[1,2,1],[2,3,1]],[[4,3,2],[3,2,4]],[[5,4,3],[3,0,5]]]))
后一种书写格式,往往出现在参数曲面图形数据O/S的返回信息中。
plot3d([x,y,x*y],x=0..6,y=0..6,grid=[3,4]);lprint(%);
图5后一种书写格式往往出现返回信息中
PLOT3D(MESH(Array(1..3,1..4,1..3,{(2,1,1)=3.,(2,2,1)=3.,(2,3,1)=3.,(2,4,1)=3.,(1,2,2)=2.,(1,3,2)=4.,(1,4,2)=6.,(2,2,3)=6.,(2,3,2)=4.,(2,3,3)=12.,(2,4,2)=6.,(2,4,3)=18.,(3,1,1)=6.,(3,2,1)=6.,(3,2,2)=2.,(3,2,3)=12.,(3,3,1)=6.,(3,3,2)=4.,(3,3,3)=24.,(3,4,1)=6.,(3,4,2)=6.,(3,4,3)=36.,(2,2,2)=2.},datatype=float[8],storage=rectangular,order=C_order)))
也可以从返回的图形数据结构中取出Array,放入执行组中执行。
但,此时再无法像GRID中的Array那样返回矩阵样子的数组了,因为这时的Array是一个三维数组(3D的Array)。
Array(1..3,1..4,1..3,{(2,1,1)=3.,(2,2,1)=3.,(2,3,1)=3.,(2,4,1)=3.,(1,2,2)=2.,(1,3,2)=4.,(1,4,2)=6.,(2,2,3)=6.,(2,3,2)=4.,(2,3,3)=12.,(2,4,2)=6.,(2,4,3)=18.,(3,1,1)=6.,(3,2,1)=6.,(3,2,2)=2.,(3,2,3)=12.,(3,3,1)=6.,(3,3,2)=4.,(3,3,3)=24.,(3,4,1)=6.,(3,4,2)=6.,(3,4,3)=36.,(2,2,2)=2.},datatype=float[8],storage=rectangular,order=C_order);:
QW:
=%:
在早期版本中没有Array型的数据,曾有个类似的多维数组hfarray。
MESH(hfarray(1..3,1..2,1..3,[[[0,0.4,0],[0,0,1.6]],[[0.5,0.4,0],[0.8,0.4,1.2]],[[1,1.2,0],[1.1,1.6,2]]])):
DX:
=%:
lprint(DX);
MESH(Array(1..3,1..2,1..3,{(2,2,1)=.800000000000000042,(2,2,2)=.400000000000000022,(3,2,1)=1.10000000000000008,(3,2,2)=1.60000000000000008,(3,2,3)=2.,(1,1,2)=.400000000000000022,(1,2,3)=1.60000000000000008,(2,1,1)=.500000000000000000,(2,1,2)=.400000000000000022,(2,2,3)=1.19999999999999994,(3,1,1)=1.,(3,1,2)=1.19999999999999994},datatype=float[8],storage=rectangular,order=C_order))
MESH(Array(1..3,1..2,1..3,{(2,2,1)=.800000000000000042,(2,2,2)=.400000000000000022,(3,2,1)=1.10000000000000008,(3,2,2)=1.60000000000000008,(3,2,3)=2.,(1,1,2)=.400000000000000022,(1,2,3)=1.60000000000000008,(2,1,1)=.500000000000000000,(2,1,2)=.400000000000000022,(2,2,3)=1.19999999999999994,(3,1,1)=1.,(3,1,2)=1.19999999999999994},datatype=float[8],storage=rectangular,order=C_order)):
DX1:
=%:
PLOT3D(DX1,COLOR(RGB,0,1,1),ORIENTATION(82,67),AXES(FRAME),THICKNESS(3));
图6DX和DX1的显示效果是相同的
图9-07~11ISOSURFACE的数据结构及其对应图形
先来察看一个隐函数曲面图形的数据O/S。
with(plots):
implicitplot3d(x*y*z=1,x=-3..3,y=-3..3,z=-3..3,grid=[13,13,13],axes=NORMAL,orientation=[124,77]);Q1:
=%:
implicitplot3d(x*y*z=1,x=-3..3,y=-3..3,z=-3..3,grid=[3,3,4],axes=NORMAL,orientation=[124,77]);Q2:
=%:
implicitplot3d(x*y*z=1,x=0..3,y=0..3,z=0..3,grid=[2,2,2],axes=box);Q3:
=%:
;
图7在implicitplot3d返回数据中出现第一书写格式的ISOSURFACE对象
lprint(Q3):
PLOT3D(ISOSURFACE(Array(1..2,1..2,1..2,1..4,{(2,1,2,4)=-1.,(2,1,1,4)=-1.,(1,2,2,4)=-1.,(1,2,1,4)=-1.,(2,2,1,4)=-1.,(2,1,1,1)=3.,(2,1,2,1)=3.,(2,1,2,3)=3.,(2,2,1,1)=3.,(2,2,1,2)=3.,(1,1,1,4)=-1.,(1,1,2,3)=3.,(1,1,2,4)=-1.,(1,2,1,2)=3.,(1,2,2,2)=3.,(1,2,2,3)=3.,(2,2,2,1)=3.,(2,2,2,2)=3.,(2,2,2,3)=3.,(2,2,2,4)=26.},datatype=float[8],storage=rectangular,order=C_order)),AXESSTYLE(BOX),AXESLABELS(x,y,""))
从返回中取出数据对象,赋名,经过编辑。
输入执行组中,可以得到显示图形。
with(plots):
Q:
=ISOSURFACE(Array(1..2,1..2,1..2,1..4,
{(1,1,1,4)=-1.,(1,1,2,4)=-1.,
(1,2,1,4)=-1.,(1,2,2,4)=-1.,
(2,1,1,4)=-1.,(2,1,2,4)=-1.,
(2,2,1,4)=-1.,(1,1,2,3)=3.,
(1,2,1,2)=3.,(1,2,2,2)=3.,
(1,2,2,3)=3.,(2,1,1,1)=3.,
(2,1,2,1)=3.,(2,1,2,3)=3.,
(2,2,1,1)=3.,(2,2,1,2)=3.,
(2,2,2,1)=3.,(2,2,2,2)=3.,
(2,2,2,3)=3.,(2,2,2,4)=26.},
datatype=float[8],storage=rectangular,
order=C_order),COLOUR(RGB,0,1,1)):
display3d(Q);
图8用返回数据对象显示出来的图形
若将其内核Array取出赋名为AA,可得4维数组的返回信息表。
Array(1..2,1..2,1..2,1..4,
{(1,1,1,4)=-1.,(1,1,2,4)=-1.,
(1,2,1,4)=-1.,(1,2,2,4)=-1.,
(2,1,1,4)=-1.,(2,1,2,4)=-1.,
(2,2,1,4)=-1.,(1,1,2,3)=3.,
(1,2,1,2)=3.,(1,2,2,2)=3.,
(1,2,2,3)=3.,(2,1,1,1)=3.,
(2,1,2,1)=3.,(2,1,2,3)=3.,
(2,2,1,1)=3.,(2,2,1,2)=3.,
(2,2,2,1)=3.,(2,2,2,2)=3.,
(2,2,2,3)=3.,(2,2,2,4)=26.},
datatype=float[8],storage=rectangular,
order=C_order);:
AA:
=%:
PLOT3D(ISOSURFACE(AA));
图9从返回数据取出内核Array显示的图形
使用第二、三种书写格式,手工输入一个4维数组,也能用ISOSURFACE对象绘图。
[[[[-1,-1,1,.5],[1,1,1,0]],[[1,-1,1,0],[-1,1,1,1]]],
[[[-2,-2,2,1],[2,2,2,0]],[[2,-2,2,0],[-2,2,2,1]]],
[[[-1,-1,3,1],[1,1,3,0]],[[1,-1,3,0],[-1,1,3,1]]]]:
;
AA6:
=%:
PLOT3D(ISOSURFACE(AA6),THICKNESS(3),AXES(BOX),ORIENTATION(108,77),COLOR(RGB,1,1,0));
lprint(%);
PLOT3D(ISOSURFACE(Array(1..3,1..2,1..2,1..4,AA6,datatype=float[8],storage=rectangular,order=C_order)),THICKNESS(3),AXES(BOX),ORIENTATION(108,77),COLOR(RGB,0,1,1));lprint(%);
图10手工输入AA6,再用两种格式做成ISOSURFACE对象的绘图
虽然两者的图形一样,但返回数据有所不同。
前者输入给ISOSURFACE的是个单纯的listoflistsoflists,返回的是同型数据。
后者,输入的是方括号型的Array,返回的却是等式型的Array。
可以将这等式型Array用于绘图,得到与前面两种书写格式同样效果的图形。
PLOT3D(ISOSURFACE(Array(1..3,1..2,1..2,1..4,
{(1,1,1,1)=-1.,(1,1,1,2)=-1.,
(1,1,1,3)=1.,(1,1,1,4)=.500000000000000000,
(1,1,2,1)=1.,(1,1,2,2)=1.,(1,1,2,3)=1.,(1,2,1,1)=1.,(1,2,1,2)=-1.,(1,2,1,3)=1.,(1,2,2,1)=-1.,(1,2,2,2)=1.,(1,2,2,3)=1.,(1,2,2,4)=1.,(2,1,1,1)=-2.,(2,1,1,2)=-2.,(2,1,1,3)=2.,(2,1,1,4)=1.,(2,1,2,1)=2.,(2,1,2,2)=2.,(2,1,2,3)=2.,(2,2,1,1)=2.,(2,2,1,2)=-2.,(2,2,1,3)=2.,(2,2,2,1)=-2.,(2,2,2,2)=2.,(2,2,2,3)=2.,(2,2,2,4)=1.,(3,1,1,1)=-1.,(3,1,1,2)=-1.,(3,1,1,3)=3.,(3,1,1,4)=1.,(3,1,2,1)=1.,(3,1,2,2)=1.,(3,1,2,3)=3.,(3,2,1,1)=1.,(3,2,1,2)=-1.,(3,2,1,3)=3.,(3,2,2,1)=-1.,(3,2,2,2)=1.,(3,2,2,3)=3.,(3,2,2,4)=1.},
datatype=float[8],storage=rectangular,
order=C_order)),THICKNESS(3),AXES(BOX),
ORIENTATION(108,77),COLOR(RGB,0,1,0));
4维数组也可使用表达式
[seq([seq([seq([x(i),y(j),z(k),F(i,j,k)],j=0..N)],i=0..M)],k=0..R)]:
来定义。
可以放入第二、第三两种格式中去。
M:
=6:
N:
=6:
R:
=6:
a:
=-3:
b:
=3:
c:
=-3:
d:
=3:
f:
=-2.5:
g:
=2.5:
x:
=i->a+(b-a)*i/M:
y:
=j->c+(d-c)*j/N:
z:
=k->f+(g-f)*k/R:
F:
=(i,j,k)->z(k)-x(i)*y(j)/4:
[seq([seq([seq([x(i),y(j),z(k),F(i,j,k)],j=0..N)],i=0..M)],k=0..R)]:
Q:
=%:
evalf(Q):
QQ:
=%:
PLOT3D(ISOSURFACE(QQ),AXES(FRAME),ORIENTATION(-25,85));
PLOT3D(ISOSURFACE(Array(1..M+1,1..N+1,1..R+1,1..4,QQ,datatype=float[8],storage=rectangular,order=C_order)),AXES(FRAME),ORIENTATION(-25,85));
图11方括号4维数组与方括号4维Array做成的ISOSURFACE图形相同
下面再用函数implicitplot3d绘制隐函数图形。
请与图11图形相对比。
plots[implicitplot3d](z-x*y/4,x=-3..3,y=-3..3,z=-2.5..2.5,axes=frame,orientation=[-25,85],grid=[7,7,13],view=[-3..3,-3..3,-2.5..2.5]);
在Q中,改变被绘制曲面的隐函数表达式和相关变量的变化范围,就可得到另外一些ISOSURFACE图形数据对象(以及图形数据结构)。
M:
=6:
N:
=6:
R:
=6:
a:
=-4:
b:
=4:
c:
=-4:
d:
=4:
f:
=0:
g:
=4:
x:
=i->a+(b-a)*i/M:
y:
=j->c+(d-c)*j/N:
z:
=k->f+(g-f)*k/R:
F:
=(i,j,k)->z(k)-sqrt(x(i)^2+y(j)^2):
[seq([seq([seq([x(i),y(j),z(k),F(i,j,k)],j=0..N)],i=0..M)],k=0..R)]:
Q:
=%:
evalf(Q):
QQ:
=%:
PLOT3D(ISOSURFACE(QQ),AXES(FRAME),ORIENTATION(35,65));
M:
=18:
N:
=18:
R:
=6:
a:
=-3:
b:
=3:
c:
=-3:
d:
=3:
f:
=-2:
g:
=6:
x:
=i->a+(b-a)*i/M:
y:
=j->c+(d-c)*j/N:
z:
=k->f+(g-f)*k/R:
F:
=(i,j,k)->2+z(k)-x(i)^2-y(j)^2:
[seq([seq([seq([x(i),y(j),z(k),F(i,j,k)],j=0..N)],i=0..M)],k=0..R)]:
Q:
=%:
evalf(Q):
QQ:
=%:
PLOT3D(ISOSURFACE(QQ),AXES(FRAME),ORIENTATION(30,70));
图9-12~24生成通用图形对象的plottools包函数
1plottools[point]
如果录入如下一些语句:
with(plottools):
with(plots):
point([0,0,1],color=black,symbol=DIAMOND,symbolsize=55,gridstyle=triangular,axes=frame,orientation=[12,56],projection=0.5,labels=[u,v,w],coords=cylindrical,title='TUXING',scaling=contraiaed,filled=true,cymbol=BOX);:
qq:
=%:
在6-7版本中可以得到图形数据对象的返回信息。
其中许多设置不起作用。
但是还能得到基本图形。
PLOT3D(qq,AXES(BOX));
图12有许多设置选项不能进入数据对象的局部信息
可是,在9.0版中并不返回图形数据对象,而出现以下一些报错信息。
Warning,thefollowingoptionsarenotusedbyplottools:
[axes=frame,labels=[u,v,w],title=TUXIN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 09 Maple 图形 数据 对象 及其 绘图