You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.4 KiB
61 lines
1.4 KiB
%PLOT_POLY Plot a polygon
|
|
%
|
|
% PLOTPOLY(P, OPTIONS) plot a polygon defined by columns of P which
|
|
% can be 2xN or 3xN.
|
|
%
|
|
% OPTIONS::
|
|
% 'fill' the color of the circle's interior, Matlab color spec
|
|
% 'alpha' transparency of the filled circle: 0=transparent, 1=solid.
|
|
%
|
|
% See also PLOT, PATCH, Polygon.
|
|
|
|
% TODO: options for fill, not filled, line style, labels (cell array of strings)
|
|
|
|
function h_ = plot_poly(p, varargin)
|
|
|
|
if numcols(p) < 3,
|
|
error('too few points for a polygon');
|
|
end
|
|
|
|
opt.fill = [];
|
|
opt.alpha = 1;
|
|
|
|
[opt,arglist] = tb_optparse(opt, varargin);
|
|
|
|
% default marker style
|
|
if isempty(arglist)
|
|
arglist = {'r-'};
|
|
end
|
|
|
|
ish = ishold();
|
|
hold on
|
|
|
|
x = [p(1,:) p(1,1)];
|
|
y = [p(2,:) p(2,1)];
|
|
if numrows(p) == 2
|
|
% plot 2D data
|
|
h(1) = plot(x, y, arglist{:});
|
|
if ~isempty(opt.fill)
|
|
h(2) = patch(x', y', 0*y', 'FaceColor', opt.fill, ...
|
|
'FaceAlpha', opt.alpha);
|
|
end
|
|
elseif numrows(p) == 3
|
|
% plot 3D data
|
|
z = [p(3,:) p(3,1)];
|
|
h(1) = plot3(x, y, z, arglist{:});
|
|
if ~isempty(opt.fill)
|
|
h(2) = patch(x, y, z, 0*y, 'FaceColor', opt.fill, ...
|
|
'FaceAlpha', opt.alpha);
|
|
end
|
|
else
|
|
error('point data must have 2 or 3 rows');
|
|
end
|
|
|
|
if ~ish
|
|
hold off
|
|
end
|
|
%figure(gcf)
|
|
|
|
if nargout > 0
|
|
h_ = h;
|
|
end
|