|
« Earlier | 5 items total |
Later » |
Here is an example from the newsgroupbut could be probably done neater with nested functions.
function test
% test gui function
% create figure
fig = figure;
% set the figure's WindowButtonDownFcn
set(fig,'WindowButtonDownFcn',{@wbd});
end
function wbd(h,evd)
disp('down')
% get the values and store them in the figure's appdata
props.WindowButtonMotionFcn = get(h,'WindowButtonMotionFcn');
props.WindowButtonUpFcn = get(h,'WindowButtonUpFcn');
setappdata(h,'TestGuiCallbacks',props);
% set the new values for the WindowButtonMotionFcn and
% WindowButtonUpFcn
set(h,'WindowButtonMotionFcn',{@wbm})
set(h,'WindowButtonUpFcn',{@wbu})
end
function wbm(h,evd)
% executes while the mouse moves
disp('motion')
end
function wbu(h,evd)
% executes when the mouse button is released
disp('up')
% get the properties and restore them
props = getappdata(h,'TestGuiCallbacks');
set(h,props);
end
If you want to show how your plots change with time, a movie is a good idea. Especially since MATLAB can produce movies that can be embedded in your presentations, or be seen with any good ol' movie player. Here's how: Courtesy of http://www.ecogito.net/matlab/The idea is to create plot figures and compile them as frames of your movie.
% Create a new figure, and position it
fig1 = figure;
winsize = get(fig1,'Position');
winsize(1:2) = [0 0];
% Create movie file with required parameters
fps= 25;
outfile = sprintf('%s',outFileName)
mov = avifile(outfile,'fps',fps,'quality',100);
% Ensure each frame is of the same size
set(fig1,'NextPlot','replacechildren');
for i=1:numframes
plot(x,y); % generate your plot
% put this plot in a movieframe
% In case plot title and axes area are needed
% F = getframe(fig1,winsize);
% For clean plot without title and axes
F = getframe;
mov = addframe(mov,F);
end
% save movie
mov = close(mov);
Voila! (Make sure that you do not open any window over your plot window while MATLAB is compiling your movie, else those windows will become part of your movie)
Use ginput function:
x=0;y=0;
while ~isempty(x)
[x1,y1]=ginput(1);
plot([x x1],[y y1],'b.-');
hold on
x=x1;y=y1;
end
Simple function to draw a voxel (cube, cuboid) in a specific position of specific dimensions in a 3-D plot. Transparency of the voxel can also be specified. Many voxels can be aggregated to form a different shapes (a simple 3-D "+" is shown in the screenshot). Written by Joel Suresh
function voxel(i,d,c,alpha);
%VOXEL function to draw a 3-D voxel in a 3-D plot
%
%Usage
% voxel(start,size,color,alpha);
%
% will draw a voxel at 'start' of size 'size' of color 'color' and
% transparency alpha (1 for opaque, 0 for transparent)
% Default size is 1
% Default color is blue
% Default alpha value is 1
%
% start is a three element vector [x,y,z]
% size the a three element vector [dx,dy,dz]
% color is a character string to specify color
% (type 'help plot' to see list of valid colors)
%
%
% voxel([2 3 4],[1 2 3],'r',0.7);
% axis([0 10 0 10 0 10]);
%
% Suresh Joel Apr 15,2003
% Updated Feb 25, 2004
switch(nargin),
case 0
disp('Too few arguements for voxel');
return;
case 1
l=1; %default length of side of voxel is 1
c='b'; %default color of voxel is blue
case 2,
c='b';
case 3,
alpha=1;
case 4,
%do nothing
otherwise
disp('Too many arguements for voxel');
end;
x=[i(1)+[0 0 0 0 d(1) d(1) d(1) d(1)]; ...
i(2)+[0 0 d(2) d(2) 0 0 d(2) d(2)]; ...
i(3)+[0 d(3) 0 d(3) 0 d(3) 0 d(3)]]';
for n=1:3
if n==3,
x=sortrows(x,[n,1]);
else
x=sortrows(x,[n n+1]);
end;
temp=x(3,:);
x(3,:)=x(4,:);
x(4,:)=temp;
h=patch(x(1:4,1),x(1:4,2),x(1:4,3),c);
set(h,'FaceAlpha',alpha);
temp=x(7,:);
x(7,:)=x(8,:);
x(8,:)=temp;
h=patch(x(5:8,1),x(5:8,2),x(5:8,3),c);
set(h,'FaceAlpha',alpha);
end
I track visitors to my site using google analytics and I noticed I had 8 visitors to my site last week looking for how to draw a circle. However I didn't have any circle drawing snippets. So I have borrowed some code from the Mathworks file exchange. This code is courtesy of Zhenhai Wang.
function H=circle(center,radius,NOP,style)
%-----------------------------------------------------
% H=CIRCLE(CENTER,RADIUS,NOP,STYLE)
% This routine draws a circle with center defined as
% a vector CENTER, radius as a scaler RADIS. NOP is
% the number of points on the circle. As to STYLE,
% use it the same way as you use the rountine PLOT.
% Since the handle of the object is returned, you
% use routine SET to get the best result.
%
% Usage Examples,
%
% circle([1,3],3,1000,':');
% circle([2,4],2,1000,'--');
%
% Zhenhai Wang <zhenhai@ieee.org>
% Version 1.00
% December, 2002
%-----------------------------------------------------
if (nargin <3),
error('Please see help for INPUT DATA.');
elseif (nargin==3)
style='b-';
end;
THETA=linspace(0,2*pi,NOP);
RHO=ones(1,NOP)*radius;
[X,Y] = pol2cart(THETA,RHO);
X=X+center(1);
Y=Y+center(2);
H=plot(X,Y,style);
axis square;
|
« Earlier | 5 items total |
Later » |
|
|