gusucode.com > 动态三维曲面源码程序 > 动态三维曲面源码程序/cam_manip/cam_manip.m
clc; clear; close all; t = 0; tf = 10; dt = .01; % Create a figure and a surface plot fig = figure('position',[00 00 1000 700]); centerfig ax = axes; [X,Y,Z] = peaks(50); Z = Z/max(max(Z))*.5; surf(ax,X,Y,Z); % Add the UICONTROL buttons to control the viewing angle uicontrol('Style','pushbutton','String','Zoom In','Position',[5 5 60 20],'Callback','if camva <= 5;return;else;camva(camva-5);end'); uicontrol('Style','pushbutton','String','Zoom Out','Position',[70 5 60 20],'Callback','if camva >= 175;return;else;camva(camva+5);end'); htext = uicontrol('Style','text','String','Range = 0','Position',[135 5 60 20]); % Set some axis properties axis equal axis off grid off box off % Set the camera viewing projection and angle camproj('perspective'); camva(45); for t = 0:dt:tf % Camera position xp = 2.0 * sin(2.0*3.14*0.2*t); yp = 2.0 * cos(2.0*3.14*0.2*t); zp = interp2(X,Y,Z,xp,yp,'cubic')+.1; % Roll, Yaw, Pitch roll = .25*cos(2.0*3.14*.75*t); % Roll cw/ccw a bit pitch = .1*sin(2.0*3.14*.7*t); % Pitch up and down a little bit yaw = -2*3.14/tf*t; % Continuously yaw as we go around % Calculate the rotation matrix yaw_matrix = [1 0 0; 0 cos(roll) -sin(roll); 0 sin(roll) cos(roll)]; pitch_matrix = [ cos(pitch) 0 sin(pitch); 0 1 0; -sin(pitch) 0 cos(pitch)]; roll_matrix = [cos(yaw) -sin(yaw) 0; sin(yaw) cos(yaw) 0; 0 0 1]; rot_matrix = yaw_matrix*pitch_matrix*roll_matrix; % Order matters % Find the up vector and a target vector up_vector = rot_matrix*[0;0;1]; target_vector = rot_matrix*[1;0;0]; % Reposition the camera and target campos([xp,yp,zp]); camup(up_vector); camtarget([xp;yp;zp]+target_vector); drawnow pause(dt/2) end