发布企业信息

Matlab 制作连续变焦和飞驰图形

作者:未知  信息来源:未知  2006-1-26

字体大小:  网友评论  进入论坛  

4 连续变焦和飞驰图形【 * 例 10。(1)编写三维地球生成程序 earth_zzy。m 函数文件[earth_zzy。m]function earth_zzy(ap)%erath_zyy。...
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 和指令窗中均可运行)

earth_zzy(0)


图 10.7.4 -1 三维地球图形

 

(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

分页:
Google


推荐图文

广告

机械热点图文

  • 数控车床加工编程典型实例分析2
  • 内螺纹车削加工——数控车床编程实例42
  • 子程序编程方法-数控车床编程实例36
  • 塑料模具动画演示

机械风云人物

Copyright © 2004 51base.com Inc. All rights reserved.

无忧基地 版权所有│粤ICP备06098418号│XHTML | CSS

客服:+86-755-2212 2202 工作时间:周1~5 10点~16点

感谢中国网络提供带宽支持

《网络营销技巧》