![]() |
|
Matlab 制作连续变焦和飞驰图形
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
广告招租,e-mail:yesize@hotmail.com 10.7.4 连续变焦和飞驰图形 【 * 例 10.7.4 -1 】通过 CameraPosition 设置的不断变化,使地球迎面飞来,贯穿而过,从地球另一面飞离而去。但在整个飞行过程中,相机镜头始终对着地球。 (1)编写三维地球生成程序 earth_zzy.m 函数文件 [earth_zzy.m] function earth_zzy(ap) %erath_zyy.m 绘制三维地球 % ap 取 0 时,相机视角采用自动设置; % 取 1 时,相机视角取缺省值的十分之一 , 因此地球显得较大。 load topo % 装载图象 topo 和相应的图象色图 topomap1 figure( colormap ,topomap1, Color ,[. 8 .8 .8 ]); % 设置图形窗的色图和背景色 <6> [x,y,z] = sphere(50); azzy.DataAspectRatio = [1 1 1];azzy.PlotBoxAspectRatioMode = auto ; fa = axes( Visible , off , azzy); % 设置轴的数据宽高比和坐标框三度比 szzy1.AmbientStrength = 0.1;szzy1.DiffuseStrength = 1; szzy1.SpecularColorReflectance = .5; szzy1.SpecularExponent = 20; szzy1.SpecularStrength = 1; surface(x,y,z,szzy1, FaceLighting , phong , FaceColor , texture , ... EdgeColor , none , Cdata ,topo, Parent ,fa); % 设置面对象 <13> if ap==1,set(fa, CameraViewAngle ,0.1*get(fa, CameraViewAngle )); end light( position ,[-1 0 1], color ,[0.5 1 0.5]); light( position ,[-1.5 0.5 -0.5], color ,[. 6 .2 .2 ]); light( Position ,[1.5 1.5 -1]); light( Position ,[0 -1.5 0], color ,[0.6 0.6 1]); view([-17 26])
(2)运行 erath_zzy 可以画出如下三维地球图 。(在 Notebook 和指令窗中均可运行)
(3)编写飞驰程序 fly_zzy.m 脚本文件 [fly_zzy.m] %fly_zzy.m 连续改变相机位置,产生贯穿地球的效果 earth_zzy(0) % 调用函数文件,产生三维地球图形。 <2> set(gca, CameraViewAngleMode , manual ) %<3> pos=get(gca, CameraPosition ); % 获取相机初始位置 tar=get(gca, CameraTarget ); % 获取相机目标位置 kk=(0:2:40)/15;nk=length(kk); %<6> for i=1:nk-1 newpos=pos-kk(i)*(pos-tar); % 计算新位置 <8> set(gca, CameraPosition ,newpos) % 设置相机新位置 <9> drawnow %<10> end (4)在指令窗中运行以下指令 ,就会产生贯穿地球的效果。 fly_zzy 【 * 例 10.7.4 -2 】利用属性 CameraViewAngle 产生飞驰效应。本例也用地球图形演示。在相机视角连续变化下,地球飞离,直到消失。 编写以下 M 脚本文件,并在指令窗中运行。 [fly_zzy2.m] %fly_zzy2.m 飞离而去的地球消失在远方 earth_zzy(1) % 调用 earth_zzy 函数画地球 set(gca, CameraViewAngleMode , manual ) ang=get(gca, CameraViewAngle ); % 获得当前所用相机视角 kk=(1:50)/50;nk=length(kk); for i=1:nk newang=ang+kk(i)*(180-ang); % 使相机视角不断变大 set(gca, CameraViewAngle ,newang) % 设置新视角 drawnow % 迫使 MATLAB 更新屏幕 end
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||